From 78ce3a098653489ce22e4d8b84a66fa9d9ca4dcf Mon Sep 17 00:00:00 2001 From: Rohan Doshi Date: Sat, 16 Nov 2024 23:29:49 +0530 Subject: [PATCH 01/25] add new meesage to proto for moniker streaming call --- generated/nifpga/nifpga.proto | 484 ++++++++++++++++++ generated/nifpga/nifpga_service.cpp | 88 ++-- source/codegen/common_helpers.py | 9 +- source/codegen/proto_helpers.py | 12 + source/codegen/templates/proto.mako | 4 + source/codegen/templates/proto_helpers.mako | 32 ++ source/codegen/templates/service_helpers.mako | 22 +- 7 files changed, 595 insertions(+), 56 deletions(-) diff --git a/generated/nifpga/nifpga.proto b/generated/nifpga/nifpga.proto index ecf2de121..74083d1bb 100644 --- a/generated/nifpga/nifpga.proto +++ b/generated/nifpga/nifpga.proto @@ -502,6 +502,15 @@ message BeginReadArrayBoolResponse { ni.data_monikers.Moniker moniker = 2; } +message ReadArrayBoolStreamingData { + ReadArrayBoolStreamingDataResponse response = 2; +} + +message ReadArrayBoolStreamingDataResponse { + int32 status = 1; + repeated bool array = 2; +} + message ReadArrayDblRequest { nidevice_grpc.Session session = 1; uint32 indicator = 2; @@ -524,6 +533,15 @@ message BeginReadArrayDblResponse { ni.data_monikers.Moniker moniker = 2; } +message ReadArrayDblStreamingData { + ReadArrayDblStreamingDataResponse response = 2; +} + +message ReadArrayDblStreamingDataResponse { + int32 status = 1; + repeated double array = 2; +} + message ReadArrayI16Request { nidevice_grpc.Session session = 1; uint32 indicator = 2; @@ -546,6 +564,15 @@ message BeginReadArrayI16Response { ni.data_monikers.Moniker moniker = 2; } +message ReadArrayI16StreamingData { + ReadArrayI16StreamingDataResponse response = 2; +} + +message ReadArrayI16StreamingDataResponse { + int32 status = 1; + repeated int32 array = 2; +} + message ReadArrayI32Request { nidevice_grpc.Session session = 1; uint32 indicator = 2; @@ -568,6 +595,15 @@ message BeginReadArrayI32Response { ni.data_monikers.Moniker moniker = 2; } +message ReadArrayI32StreamingData { + ReadArrayI32StreamingDataResponse response = 2; +} + +message ReadArrayI32StreamingDataResponse { + int32 status = 1; + repeated int32 array = 2; +} + message ReadArrayI64Request { nidevice_grpc.Session session = 1; uint32 indicator = 2; @@ -590,6 +626,15 @@ message BeginReadArrayI64Response { ni.data_monikers.Moniker moniker = 2; } +message ReadArrayI64StreamingData { + ReadArrayI64StreamingDataResponse response = 2; +} + +message ReadArrayI64StreamingDataResponse { + int32 status = 1; + repeated int64 array = 2; +} + message ReadArrayI8Request { nidevice_grpc.Session session = 1; uint32 indicator = 2; @@ -612,6 +657,15 @@ message BeginReadArrayI8Response { ni.data_monikers.Moniker moniker = 2; } +message ReadArrayI8StreamingData { + ReadArrayI8StreamingDataResponse response = 2; +} + +message ReadArrayI8StreamingDataResponse { + int32 status = 1; + repeated int32 array = 2; +} + message ReadArraySglRequest { nidevice_grpc.Session session = 1; uint32 indicator = 2; @@ -634,6 +688,15 @@ message BeginReadArraySglResponse { ni.data_monikers.Moniker moniker = 2; } +message ReadArraySglStreamingData { + ReadArraySglStreamingDataResponse response = 2; +} + +message ReadArraySglStreamingDataResponse { + int32 status = 1; + repeated float array = 2; +} + message ReadArrayU16Request { nidevice_grpc.Session session = 1; uint32 indicator = 2; @@ -656,6 +719,15 @@ message BeginReadArrayU16Response { ni.data_monikers.Moniker moniker = 2; } +message ReadArrayU16StreamingData { + ReadArrayU16StreamingDataResponse response = 2; +} + +message ReadArrayU16StreamingDataResponse { + int32 status = 1; + repeated uint32 array = 2; +} + message ReadArrayU32Request { nidevice_grpc.Session session = 1; uint32 indicator = 2; @@ -678,6 +750,15 @@ message BeginReadArrayU32Response { ni.data_monikers.Moniker moniker = 2; } +message ReadArrayU32StreamingData { + ReadArrayU32StreamingDataResponse response = 2; +} + +message ReadArrayU32StreamingDataResponse { + int32 status = 1; + repeated uint32 array = 2; +} + message ReadArrayU64Request { nidevice_grpc.Session session = 1; uint32 indicator = 2; @@ -700,6 +781,15 @@ message BeginReadArrayU64Response { ni.data_monikers.Moniker moniker = 2; } +message ReadArrayU64StreamingData { + ReadArrayU64StreamingDataResponse response = 2; +} + +message ReadArrayU64StreamingDataResponse { + int32 status = 1; + repeated uint64 array = 2; +} + message ReadArrayU8Request { nidevice_grpc.Session session = 1; uint32 indicator = 2; @@ -722,6 +812,15 @@ message BeginReadArrayU8Response { ni.data_monikers.Moniker moniker = 2; } +message ReadArrayU8StreamingData { + ReadArrayU8StreamingDataResponse response = 2; +} + +message ReadArrayU8StreamingDataResponse { + int32 status = 1; + repeated uint32 array = 2; +} + message ReadBoolRequest { nidevice_grpc.Session session = 1; uint32 indicator = 2; @@ -742,6 +841,15 @@ message BeginReadBoolResponse { ni.data_monikers.Moniker moniker = 2; } +message ReadBoolStreamingData { + ReadBoolStreamingDataResponse response = 2; +} + +message ReadBoolStreamingDataResponse { + int32 status = 1; + bool value = 2; +} + message ReadDblRequest { nidevice_grpc.Session session = 1; uint32 indicator = 2; @@ -762,6 +870,15 @@ message BeginReadDblResponse { ni.data_monikers.Moniker moniker = 2; } +message ReadDblStreamingData { + ReadDblStreamingDataResponse response = 2; +} + +message ReadDblStreamingDataResponse { + int32 status = 1; + double value = 2; +} + message ReadFifoBoolRequest { nidevice_grpc.Session session = 1; uint32 fifo = 2; @@ -925,6 +1042,15 @@ message BeginReadI16Response { ni.data_monikers.Moniker moniker = 2; } +message ReadI16StreamingData { + ReadI16StreamingDataResponse response = 2; +} + +message ReadI16StreamingDataResponse { + int32 status = 1; + int32 value = 2; +} + message ReadI32Request { nidevice_grpc.Session session = 1; uint32 indicator = 2; @@ -945,6 +1071,15 @@ message BeginReadI32Response { ni.data_monikers.Moniker moniker = 2; } +message ReadI32StreamingData { + ReadI32StreamingDataResponse response = 2; +} + +message ReadI32StreamingDataResponse { + int32 status = 1; + int32 value = 2; +} + message ReadI64Request { nidevice_grpc.Session session = 1; uint32 indicator = 2; @@ -965,6 +1100,15 @@ message BeginReadI64Response { ni.data_monikers.Moniker moniker = 2; } +message ReadI64StreamingData { + ReadI64StreamingDataResponse response = 2; +} + +message ReadI64StreamingDataResponse { + int32 status = 1; + int64 value = 2; +} + message ReadI8Request { nidevice_grpc.Session session = 1; uint32 indicator = 2; @@ -985,6 +1129,15 @@ message BeginReadI8Response { ni.data_monikers.Moniker moniker = 2; } +message ReadI8StreamingData { + ReadI8StreamingDataResponse response = 2; +} + +message ReadI8StreamingDataResponse { + int32 status = 1; + int32 value = 2; +} + message ReadSglRequest { nidevice_grpc.Session session = 1; uint32 indicator = 2; @@ -1005,6 +1158,15 @@ message BeginReadSglResponse { ni.data_monikers.Moniker moniker = 2; } +message ReadSglStreamingData { + ReadSglStreamingDataResponse response = 2; +} + +message ReadSglStreamingDataResponse { + int32 status = 1; + float value = 2; +} + message ReadU16Request { nidevice_grpc.Session session = 1; uint32 indicator = 2; @@ -1025,6 +1187,15 @@ message BeginReadU16Response { ni.data_monikers.Moniker moniker = 2; } +message ReadU16StreamingData { + ReadU16StreamingDataResponse response = 2; +} + +message ReadU16StreamingDataResponse { + int32 status = 1; + uint32 value = 2; +} + message ReadU32Request { nidevice_grpc.Session session = 1; uint32 indicator = 2; @@ -1045,6 +1216,15 @@ message BeginReadU32Response { ni.data_monikers.Moniker moniker = 2; } +message ReadU32StreamingData { + ReadU32StreamingDataResponse response = 2; +} + +message ReadU32StreamingDataResponse { + int32 status = 1; + uint32 value = 2; +} + message ReadU64Request { nidevice_grpc.Session session = 1; uint32 indicator = 2; @@ -1065,6 +1245,15 @@ message BeginReadU64Response { ni.data_monikers.Moniker moniker = 2; } +message ReadU64StreamingData { + ReadU64StreamingDataResponse response = 2; +} + +message ReadU64StreamingDataResponse { + int32 status = 1; + uint64 value = 2; +} + message ReadU8Request { nidevice_grpc.Session session = 1; uint32 indicator = 2; @@ -1085,6 +1274,15 @@ message BeginReadU8Response { ni.data_monikers.Moniker moniker = 2; } +message ReadU8StreamingData { + ReadU8StreamingDataResponse response = 2; +} + +message ReadU8StreamingDataResponse { + int32 status = 1; + uint32 value = 2; +} + message ReleaseFifoElementsRequest { nidevice_grpc.Session session = 1; uint32 fifo = 2; @@ -1230,6 +1428,19 @@ message BeginWriteArrayBoolResponse { ni.data_monikers.Moniker moniker = 2; } +message WriteArrayBoolStreamingData { + WriteArrayBoolStreamingDataRequest request = 1; + WriteArrayBoolStreamingDataResponse response = 2; +} + +message WriteArrayBoolStreamingDataRequest { + repeated bool array = 1; +} + +message WriteArrayBoolStreamingDataResponse { + int32 status = 1; +} + message WriteArrayDblRequest { nidevice_grpc.Session session = 1; uint32 control = 2; @@ -1250,6 +1461,19 @@ message BeginWriteArrayDblResponse { ni.data_monikers.Moniker moniker = 2; } +message WriteArrayDblStreamingData { + WriteArrayDblStreamingDataRequest request = 1; + WriteArrayDblStreamingDataResponse response = 2; +} + +message WriteArrayDblStreamingDataRequest { + repeated double array = 1; +} + +message WriteArrayDblStreamingDataResponse { + int32 status = 1; +} + message WriteArrayI16Request { nidevice_grpc.Session session = 1; uint32 control = 2; @@ -1270,6 +1494,19 @@ message BeginWriteArrayI16Response { ni.data_monikers.Moniker moniker = 2; } +message WriteArrayI16StreamingData { + WriteArrayI16StreamingDataRequest request = 1; + WriteArrayI16StreamingDataResponse response = 2; +} + +message WriteArrayI16StreamingDataRequest { + repeated int32 array = 1; +} + +message WriteArrayI16StreamingDataResponse { + int32 status = 1; +} + message WriteArrayI32Request { nidevice_grpc.Session session = 1; uint32 control = 2; @@ -1290,6 +1527,19 @@ message BeginWriteArrayI32Response { ni.data_monikers.Moniker moniker = 2; } +message WriteArrayI32StreamingData { + WriteArrayI32StreamingDataRequest request = 1; + WriteArrayI32StreamingDataResponse response = 2; +} + +message WriteArrayI32StreamingDataRequest { + repeated int32 array = 1; +} + +message WriteArrayI32StreamingDataResponse { + int32 status = 1; +} + message WriteArrayI64Request { nidevice_grpc.Session session = 1; uint32 control = 2; @@ -1310,6 +1560,19 @@ message BeginWriteArrayI64Response { ni.data_monikers.Moniker moniker = 2; } +message WriteArrayI64StreamingData { + WriteArrayI64StreamingDataRequest request = 1; + WriteArrayI64StreamingDataResponse response = 2; +} + +message WriteArrayI64StreamingDataRequest { + repeated int64 array = 1; +} + +message WriteArrayI64StreamingDataResponse { + int32 status = 1; +} + message WriteArrayI8Request { nidevice_grpc.Session session = 1; uint32 control = 2; @@ -1330,6 +1593,19 @@ message BeginWriteArrayI8Response { ni.data_monikers.Moniker moniker = 2; } +message WriteArrayI8StreamingData { + WriteArrayI8StreamingDataRequest request = 1; + WriteArrayI8StreamingDataResponse response = 2; +} + +message WriteArrayI8StreamingDataRequest { + repeated int32 array = 1; +} + +message WriteArrayI8StreamingDataResponse { + int32 status = 1; +} + message WriteArraySglRequest { nidevice_grpc.Session session = 1; uint32 control = 2; @@ -1350,6 +1626,19 @@ message BeginWriteArraySglResponse { ni.data_monikers.Moniker moniker = 2; } +message WriteArraySglStreamingData { + WriteArraySglStreamingDataRequest request = 1; + WriteArraySglStreamingDataResponse response = 2; +} + +message WriteArraySglStreamingDataRequest { + repeated float array = 1; +} + +message WriteArraySglStreamingDataResponse { + int32 status = 1; +} + message WriteArrayU16Request { nidevice_grpc.Session session = 1; uint32 control = 2; @@ -1370,6 +1659,19 @@ message BeginWriteArrayU16Response { ni.data_monikers.Moniker moniker = 2; } +message WriteArrayU16StreamingData { + WriteArrayU16StreamingDataRequest request = 1; + WriteArrayU16StreamingDataResponse response = 2; +} + +message WriteArrayU16StreamingDataRequest { + repeated uint32 array = 1; +} + +message WriteArrayU16StreamingDataResponse { + int32 status = 1; +} + message WriteArrayU32Request { nidevice_grpc.Session session = 1; uint32 control = 2; @@ -1390,6 +1692,19 @@ message BeginWriteArrayU32Response { ni.data_monikers.Moniker moniker = 2; } +message WriteArrayU32StreamingData { + WriteArrayU32StreamingDataRequest request = 1; + WriteArrayU32StreamingDataResponse response = 2; +} + +message WriteArrayU32StreamingDataRequest { + repeated uint32 array = 1; +} + +message WriteArrayU32StreamingDataResponse { + int32 status = 1; +} + message WriteArrayU64Request { nidevice_grpc.Session session = 1; uint32 control = 2; @@ -1410,6 +1725,19 @@ message BeginWriteArrayU64Response { ni.data_monikers.Moniker moniker = 2; } +message WriteArrayU64StreamingData { + WriteArrayU64StreamingDataRequest request = 1; + WriteArrayU64StreamingDataResponse response = 2; +} + +message WriteArrayU64StreamingDataRequest { + repeated uint64 array = 1; +} + +message WriteArrayU64StreamingDataResponse { + int32 status = 1; +} + message WriteArrayU8Request { nidevice_grpc.Session session = 1; uint32 control = 2; @@ -1430,6 +1758,19 @@ message BeginWriteArrayU8Response { ni.data_monikers.Moniker moniker = 2; } +message WriteArrayU8StreamingData { + WriteArrayU8StreamingDataRequest request = 1; + WriteArrayU8StreamingDataResponse response = 2; +} + +message WriteArrayU8StreamingDataRequest { + repeated uint32 array = 1; +} + +message WriteArrayU8StreamingDataResponse { + int32 status = 1; +} + message WriteBoolRequest { nidevice_grpc.Session session = 1; uint32 control = 2; @@ -1450,6 +1791,19 @@ message BeginWriteBoolResponse { ni.data_monikers.Moniker moniker = 2; } +message WriteBoolStreamingData { + WriteBoolStreamingDataRequest request = 1; + WriteBoolStreamingDataResponse response = 2; +} + +message WriteBoolStreamingDataRequest { + bool value = 1; +} + +message WriteBoolStreamingDataResponse { + int32 status = 1; +} + message WriteDblRequest { nidevice_grpc.Session session = 1; uint32 control = 2; @@ -1470,6 +1824,19 @@ message BeginWriteDblResponse { ni.data_monikers.Moniker moniker = 2; } +message WriteDblStreamingData { + WriteDblStreamingDataRequest request = 1; + WriteDblStreamingDataResponse response = 2; +} + +message WriteDblStreamingDataRequest { + double value = 1; +} + +message WriteDblStreamingDataResponse { + int32 status = 1; +} + message WriteFifoBoolRequest { nidevice_grpc.Session session = 1; uint32 fifo = 2; @@ -1622,6 +1989,19 @@ message BeginWriteI16Response { ni.data_monikers.Moniker moniker = 2; } +message WriteI16StreamingData { + WriteI16StreamingDataRequest request = 1; + WriteI16StreamingDataResponse response = 2; +} + +message WriteI16StreamingDataRequest { + int32 value = 1; +} + +message WriteI16StreamingDataResponse { + int32 status = 1; +} + message WriteI32Request { nidevice_grpc.Session session = 1; uint32 control = 2; @@ -1642,6 +2022,19 @@ message BeginWriteI32Response { ni.data_monikers.Moniker moniker = 2; } +message WriteI32StreamingData { + WriteI32StreamingDataRequest request = 1; + WriteI32StreamingDataResponse response = 2; +} + +message WriteI32StreamingDataRequest { + int32 value = 1; +} + +message WriteI32StreamingDataResponse { + int32 status = 1; +} + message WriteI64Request { nidevice_grpc.Session session = 1; uint32 control = 2; @@ -1662,6 +2055,19 @@ message BeginWriteI64Response { ni.data_monikers.Moniker moniker = 2; } +message WriteI64StreamingData { + WriteI64StreamingDataRequest request = 1; + WriteI64StreamingDataResponse response = 2; +} + +message WriteI64StreamingDataRequest { + int64 value = 1; +} + +message WriteI64StreamingDataResponse { + int32 status = 1; +} + message WriteI8Request { nidevice_grpc.Session session = 1; uint32 control = 2; @@ -1682,6 +2088,19 @@ message BeginWriteI8Response { ni.data_monikers.Moniker moniker = 2; } +message WriteI8StreamingData { + WriteI8StreamingDataRequest request = 1; + WriteI8StreamingDataResponse response = 2; +} + +message WriteI8StreamingDataRequest { + int32 value = 1; +} + +message WriteI8StreamingDataResponse { + int32 status = 1; +} + message WriteSglRequest { nidevice_grpc.Session session = 1; uint32 control = 2; @@ -1702,6 +2121,19 @@ message BeginWriteSglResponse { ni.data_monikers.Moniker moniker = 2; } +message WriteSglStreamingData { + WriteSglStreamingDataRequest request = 1; + WriteSglStreamingDataResponse response = 2; +} + +message WriteSglStreamingDataRequest { + float value = 1; +} + +message WriteSglStreamingDataResponse { + int32 status = 1; +} + message WriteU16Request { nidevice_grpc.Session session = 1; uint32 control = 2; @@ -1722,6 +2154,19 @@ message BeginWriteU16Response { ni.data_monikers.Moniker moniker = 2; } +message WriteU16StreamingData { + WriteU16StreamingDataRequest request = 1; + WriteU16StreamingDataResponse response = 2; +} + +message WriteU16StreamingDataRequest { + uint32 value = 1; +} + +message WriteU16StreamingDataResponse { + int32 status = 1; +} + message WriteU32Request { nidevice_grpc.Session session = 1; uint32 control = 2; @@ -1742,6 +2187,19 @@ message BeginWriteU32Response { ni.data_monikers.Moniker moniker = 2; } +message WriteU32StreamingData { + WriteU32StreamingDataRequest request = 1; + WriteU32StreamingDataResponse response = 2; +} + +message WriteU32StreamingDataRequest { + uint32 value = 1; +} + +message WriteU32StreamingDataResponse { + int32 status = 1; +} + message WriteU64Request { nidevice_grpc.Session session = 1; uint32 control = 2; @@ -1762,6 +2220,19 @@ message BeginWriteU64Response { ni.data_monikers.Moniker moniker = 2; } +message WriteU64StreamingData { + WriteU64StreamingDataRequest request = 1; + WriteU64StreamingDataResponse response = 2; +} + +message WriteU64StreamingDataRequest { + uint64 value = 1; +} + +message WriteU64StreamingDataResponse { + int32 status = 1; +} + message WriteU8Request { nidevice_grpc.Session session = 1; uint32 control = 2; @@ -1782,3 +2253,16 @@ message BeginWriteU8Response { ni.data_monikers.Moniker moniker = 2; } +message WriteU8StreamingData { + WriteU8StreamingDataRequest request = 1; + WriteU8StreamingDataResponse response = 2; +} + +message WriteU8StreamingDataRequest { + uint32 value = 1; +} + +message WriteU8StreamingDataResponse { + int32 status = 1; +} + diff --git a/generated/nifpga/nifpga_service.cpp b/generated/nifpga/nifpga_service.cpp index 86c5651cb..2e407bf9f 100644 --- a/generated/nifpga/nifpga_service.cpp +++ b/generated/nifpga/nifpga_service.cpp @@ -27,7 +27,7 @@ namespace nifpga_grpc { NiFpga_Session session; uint32_t indicator; size_t size; - nifpga_grpc::ArrayBoolData data; + nifpga_grpc::ReadArrayBoolStreamingData data; std::shared_ptr library; }; @@ -36,7 +36,7 @@ namespace nifpga_grpc { NiFpga_Session session; uint32_t indicator; size_t size; - nifpga_grpc::ArrayDoubleData data; + nifpga_grpc::ReadArrayDblStreamingData data; std::shared_ptr library; }; @@ -45,7 +45,7 @@ namespace nifpga_grpc { NiFpga_Session session; uint32_t indicator; size_t size; - nifpga_grpc::ArrayI32Data data; + nifpga_grpc::ReadArrayI16StreamingData data; std::shared_ptr library; }; @@ -54,7 +54,7 @@ namespace nifpga_grpc { NiFpga_Session session; uint32_t indicator; size_t size; - nifpga_grpc::ArrayI32Data data; + nifpga_grpc::ReadArrayI32StreamingData data; std::shared_ptr library; }; @@ -63,7 +63,7 @@ namespace nifpga_grpc { NiFpga_Session session; uint32_t indicator; size_t size; - nifpga_grpc::ArrayI64Data data; + nifpga_grpc::ReadArrayI64StreamingData data; std::shared_ptr library; }; @@ -72,7 +72,7 @@ namespace nifpga_grpc { NiFpga_Session session; uint32_t indicator; size_t size; - nifpga_grpc::ArrayI32Data data; + nifpga_grpc::ReadArrayI8StreamingData data; std::shared_ptr library; }; @@ -81,7 +81,7 @@ namespace nifpga_grpc { NiFpga_Session session; uint32_t indicator; size_t size; - nifpga_grpc::ArrayFloatData data; + nifpga_grpc::ReadArraySglStreamingData data; std::shared_ptr library; }; @@ -90,7 +90,7 @@ namespace nifpga_grpc { NiFpga_Session session; uint32_t indicator; size_t size; - nifpga_grpc::ArrayU32Data data; + nifpga_grpc::ReadArrayU16StreamingData data; std::shared_ptr library; }; @@ -99,7 +99,7 @@ namespace nifpga_grpc { NiFpga_Session session; uint32_t indicator; size_t size; - nifpga_grpc::ArrayU32Data data; + nifpga_grpc::ReadArrayU32StreamingData data; std::shared_ptr library; }; @@ -108,7 +108,7 @@ namespace nifpga_grpc { NiFpga_Session session; uint32_t indicator; size_t size; - nifpga_grpc::ArrayU64Data data; + nifpga_grpc::ReadArrayU64StreamingData data; std::shared_ptr library; }; @@ -117,7 +117,7 @@ namespace nifpga_grpc { NiFpga_Session session; uint32_t indicator; size_t size; - nifpga_grpc::ArrayU32Data data; + nifpga_grpc::ReadArrayU8StreamingData data; std::shared_ptr library; }; @@ -125,7 +125,7 @@ namespace nifpga_grpc { { NiFpga_Session session; uint32_t indicator; - nifpga_grpc::BoolData data; + nifpga_grpc::ReadBoolStreamingData data; std::shared_ptr library; }; @@ -133,7 +133,7 @@ namespace nifpga_grpc { { NiFpga_Session session; uint32_t indicator; - nifpga_grpc::DoubleData data; + nifpga_grpc::ReadDblStreamingData data; std::shared_ptr library; }; @@ -141,7 +141,7 @@ namespace nifpga_grpc { { NiFpga_Session session; uint32_t indicator; - nifpga_grpc::I32Data data; + nifpga_grpc::ReadI16StreamingData data; std::shared_ptr library; }; @@ -149,7 +149,7 @@ namespace nifpga_grpc { { NiFpga_Session session; uint32_t indicator; - nifpga_grpc::I32Data data; + nifpga_grpc::ReadI32StreamingData data; std::shared_ptr library; }; @@ -157,7 +157,7 @@ namespace nifpga_grpc { { NiFpga_Session session; uint32_t indicator; - nifpga_grpc::I64Data data; + nifpga_grpc::ReadI64StreamingData data; std::shared_ptr library; }; @@ -165,7 +165,7 @@ namespace nifpga_grpc { { NiFpga_Session session; uint32_t indicator; - nifpga_grpc::I32Data data; + nifpga_grpc::ReadI8StreamingData data; std::shared_ptr library; }; @@ -173,7 +173,7 @@ namespace nifpga_grpc { { NiFpga_Session session; uint32_t indicator; - nifpga_grpc::FloatData data; + nifpga_grpc::ReadSglStreamingData data; std::shared_ptr library; }; @@ -181,7 +181,7 @@ namespace nifpga_grpc { { NiFpga_Session session; uint32_t indicator; - nifpga_grpc::U32Data data; + nifpga_grpc::ReadU16StreamingData data; std::shared_ptr library; }; @@ -189,7 +189,7 @@ namespace nifpga_grpc { { NiFpga_Session session; uint32_t indicator; - nifpga_grpc::U32Data data; + nifpga_grpc::ReadU32StreamingData data; std::shared_ptr library; }; @@ -197,7 +197,7 @@ namespace nifpga_grpc { { NiFpga_Session session; uint32_t indicator; - nifpga_grpc::U64Data data; + nifpga_grpc::ReadU64StreamingData data; std::shared_ptr library; }; @@ -205,7 +205,7 @@ namespace nifpga_grpc { { NiFpga_Session session; uint32_t indicator; - nifpga_grpc::U32Data data; + nifpga_grpc::ReadU8StreamingData data; std::shared_ptr library; }; @@ -213,7 +213,7 @@ namespace nifpga_grpc { { NiFpga_Session session; uint32_t control; - nifpga_grpc::ArrayBoolData data; + nifpga_grpc::WriteArrayBoolStreamingData data; std::shared_ptr library; }; @@ -221,7 +221,7 @@ namespace nifpga_grpc { { NiFpga_Session session; uint32_t control; - nifpga_grpc::ArrayDoubleData data; + nifpga_grpc::WriteArrayDblStreamingData data; std::shared_ptr library; }; @@ -229,7 +229,7 @@ namespace nifpga_grpc { { NiFpga_Session session; uint32_t control; - nifpga_grpc::ArrayI32Data data; + nifpga_grpc::WriteArrayI16StreamingData data; std::shared_ptr library; }; @@ -237,7 +237,7 @@ namespace nifpga_grpc { { NiFpga_Session session; uint32_t control; - nifpga_grpc::ArrayI32Data data; + nifpga_grpc::WriteArrayI32StreamingData data; std::shared_ptr library; }; @@ -245,7 +245,7 @@ namespace nifpga_grpc { { NiFpga_Session session; uint32_t control; - nifpga_grpc::ArrayI64Data data; + nifpga_grpc::WriteArrayI64StreamingData data; std::shared_ptr library; }; @@ -253,7 +253,7 @@ namespace nifpga_grpc { { NiFpga_Session session; uint32_t control; - nifpga_grpc::ArrayI32Data data; + nifpga_grpc::WriteArrayI8StreamingData data; std::shared_ptr library; }; @@ -261,7 +261,7 @@ namespace nifpga_grpc { { NiFpga_Session session; uint32_t control; - nifpga_grpc::ArrayFloatData data; + nifpga_grpc::WriteArraySglStreamingData data; std::shared_ptr library; }; @@ -269,7 +269,7 @@ namespace nifpga_grpc { { NiFpga_Session session; uint32_t control; - nifpga_grpc::ArrayU32Data data; + nifpga_grpc::WriteArrayU16StreamingData data; std::shared_ptr library; }; @@ -277,7 +277,7 @@ namespace nifpga_grpc { { NiFpga_Session session; uint32_t control; - nifpga_grpc::ArrayU32Data data; + nifpga_grpc::WriteArrayU32StreamingData data; std::shared_ptr library; }; @@ -285,7 +285,7 @@ namespace nifpga_grpc { { NiFpga_Session session; uint32_t control; - nifpga_grpc::ArrayU64Data data; + nifpga_grpc::WriteArrayU64StreamingData data; std::shared_ptr library; }; @@ -293,7 +293,7 @@ namespace nifpga_grpc { { NiFpga_Session session; uint32_t control; - nifpga_grpc::ArrayU32Data data; + nifpga_grpc::WriteArrayU8StreamingData data; std::shared_ptr library; }; @@ -301,7 +301,7 @@ namespace nifpga_grpc { { NiFpga_Session session; uint32_t control; - nifpga_grpc::BoolData data; + nifpga_grpc::WriteBoolStreamingData data; std::shared_ptr library; }; @@ -309,7 +309,7 @@ namespace nifpga_grpc { { NiFpga_Session session; uint32_t control; - nifpga_grpc::DoubleData data; + nifpga_grpc::WriteDblStreamingData data; std::shared_ptr library; }; @@ -317,7 +317,7 @@ namespace nifpga_grpc { { NiFpga_Session session; uint32_t control; - nifpga_grpc::I32Data data; + nifpga_grpc::WriteI16StreamingData data; std::shared_ptr library; }; @@ -325,7 +325,7 @@ namespace nifpga_grpc { { NiFpga_Session session; uint32_t control; - nifpga_grpc::I32Data data; + nifpga_grpc::WriteI32StreamingData data; std::shared_ptr library; }; @@ -333,7 +333,7 @@ namespace nifpga_grpc { { NiFpga_Session session; uint32_t control; - nifpga_grpc::I64Data data; + nifpga_grpc::WriteI64StreamingData data; std::shared_ptr library; }; @@ -341,7 +341,7 @@ namespace nifpga_grpc { { NiFpga_Session session; uint32_t control; - nifpga_grpc::I32Data data; + nifpga_grpc::WriteI8StreamingData data; std::shared_ptr library; }; @@ -349,7 +349,7 @@ namespace nifpga_grpc { { NiFpga_Session session; uint32_t control; - nifpga_grpc::FloatData data; + nifpga_grpc::WriteSglStreamingData data; std::shared_ptr library; }; @@ -357,7 +357,7 @@ namespace nifpga_grpc { { NiFpga_Session session; uint32_t control; - nifpga_grpc::U32Data data; + nifpga_grpc::WriteU16StreamingData data; std::shared_ptr library; }; @@ -365,7 +365,7 @@ namespace nifpga_grpc { { NiFpga_Session session; uint32_t control; - nifpga_grpc::U32Data data; + nifpga_grpc::WriteU32StreamingData data; std::shared_ptr library; }; @@ -373,7 +373,7 @@ namespace nifpga_grpc { { NiFpga_Session session; uint32_t control; - nifpga_grpc::U64Data data; + nifpga_grpc::WriteU64StreamingData data; std::shared_ptr library; }; @@ -381,7 +381,7 @@ namespace nifpga_grpc { { NiFpga_Session session; uint32_t control; - nifpga_grpc::U32Data data; + nifpga_grpc::WriteU8StreamingData data; std::shared_ptr library; }; diff --git a/source/codegen/common_helpers.py b/source/codegen/common_helpers.py index 8c5957a89..82754a048 100644 --- a/source/codegen/common_helpers.py +++ b/source/codegen/common_helpers.py @@ -1207,9 +1207,12 @@ def get_params_needing_initialization(parameters: List[dict]) -> List[dict]: def filter_moniker_streaming_functions(functions, functions_to_generate): """Return streaming functions that need to be generated.""" return [ - name for name in functions_to_generate if functions[name].get("is_streaming_api", False) + name for name in functions_to_generate if is_moniker_streaming_function(functions[name]) ] +def is_moniker_streaming_function(function): + """Whether this function is for streaming data through moniker.""" + return function.get("is_streaming_api", False) def get_data_moniker_function_name(function_name): """Return the corresponding moniker function name for the given C API function.""" @@ -1220,6 +1223,10 @@ def get_data_moniker_struct_name(function_name): """Return the corresponding moniker function name for the given C API function.""" return f"{function_name.replace('Begin', 'Moniker')}Data" +def get_data_moniker_request_response_data_type(function_name): + """Return the corresponding moniker function name for the given C API function.""" + return f"{function_name.replace('Begin', '')}StreamingData" + def is_function_in_streaming_functions(function_name, streaming_functions_to_generate): """Check if a function name is in the streaming functions to generate.""" diff --git a/source/codegen/proto_helpers.py b/source/codegen/proto_helpers.py index caa1b38f4..7e39141b6 100644 --- a/source/codegen/proto_helpers.py +++ b/source/codegen/proto_helpers.py @@ -253,6 +253,18 @@ def get_parameters(function): return (input_parameters, output_parameters) +def get_streaming_moniker_function_parameters(function): + """TODO + """ + parameter_array = common_helpers.filter_parameters_for_grpc_fields(function["parameters"]) + input_parameters = [p for p in parameter_array if common_helpers.is_input_parameter(p) and p.get("is_streaming_type", False)] + default_status_param = {"name": "status", "type": "int32", "grpc_type": "int32"} + output_parameters = [default_status_param] + output_parameters.extend( + [p for p in parameter_array if common_helpers.is_output_parameter(p)] + ) + return (input_parameters, output_parameters) + def _get_callback_output_params(function): """Look for a parameter that specifies callback_params and return those params. diff --git a/source/codegen/templates/proto.mako b/source/codegen/templates/proto.mako index ba9f1b448..8d4d9a897 100644 --- a/source/codegen/templates/proto.mako +++ b/source/codegen/templates/proto.mako @@ -68,4 +68,8 @@ ${mako_helper.define_request_message(function, input_parameters)}\ ${mako_helper.define_response_message(function, output_parameters)}\ +% if common_helpers.is_moniker_streaming_function(functions[function]): +${mako_helper.define_moniker_request_response_message(function, functions)}\ + +% endif % endfor \ No newline at end of file diff --git a/source/codegen/templates/proto_helpers.mako b/source/codegen/templates/proto_helpers.mako index 6ba300c22..bdbde9935 100644 --- a/source/codegen/templates/proto_helpers.mako +++ b/source/codegen/templates/proto_helpers.mako @@ -113,6 +113,38 @@ message ${common_helpers.snake_to_pascal(function)}Response { } +## Define a proto message moniker streaming function. +<%def name="define_moniker_request_response_message(begin_function_name, functions)">\ +<% + request_response_data_type = common_helpers.get_data_moniker_request_response_data_type(begin_function_name) + non_streaming_function_name = begin_function_name.replace("Begin", "") + input_parameters, output_parameters = proto_helpers.get_streaming_moniker_function_parameters(functions[non_streaming_function_name]) + + request_parameters = proto_helpers.get_message_parameter_definitions(input_parameters) + response_parameters = proto_helpers.get_message_parameter_definitions(output_parameters) +%>\ +message ${request_response_data_type} { +% if request_parameters: + ${request_response_data_type}Request request = 1; +% endif + ${request_response_data_type}Response response = 2; +} + +% if request_parameters: +message ${request_response_data_type}Request { +% for parameter in request_parameters: + ${parameter["type"]} ${parameter["name"]} = ${parameter["grpc_field_number"]}; +% endfor +} + +% endif +message ${request_response_data_type}Response { +% for parameter in response_parameters: + ${parameter["type"]} ${parameter["name"]} = ${parameter["grpc_field_number"]}; +% endfor +} + + ## Define a proto message for a given custom type. <%def name="define_custom_type(custom_type)">\ <% diff --git a/source/codegen/templates/service_helpers.mako b/source/codegen/templates/service_helpers.mako index 22149771e..90ed1921b 100644 --- a/source/codegen/templates/service_helpers.mako +++ b/source/codegen/templates/service_helpers.mako @@ -285,6 +285,7 @@ ${populate_response(function_data=function_data, parameters=parameters)}\ service_class_prefix = config["service_class_prefix"] grpc_streaming_type = streaming_param['grpc_streaming_type'] struct_name = common_helpers.get_data_moniker_struct_name(function_name) + request_response_data_type = common_helpers.get_data_moniker_request_response_data_type(function_name) streaming_params_to_include = common_helpers.get_input_streaming_params(parameters) %>\ struct ${struct_name} @@ -297,9 +298,8 @@ ${populate_response(function_data=function_data, parameters=parameters)}\ ${parameter['type']}* ${parameter_name}; % else: ${parameter['type']} ${parameter_name}; -% endif - % endfor - ${service_class_prefix.lower()}_grpc::${grpc_streaming_type} data; +% endfor + ${service_class_prefix.lower()}_grpc::${request_response_data_type} data; std::shared_ptr<${service_class_prefix}LibraryInterface> library; }; @@ -312,8 +312,8 @@ ${populate_response(function_data=function_data, parameters=parameters)}\ streaming_param = common_helpers.get_first_streaming_parameter(function_data['parameters']) streaming_type = streaming_param['type'] grpc_streaming_type = streaming_param['grpc_streaming_type'] - arg_string = service_helpers.create_args(function_data['parameters']) - arg_string = arg_string.replace(", &moniker", "").strip() + moniker_params = function_data['parameters'][:-1] # skip "moniker" param from Begin API + arg_string = service_helpers.create_args(moniker_params) data_type = streaming_type.replace("[]", "") c_api_name = service_helpers.get_c_api_name(function_name) streaming_params_to_include = common_helpers.get_input_streaming_params(function_data['parameters']) @@ -325,11 +325,11 @@ ${populate_response(function_data=function_data, parameters=parameters)}\ auto library = function_data->library;\ ${initialize_moniker_input_parameters(streaming_params_to_include)}\ ${initialize_moniker_output_parameters(output_params_to_define)}\ - % if streaming_param and streaming_param['direction'] == 'out': -${streaming_handle_out_direction(c_api_name, arg_string, data_type, streaming_type, streaming_param)}\ - % elif streaming_param and streaming_param['direction'] == 'in': -${streaming_handle_in_direction(c_api_name, arg_string, data_type, grpc_streaming_type, streaming_type, streaming_param)}\ - % endif + % if streaming_param and streaming_param['direction'] == 'in': + ${streaming_handle_in_direction(c_api_name, arg_string, data_type, grpc_streaming_type, streaming_type, streaming_param)}\ + % elif streaming_param and streaming_param['direction'] == 'out': + ${streaming_handle_out_direction(c_api_name, arg_string, data_type, streaming_type, streaming_param, moniker_params)}\ + % endif if (status < 0) { std::cout << "${moniker_function_name} error: " << status << std::endl; } @@ -361,7 +361,7 @@ ${initialize_streaming_input_param(function_name, streaming_params_to_include, p return ::grpc::Status::OK;\ -<%def name="streaming_handle_out_direction(c_api_name, arg_string, data_type, streaming_type, streaming_param)"> +<%def name="streaming_handle_out_direction(c_api_name, arg_string, data_type, streaming_type, streaming_param, moniker_params)"> <% is_array = common_helpers.is_array(streaming_type) %>\ From 36e8360c0a0eb35f83f4324483b5ac3dc21388b7 Mon Sep 17 00:00:00 2001 From: Rohan Doshi Date: Mon, 18 Nov 2024 17:57:27 +0530 Subject: [PATCH 02/25] work-in-progress: codegen changes for service.cpp generation with response on moniker out param --- generated/nifpga/nifpga_service.cpp | 9621 ++++++++--------- source/codegen/templates/service.cpp.mako | 7 +- source/codegen/templates/service_helpers.mako | 81 +- 3 files changed, 4832 insertions(+), 4877 deletions(-) diff --git a/generated/nifpga/nifpga_service.cpp b/generated/nifpga/nifpga_service.cpp index 2e407bf9f..4d0171973 100644 --- a/generated/nifpga/nifpga_service.cpp +++ b/generated/nifpga/nifpga_service.cpp @@ -6,991 +6,948 @@ //--------------------------------------------------------------------- #include "nifpga_service.h" -#include +#include +#include + +#include #include #include -#include +#include #include -#include -#include namespace nifpga_grpc { - using nidevice_grpc::converters::allocate_output_storage; - using nidevice_grpc::converters::calculate_linked_array_size; - using nidevice_grpc::converters::convert_from_grpc; - using nidevice_grpc::converters::convert_to_grpc; - using nidevice_grpc::converters::MatchState; - - struct MonikerReadArrayBoolData - { - NiFpga_Session session; - uint32_t indicator; - size_t size; - nifpga_grpc::ReadArrayBoolStreamingData data; - std::shared_ptr library; - }; - - struct MonikerReadArrayDblData - { - NiFpga_Session session; - uint32_t indicator; - size_t size; - nifpga_grpc::ReadArrayDblStreamingData data; - std::shared_ptr library; - }; - - struct MonikerReadArrayI16Data - { - NiFpga_Session session; - uint32_t indicator; - size_t size; - nifpga_grpc::ReadArrayI16StreamingData data; - std::shared_ptr library; - }; - - struct MonikerReadArrayI32Data - { - NiFpga_Session session; - uint32_t indicator; - size_t size; - nifpga_grpc::ReadArrayI32StreamingData data; - std::shared_ptr library; - }; - - struct MonikerReadArrayI64Data - { - NiFpga_Session session; - uint32_t indicator; - size_t size; - nifpga_grpc::ReadArrayI64StreamingData data; - std::shared_ptr library; - }; - - struct MonikerReadArrayI8Data - { - NiFpga_Session session; - uint32_t indicator; - size_t size; - nifpga_grpc::ReadArrayI8StreamingData data; - std::shared_ptr library; - }; - - struct MonikerReadArraySglData - { - NiFpga_Session session; - uint32_t indicator; - size_t size; - nifpga_grpc::ReadArraySglStreamingData data; - std::shared_ptr library; - }; - - struct MonikerReadArrayU16Data - { - NiFpga_Session session; - uint32_t indicator; - size_t size; - nifpga_grpc::ReadArrayU16StreamingData data; - std::shared_ptr library; - }; - - struct MonikerReadArrayU32Data - { - NiFpga_Session session; - uint32_t indicator; - size_t size; - nifpga_grpc::ReadArrayU32StreamingData data; - std::shared_ptr library; - }; - - struct MonikerReadArrayU64Data - { - NiFpga_Session session; - uint32_t indicator; - size_t size; - nifpga_grpc::ReadArrayU64StreamingData data; - std::shared_ptr library; - }; - - struct MonikerReadArrayU8Data - { - NiFpga_Session session; - uint32_t indicator; - size_t size; - nifpga_grpc::ReadArrayU8StreamingData data; - std::shared_ptr library; - }; - - struct MonikerReadBoolData - { - NiFpga_Session session; - uint32_t indicator; - nifpga_grpc::ReadBoolStreamingData data; - std::shared_ptr library; - }; - - struct MonikerReadDblData - { - NiFpga_Session session; - uint32_t indicator; - nifpga_grpc::ReadDblStreamingData data; - std::shared_ptr library; - }; - - struct MonikerReadI16Data - { - NiFpga_Session session; - uint32_t indicator; - nifpga_grpc::ReadI16StreamingData data; - std::shared_ptr library; - }; - - struct MonikerReadI32Data - { - NiFpga_Session session; - uint32_t indicator; - nifpga_grpc::ReadI32StreamingData data; - std::shared_ptr library; - }; - - struct MonikerReadI64Data - { - NiFpga_Session session; - uint32_t indicator; - nifpga_grpc::ReadI64StreamingData data; - std::shared_ptr library; - }; - - struct MonikerReadI8Data - { - NiFpga_Session session; - uint32_t indicator; - nifpga_grpc::ReadI8StreamingData data; - std::shared_ptr library; - }; - - struct MonikerReadSglData - { - NiFpga_Session session; - uint32_t indicator; - nifpga_grpc::ReadSglStreamingData data; - std::shared_ptr library; - }; - - struct MonikerReadU16Data - { - NiFpga_Session session; - uint32_t indicator; - nifpga_grpc::ReadU16StreamingData data; - std::shared_ptr library; - }; - - struct MonikerReadU32Data - { - NiFpga_Session session; - uint32_t indicator; - nifpga_grpc::ReadU32StreamingData data; - std::shared_ptr library; - }; - - struct MonikerReadU64Data - { - NiFpga_Session session; - uint32_t indicator; - nifpga_grpc::ReadU64StreamingData data; - std::shared_ptr library; - }; - - struct MonikerReadU8Data - { - NiFpga_Session session; - uint32_t indicator; - nifpga_grpc::ReadU8StreamingData data; - std::shared_ptr library; - }; - - struct MonikerWriteArrayBoolData - { - NiFpga_Session session; - uint32_t control; - nifpga_grpc::WriteArrayBoolStreamingData data; - std::shared_ptr library; - }; - - struct MonikerWriteArrayDblData - { - NiFpga_Session session; - uint32_t control; - nifpga_grpc::WriteArrayDblStreamingData data; - std::shared_ptr library; - }; - - struct MonikerWriteArrayI16Data - { - NiFpga_Session session; - uint32_t control; - nifpga_grpc::WriteArrayI16StreamingData data; - std::shared_ptr library; - }; - - struct MonikerWriteArrayI32Data - { - NiFpga_Session session; - uint32_t control; - nifpga_grpc::WriteArrayI32StreamingData data; - std::shared_ptr library; - }; - - struct MonikerWriteArrayI64Data - { - NiFpga_Session session; - uint32_t control; - nifpga_grpc::WriteArrayI64StreamingData data; - std::shared_ptr library; - }; - - struct MonikerWriteArrayI8Data - { - NiFpga_Session session; - uint32_t control; - nifpga_grpc::WriteArrayI8StreamingData data; - std::shared_ptr library; - }; - - struct MonikerWriteArraySglData - { - NiFpga_Session session; - uint32_t control; - nifpga_grpc::WriteArraySglStreamingData data; - std::shared_ptr library; - }; - - struct MonikerWriteArrayU16Data - { - NiFpga_Session session; - uint32_t control; - nifpga_grpc::WriteArrayU16StreamingData data; - std::shared_ptr library; - }; - - struct MonikerWriteArrayU32Data - { - NiFpga_Session session; - uint32_t control; - nifpga_grpc::WriteArrayU32StreamingData data; - std::shared_ptr library; - }; - - struct MonikerWriteArrayU64Data - { - NiFpga_Session session; - uint32_t control; - nifpga_grpc::WriteArrayU64StreamingData data; - std::shared_ptr library; - }; - - struct MonikerWriteArrayU8Data - { - NiFpga_Session session; - uint32_t control; - nifpga_grpc::WriteArrayU8StreamingData data; - std::shared_ptr library; - }; - - struct MonikerWriteBoolData - { - NiFpga_Session session; - uint32_t control; - nifpga_grpc::WriteBoolStreamingData data; - std::shared_ptr library; - }; - - struct MonikerWriteDblData - { - NiFpga_Session session; - uint32_t control; - nifpga_grpc::WriteDblStreamingData data; - std::shared_ptr library; - }; - - struct MonikerWriteI16Data - { - NiFpga_Session session; - uint32_t control; - nifpga_grpc::WriteI16StreamingData data; - std::shared_ptr library; - }; - - struct MonikerWriteI32Data - { - NiFpga_Session session; - uint32_t control; - nifpga_grpc::WriteI32StreamingData data; - std::shared_ptr library; - }; - - struct MonikerWriteI64Data - { - NiFpga_Session session; - uint32_t control; - nifpga_grpc::WriteI64StreamingData data; - std::shared_ptr library; - }; - - struct MonikerWriteI8Data - { - NiFpga_Session session; - uint32_t control; - nifpga_grpc::WriteI8StreamingData data; - std::shared_ptr library; - }; - - struct MonikerWriteSglData - { - NiFpga_Session session; - uint32_t control; - nifpga_grpc::WriteSglStreamingData data; - std::shared_ptr library; - }; - - struct MonikerWriteU16Data - { - NiFpga_Session session; - uint32_t control; - nifpga_grpc::WriteU16StreamingData data; - std::shared_ptr library; - }; - - struct MonikerWriteU32Data - { - NiFpga_Session session; - uint32_t control; - nifpga_grpc::WriteU32StreamingData data; - std::shared_ptr library; - }; - - struct MonikerWriteU64Data - { - NiFpga_Session session; - uint32_t control; - nifpga_grpc::WriteU64StreamingData data; - std::shared_ptr library; - }; - - struct MonikerWriteU8Data - { - NiFpga_Session session; - uint32_t control; - nifpga_grpc::WriteU8StreamingData data; - std::shared_ptr library; - }; - - NiFpgaService::NiFpgaService( - LibrarySharedPtr library, - ResourceRepositorySharedPtr resource_repository, - const NiFpgaFeatureToggles& feature_toggles) - : library_(library), +using nidevice_grpc::converters::allocate_output_storage; +using nidevice_grpc::converters::calculate_linked_array_size; +using nidevice_grpc::converters::convert_from_grpc; +using nidevice_grpc::converters::convert_to_grpc; +using nidevice_grpc::converters::MatchState; + +struct MonikerReadArrayBoolData { + NiFpga_Session session; + uint32_t indicator; + size_t size; + nifpga_grpc::ReadArrayBoolStreamingData data; + std::shared_ptr library; +}; + +struct MonikerReadArrayDblData { + NiFpga_Session session; + uint32_t indicator; + size_t size; + nifpga_grpc::ReadArrayDblStreamingData data; + std::shared_ptr library; +}; + +struct MonikerReadArrayI16Data { + NiFpga_Session session; + uint32_t indicator; + size_t size; + nifpga_grpc::ReadArrayI16StreamingData data; + std::shared_ptr library; +}; + +struct MonikerReadArrayI32Data { + NiFpga_Session session; + uint32_t indicator; + size_t size; + nifpga_grpc::ReadArrayI32StreamingData data; + std::shared_ptr library; +}; + +struct MonikerReadArrayI64Data { + NiFpga_Session session; + uint32_t indicator; + size_t size; + nifpga_grpc::ReadArrayI64StreamingData data; + std::shared_ptr library; +}; + +struct MonikerReadArrayI8Data { + NiFpga_Session session; + uint32_t indicator; + size_t size; + nifpga_grpc::ReadArrayI8StreamingData data; + std::shared_ptr library; +}; + +struct MonikerReadArraySglData { + NiFpga_Session session; + uint32_t indicator; + size_t size; + nifpga_grpc::ReadArraySglStreamingData data; + std::shared_ptr library; +}; + +struct MonikerReadArrayU16Data { + NiFpga_Session session; + uint32_t indicator; + size_t size; + nifpga_grpc::ReadArrayU16StreamingData data; + std::shared_ptr library; +}; + +struct MonikerReadArrayU32Data { + NiFpga_Session session; + uint32_t indicator; + size_t size; + nifpga_grpc::ReadArrayU32StreamingData data; + std::shared_ptr library; +}; + +struct MonikerReadArrayU64Data { + NiFpga_Session session; + uint32_t indicator; + size_t size; + nifpga_grpc::ReadArrayU64StreamingData data; + std::shared_ptr library; +}; + +struct MonikerReadArrayU8Data { + NiFpga_Session session; + uint32_t indicator; + size_t size; + nifpga_grpc::ReadArrayU8StreamingData data; + std::shared_ptr library; +}; + +struct MonikerReadBoolData { + NiFpga_Session session; + uint32_t indicator; + nifpga_grpc::ReadBoolStreamingData data; + std::shared_ptr library; +}; + +struct MonikerReadDblData { + NiFpga_Session session; + uint32_t indicator; + nifpga_grpc::ReadDblStreamingData data; + std::shared_ptr library; +}; + +struct MonikerReadI16Data { + NiFpga_Session session; + uint32_t indicator; + nifpga_grpc::ReadI16StreamingData data; + std::shared_ptr library; +}; + +struct MonikerReadI32Data { + NiFpga_Session session; + uint32_t indicator; + nifpga_grpc::ReadI32StreamingData data; + std::shared_ptr library; +}; + +struct MonikerReadI64Data { + NiFpga_Session session; + uint32_t indicator; + nifpga_grpc::ReadI64StreamingData data; + std::shared_ptr library; +}; + +struct MonikerReadI8Data { + NiFpga_Session session; + uint32_t indicator; + nifpga_grpc::ReadI8StreamingData data; + std::shared_ptr library; +}; + +struct MonikerReadSglData { + NiFpga_Session session; + uint32_t indicator; + nifpga_grpc::ReadSglStreamingData data; + std::shared_ptr library; +}; + +struct MonikerReadU16Data { + NiFpga_Session session; + uint32_t indicator; + nifpga_grpc::ReadU16StreamingData data; + std::shared_ptr library; +}; + +struct MonikerReadU32Data { + NiFpga_Session session; + uint32_t indicator; + nifpga_grpc::ReadU32StreamingData data; + std::shared_ptr library; +}; + +struct MonikerReadU64Data { + NiFpga_Session session; + uint32_t indicator; + nifpga_grpc::ReadU64StreamingData data; + std::shared_ptr library; +}; + +struct MonikerReadU8Data { + NiFpga_Session session; + uint32_t indicator; + nifpga_grpc::ReadU8StreamingData data; + std::shared_ptr library; +}; + +struct MonikerWriteArrayBoolData { + NiFpga_Session session; + uint32_t control; + nifpga_grpc::WriteArrayBoolStreamingData data; + std::shared_ptr library; +}; + +struct MonikerWriteArrayDblData { + NiFpga_Session session; + uint32_t control; + nifpga_grpc::WriteArrayDblStreamingData data; + std::shared_ptr library; +}; + +struct MonikerWriteArrayI16Data { + NiFpga_Session session; + uint32_t control; + nifpga_grpc::WriteArrayI16StreamingData data; + std::shared_ptr library; +}; + +struct MonikerWriteArrayI32Data { + NiFpga_Session session; + uint32_t control; + nifpga_grpc::WriteArrayI32StreamingData data; + std::shared_ptr library; +}; + +struct MonikerWriteArrayI64Data { + NiFpga_Session session; + uint32_t control; + nifpga_grpc::WriteArrayI64StreamingData data; + std::shared_ptr library; +}; + +struct MonikerWriteArrayI8Data { + NiFpga_Session session; + uint32_t control; + nifpga_grpc::WriteArrayI8StreamingData data; + std::shared_ptr library; +}; + +struct MonikerWriteArraySglData { + NiFpga_Session session; + uint32_t control; + nifpga_grpc::WriteArraySglStreamingData data; + std::shared_ptr library; +}; + +struct MonikerWriteArrayU16Data { + NiFpga_Session session; + uint32_t control; + nifpga_grpc::WriteArrayU16StreamingData data; + std::shared_ptr library; +}; + +struct MonikerWriteArrayU32Data { + NiFpga_Session session; + uint32_t control; + nifpga_grpc::WriteArrayU32StreamingData data; + std::shared_ptr library; +}; + +struct MonikerWriteArrayU64Data { + NiFpga_Session session; + uint32_t control; + nifpga_grpc::WriteArrayU64StreamingData data; + std::shared_ptr library; +}; + +struct MonikerWriteArrayU8Data { + NiFpga_Session session; + uint32_t control; + nifpga_grpc::WriteArrayU8StreamingData data; + std::shared_ptr library; +}; + +struct MonikerWriteBoolData { + NiFpga_Session session; + uint32_t control; + nifpga_grpc::WriteBoolStreamingData data; + std::shared_ptr library; +}; + +struct MonikerWriteDblData { + NiFpga_Session session; + uint32_t control; + nifpga_grpc::WriteDblStreamingData data; + std::shared_ptr library; +}; + +struct MonikerWriteI16Data { + NiFpga_Session session; + uint32_t control; + nifpga_grpc::WriteI16StreamingData data; + std::shared_ptr library; +}; + +struct MonikerWriteI32Data { + NiFpga_Session session; + uint32_t control; + nifpga_grpc::WriteI32StreamingData data; + std::shared_ptr library; +}; + +struct MonikerWriteI64Data { + NiFpga_Session session; + uint32_t control; + nifpga_grpc::WriteI64StreamingData data; + std::shared_ptr library; +}; + +struct MonikerWriteI8Data { + NiFpga_Session session; + uint32_t control; + nifpga_grpc::WriteI8StreamingData data; + std::shared_ptr library; +}; + +struct MonikerWriteSglData { + NiFpga_Session session; + uint32_t control; + nifpga_grpc::WriteSglStreamingData data; + std::shared_ptr library; +}; + +struct MonikerWriteU16Data { + NiFpga_Session session; + uint32_t control; + nifpga_grpc::WriteU16StreamingData data; + std::shared_ptr library; +}; + +struct MonikerWriteU32Data { + NiFpga_Session session; + uint32_t control; + nifpga_grpc::WriteU32StreamingData data; + std::shared_ptr library; +}; + +struct MonikerWriteU64Data { + NiFpga_Session session; + uint32_t control; + nifpga_grpc::WriteU64StreamingData data; + std::shared_ptr library; +}; + +struct MonikerWriteU8Data { + NiFpga_Session session; + uint32_t control; + nifpga_grpc::WriteU8StreamingData data; + std::shared_ptr library; +}; + +NiFpgaService::NiFpgaService( + LibrarySharedPtr library, + ResourceRepositorySharedPtr resource_repository, + const NiFpgaFeatureToggles& feature_toggles) + : library_(library), session_repository_(resource_repository), feature_toggles_(feature_toggles) - { - } - - NiFpgaService::~NiFpgaService() - { - } - - // 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; - } - - void RegisterMonikerEndpoints() - { - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadArrayBool", MonikerReadArrayBool); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadArrayDbl", MonikerReadArrayDbl); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadArrayI16", MonikerReadArrayI16); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadArrayI32", MonikerReadArrayI32); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadArrayI64", MonikerReadArrayI64); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadArrayI8", MonikerReadArrayI8); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadArraySgl", MonikerReadArraySgl); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadArrayU16", MonikerReadArrayU16); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadArrayU32", MonikerReadArrayU32); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadArrayU64", MonikerReadArrayU64); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadArrayU8", MonikerReadArrayU8); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadBool", MonikerReadBool); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadDbl", MonikerReadDbl); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadI16", MonikerReadI16); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadI32", MonikerReadI32); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadI64", MonikerReadI64); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadI8", MonikerReadI8); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadSgl", MonikerReadSgl); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadU16", MonikerReadU16); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadU32", MonikerReadU32); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadU64", MonikerReadU64); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadU8", MonikerReadU8); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteArrayBool", MonikerWriteArrayBool); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteArrayDbl", MonikerWriteArrayDbl); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteArrayI16", MonikerWriteArrayI16); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteArrayI32", MonikerWriteArrayI32); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteArrayI64", MonikerWriteArrayI64); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteArrayI8", MonikerWriteArrayI8); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteArraySgl", MonikerWriteArraySgl); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteArrayU16", MonikerWriteArrayU16); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteArrayU32", MonikerWriteArrayU32); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteArrayU64", MonikerWriteArrayU64); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteArrayU8", MonikerWriteArrayU8); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteBool", MonikerWriteBool); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteDbl", MonikerWriteDbl); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteI16", MonikerWriteI16); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteI32", MonikerWriteI32); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteI64", MonikerWriteI64); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteI8", MonikerWriteI8); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteSgl", MonikerWriteSgl); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteU16", MonikerWriteU16); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteU32", MonikerWriteU32); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteU64", MonikerWriteU64); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteU8", MonikerWriteU8); - } +{ +} -::grpc::Status MonikerReadArrayBool(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) +NiFpgaService::~NiFpgaService() { - MonikerReadArrayBoolData* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto indicator = function_data->indicator; - auto size = function_data->size; +} - std::vector array(size, NiFpga_Bool()); - auto status = library->ReadArrayBool(session, indicator, array.data(), size); - if (status >= 0) { - std::transform( +// 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; +} + +void RegisterMonikerEndpoints() +{ + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadArrayBool", MonikerReadArrayBool); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadArrayDbl", MonikerReadArrayDbl); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadArrayI16", MonikerReadArrayI16); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadArrayI32", MonikerReadArrayI32); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadArrayI64", MonikerReadArrayI64); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadArrayI8", MonikerReadArrayI8); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadArraySgl", MonikerReadArraySgl); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadArrayU16", MonikerReadArrayU16); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadArrayU32", MonikerReadArrayU32); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadArrayU64", MonikerReadArrayU64); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadArrayU8", MonikerReadArrayU8); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadBool", MonikerReadBool); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadDbl", MonikerReadDbl); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadI16", MonikerReadI16); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadI32", MonikerReadI32); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadI64", MonikerReadI64); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadI8", MonikerReadI8); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadSgl", MonikerReadSgl); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadU16", MonikerReadU16); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadU32", MonikerReadU32); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadU64", MonikerReadU64); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadU8", MonikerReadU8); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteArrayBool", MonikerWriteArrayBool); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteArrayDbl", MonikerWriteArrayDbl); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteArrayI16", MonikerWriteArrayI16); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteArrayI32", MonikerWriteArrayI32); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteArrayI64", MonikerWriteArrayI64); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteArrayI8", MonikerWriteArrayI8); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteArraySgl", MonikerWriteArraySgl); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteArrayU16", MonikerWriteArrayU16); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteArrayU32", MonikerWriteArrayU32); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteArrayU64", MonikerWriteArrayU64); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteArrayU8", MonikerWriteArrayU8); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteBool", MonikerWriteBool); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteDbl", MonikerWriteDbl); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteI16", MonikerWriteI16); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteI32", MonikerWriteI32); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteI64", MonikerWriteI64); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteI8", MonikerWriteI8); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteSgl", MonikerWriteSgl); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteU16", MonikerWriteU16); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteU32", MonikerWriteU32); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteU64", MonikerWriteU64); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteU8", MonikerWriteU8); +} + +::grpc::Status MonikerReadArrayBool(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) +{ + MonikerReadArrayBoolData* function_data = static_cast(data); + auto library = function_data->library; + auto session = function_data->session; + auto indicator = function_data->indicator; + auto size = function_data->size; + + std::vector array(size, NiFpga_Bool()); + auto status = library->ReadArrayBool(session, indicator, array.data(), size); + if (status >= 0) { + std::transform( array.begin(), array.begin() + size, function_data->data.mutable_value()->begin(), [&](auto x) { - return x; - }); - packedData.PackFrom(function_data->data); - } + return x; + }); + packedData.PackFrom(function_data->data); + } - if (status < 0) { - std::cout << "MonikerReadArrayBool error: " << status << std::endl; - } - return ::grpc::Status::OK; + if (status < 0) { + std::cout << "MonikerReadArrayBool error: " << status << std::endl; + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadArrayDbl(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadArrayDblData* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto indicator = function_data->indicator; - auto size = function_data->size; - - function_data->data.mutable_value()->Resize(size, 0); - auto array = function_data->data.mutable_value()->mutable_data(); - auto status = library->ReadArrayDbl(session, indicator, array, size); - if (status >= 0) { - packedData.PackFrom(function_data->data); - } + MonikerReadArrayDblData* function_data = static_cast(data); + auto library = function_data->library; + auto session = function_data->session; + auto indicator = function_data->indicator; + auto size = function_data->size; - if (status < 0) { - std::cout << "MonikerReadArrayDbl error: " << status << std::endl; - } - return ::grpc::Status::OK; + function_data->data.mutable_value()->Resize(size, 0); + auto array = function_data->data.mutable_value()->mutable_data(); + auto status = library->ReadArrayDbl(session, indicator, array, size); + if (status >= 0) { + packedData.PackFrom(function_data->data); + } + + if (status < 0) { + std::cout << "MonikerReadArrayDbl error: " << status << std::endl; + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadArrayI16(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadArrayI16Data* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto indicator = function_data->indicator; - auto size = function_data->size; - - std::vector array(size); - auto status = library->ReadArrayI16(session, indicator, array.data(), size); - if (status >= 0) { - std::transform( + MonikerReadArrayI16Data* function_data = static_cast(data); + auto library = function_data->library; + auto session = function_data->session; + auto indicator = function_data->indicator; + auto size = function_data->size; + + std::vector array(size); + auto status = library->ReadArrayI16(session, indicator, array.data(), size); + if (status >= 0) { + std::transform( array.begin(), array.begin() + size, function_data->data.mutable_value()->begin(), [&](auto x) { - return x; - }); - packedData.PackFrom(function_data->data); - } + return x; + }); + packedData.PackFrom(function_data->data); + } - if (status < 0) { - std::cout << "MonikerReadArrayI16 error: " << status << std::endl; - } - return ::grpc::Status::OK; + if (status < 0) { + std::cout << "MonikerReadArrayI16 error: " << status << std::endl; + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadArrayI32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadArrayI32Data* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto indicator = function_data->indicator; - auto size = function_data->size; - - function_data->data.mutable_value()->Resize(size, 0); - auto array = function_data->data.mutable_value()->mutable_data(); - auto status = library->ReadArrayI32(session, indicator, array, size); - if (status >= 0) { - packedData.PackFrom(function_data->data); - } + MonikerReadArrayI32Data* function_data = static_cast(data); + auto library = function_data->library; + auto session = function_data->session; + auto indicator = function_data->indicator; + auto size = function_data->size; - if (status < 0) { - std::cout << "MonikerReadArrayI32 error: " << status << std::endl; - } - return ::grpc::Status::OK; + function_data->data.mutable_value()->Resize(size, 0); + auto array = function_data->data.mutable_value()->mutable_data(); + auto status = library->ReadArrayI32(session, indicator, array, size); + if (status >= 0) { + packedData.PackFrom(function_data->data); + } + + if (status < 0) { + std::cout << "MonikerReadArrayI32 error: " << status << std::endl; + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadArrayI64(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadArrayI64Data* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto indicator = function_data->indicator; - auto size = function_data->size; - - function_data->data.mutable_value()->Resize(size, 0); - auto array = function_data->data.mutable_value()->mutable_data(); - auto status = library->ReadArrayI64(session, indicator, array, size); - if (status >= 0) { - packedData.PackFrom(function_data->data); - } + MonikerReadArrayI64Data* function_data = static_cast(data); + auto library = function_data->library; + auto session = function_data->session; + auto indicator = function_data->indicator; + auto size = function_data->size; - if (status < 0) { - std::cout << "MonikerReadArrayI64 error: " << status << std::endl; - } - return ::grpc::Status::OK; + function_data->data.mutable_value()->Resize(size, 0); + auto array = function_data->data.mutable_value()->mutable_data(); + auto status = library->ReadArrayI64(session, indicator, array, size); + if (status >= 0) { + packedData.PackFrom(function_data->data); + } + + if (status < 0) { + std::cout << "MonikerReadArrayI64 error: " << status << std::endl; + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadArrayI8(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadArrayI8Data* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto indicator = function_data->indicator; - auto size = function_data->size; - - std::vector array(size); - auto status = library->ReadArrayI8(session, indicator, array.data(), size); - if (status >= 0) { - std::transform( + MonikerReadArrayI8Data* function_data = static_cast(data); + auto library = function_data->library; + auto session = function_data->session; + auto indicator = function_data->indicator; + auto size = function_data->size; + + std::vector array(size); + auto status = library->ReadArrayI8(session, indicator, array.data(), size); + if (status >= 0) { + std::transform( array.begin(), array.begin() + size, function_data->data.mutable_value()->begin(), [&](auto x) { - return x; - }); - packedData.PackFrom(function_data->data); - } + return x; + }); + packedData.PackFrom(function_data->data); + } - if (status < 0) { - std::cout << "MonikerReadArrayI8 error: " << status << std::endl; - } - return ::grpc::Status::OK; + if (status < 0) { + std::cout << "MonikerReadArrayI8 error: " << status << std::endl; + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadArraySgl(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadArraySglData* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto indicator = function_data->indicator; - auto size = function_data->size; - - function_data->data.mutable_value()->Resize(size, 0); - auto array = function_data->data.mutable_value()->mutable_data(); - auto status = library->ReadArraySgl(session, indicator, array, size); - if (status >= 0) { - packedData.PackFrom(function_data->data); - } + MonikerReadArraySglData* function_data = static_cast(data); + auto library = function_data->library; + auto session = function_data->session; + auto indicator = function_data->indicator; + auto size = function_data->size; - if (status < 0) { - std::cout << "MonikerReadArraySgl error: " << status << std::endl; - } - return ::grpc::Status::OK; + function_data->data.mutable_value()->Resize(size, 0); + auto array = function_data->data.mutable_value()->mutable_data(); + auto status = library->ReadArraySgl(session, indicator, array, size); + if (status >= 0) { + packedData.PackFrom(function_data->data); + } + + if (status < 0) { + std::cout << "MonikerReadArraySgl error: " << status << std::endl; + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadArrayU16(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadArrayU16Data* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto indicator = function_data->indicator; - auto size = function_data->size; - - std::vector array(size); - auto status = library->ReadArrayU16(session, indicator, array.data(), size); - if (status >= 0) { - std::transform( + MonikerReadArrayU16Data* function_data = static_cast(data); + auto library = function_data->library; + auto session = function_data->session; + auto indicator = function_data->indicator; + auto size = function_data->size; + + std::vector array(size); + auto status = library->ReadArrayU16(session, indicator, array.data(), size); + if (status >= 0) { + std::transform( array.begin(), array.begin() + size, function_data->data.mutable_value()->begin(), [&](auto x) { - return x; - }); - packedData.PackFrom(function_data->data); - } + return x; + }); + packedData.PackFrom(function_data->data); + } - if (status < 0) { - std::cout << "MonikerReadArrayU16 error: " << status << std::endl; - } - return ::grpc::Status::OK; + if (status < 0) { + std::cout << "MonikerReadArrayU16 error: " << status << std::endl; + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadArrayU32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadArrayU32Data* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto indicator = function_data->indicator; - auto size = function_data->size; - - function_data->data.mutable_value()->Resize(size, 0); - auto array = function_data->data.mutable_value()->mutable_data(); - auto status = library->ReadArrayU32(session, indicator, array, size); - if (status >= 0) { - packedData.PackFrom(function_data->data); - } + MonikerReadArrayU32Data* function_data = static_cast(data); + auto library = function_data->library; + auto session = function_data->session; + auto indicator = function_data->indicator; + auto size = function_data->size; - if (status < 0) { - std::cout << "MonikerReadArrayU32 error: " << status << std::endl; - } - return ::grpc::Status::OK; + function_data->data.mutable_value()->Resize(size, 0); + auto array = function_data->data.mutable_value()->mutable_data(); + auto status = library->ReadArrayU32(session, indicator, array, size); + if (status >= 0) { + packedData.PackFrom(function_data->data); + } + + if (status < 0) { + std::cout << "MonikerReadArrayU32 error: " << status << std::endl; + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadArrayU64(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadArrayU64Data* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto indicator = function_data->indicator; - auto size = function_data->size; - - function_data->data.mutable_value()->Resize(size, 0); - auto array = function_data->data.mutable_value()->mutable_data(); - auto status = library->ReadArrayU64(session, indicator, array, size); - if (status >= 0) { - packedData.PackFrom(function_data->data); - } + MonikerReadArrayU64Data* function_data = static_cast(data); + auto library = function_data->library; + auto session = function_data->session; + auto indicator = function_data->indicator; + auto size = function_data->size; - if (status < 0) { - std::cout << "MonikerReadArrayU64 error: " << status << std::endl; - } - return ::grpc::Status::OK; + function_data->data.mutable_value()->Resize(size, 0); + auto array = function_data->data.mutable_value()->mutable_data(); + auto status = library->ReadArrayU64(session, indicator, array, size); + if (status >= 0) { + packedData.PackFrom(function_data->data); + } + + if (status < 0) { + std::cout << "MonikerReadArrayU64 error: " << status << std::endl; + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadArrayU8(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadArrayU8Data* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto indicator = function_data->indicator; - auto size = function_data->size; - - std::vector array(size); - auto status = library->ReadArrayU8(session, indicator, array.data(), size); - if (status >= 0) { - std::transform( + MonikerReadArrayU8Data* function_data = static_cast(data); + auto library = function_data->library; + auto session = function_data->session; + auto indicator = function_data->indicator; + auto size = function_data->size; + + std::vector array(size); + auto status = library->ReadArrayU8(session, indicator, array.data(), size); + if (status >= 0) { + std::transform( array.begin(), array.begin() + size, function_data->data.mutable_value()->begin(), [&](auto x) { - return x; - }); - packedData.PackFrom(function_data->data); - } + return x; + }); + packedData.PackFrom(function_data->data); + } - if (status < 0) { - std::cout << "MonikerReadArrayU8 error: " << status << std::endl; - } - return ::grpc::Status::OK; + if (status < 0) { + std::cout << "MonikerReadArrayU8 error: " << status << std::endl; + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadBool(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadBoolData* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto indicator = function_data->indicator; + MonikerReadBoolData* function_data = static_cast(data); + auto library = function_data->library; + auto session = function_data->session; + auto indicator = function_data->indicator; - NiFpga_Bool value {}; - auto status = library->ReadBool(session, indicator, &value); - function_data->data.set_value(value); - if (status >= 0) { - packedData.PackFrom(function_data->data); - } + NiFpga_Bool value{}; + auto status = library->ReadBool(session, indicator, &value); + function_data->data.set_value(value); + if (status >= 0) { + packedData.PackFrom(function_data->data); + } - if (status < 0) { - std::cout << "MonikerReadBool error: " << status << std::endl; - } - return ::grpc::Status::OK; + if (status < 0) { + std::cout << "MonikerReadBool error: " << status << std::endl; + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadDbl(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadDblData* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto indicator = function_data->indicator; + MonikerReadDblData* function_data = static_cast(data); + auto library = function_data->library; + auto session = function_data->session; + auto indicator = function_data->indicator; - double value {}; - auto status = library->ReadDbl(session, indicator, &value); - function_data->data.set_value(value); - if (status >= 0) { - packedData.PackFrom(function_data->data); - } + double value{}; + auto status = library->ReadDbl(session, indicator, &value); + function_data->data.set_value(value); + if (status >= 0) { + packedData.PackFrom(function_data->data); + } - if (status < 0) { - std::cout << "MonikerReadDbl error: " << status << std::endl; - } - return ::grpc::Status::OK; + if (status < 0) { + std::cout << "MonikerReadDbl error: " << status << std::endl; + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadI16(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadI16Data* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto indicator = function_data->indicator; + MonikerReadI16Data* function_data = static_cast(data); + auto library = function_data->library; + auto session = function_data->session; + auto indicator = function_data->indicator; - int16_t value {}; - auto status = library->ReadI16(session, indicator, &value); - function_data->data.set_value(value); - if (status >= 0) { - packedData.PackFrom(function_data->data); - } + int16_t value{}; + auto status = library->ReadI16(session, indicator, &value); + function_data->data.set_value(value); + if (status >= 0) { + packedData.PackFrom(function_data->data); + } - if (status < 0) { - std::cout << "MonikerReadI16 error: " << status << std::endl; - } - return ::grpc::Status::OK; + if (status < 0) { + std::cout << "MonikerReadI16 error: " << status << std::endl; + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadI32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadI32Data* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto indicator = function_data->indicator; + MonikerReadI32Data* function_data = static_cast(data); + auto library = function_data->library; + auto session = function_data->session; + auto indicator = function_data->indicator; - int32_t value {}; - auto status = library->ReadI32(session, indicator, &value); - function_data->data.set_value(value); - if (status >= 0) { - packedData.PackFrom(function_data->data); - } + int32_t value{}; + auto status = library->ReadI32(session, indicator, &value); + function_data->data.set_value(value); + if (status >= 0) { + packedData.PackFrom(function_data->data); + } - if (status < 0) { - std::cout << "MonikerReadI32 error: " << status << std::endl; - } - return ::grpc::Status::OK; + if (status < 0) { + std::cout << "MonikerReadI32 error: " << status << std::endl; + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadI64(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadI64Data* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto indicator = function_data->indicator; + MonikerReadI64Data* function_data = static_cast(data); + auto library = function_data->library; + auto session = function_data->session; + auto indicator = function_data->indicator; - int64_t value {}; - auto status = library->ReadI64(session, indicator, &value); - function_data->data.set_value(value); - if (status >= 0) { - packedData.PackFrom(function_data->data); - } + int64_t value{}; + auto status = library->ReadI64(session, indicator, &value); + function_data->data.set_value(value); + if (status >= 0) { + packedData.PackFrom(function_data->data); + } - if (status < 0) { - std::cout << "MonikerReadI64 error: " << status << std::endl; - } - return ::grpc::Status::OK; + if (status < 0) { + std::cout << "MonikerReadI64 error: " << status << std::endl; + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadI8(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadI8Data* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto indicator = function_data->indicator; + MonikerReadI8Data* function_data = static_cast(data); + auto library = function_data->library; + auto session = function_data->session; + auto indicator = function_data->indicator; - int8_t value {}; - auto status = library->ReadI8(session, indicator, &value); - function_data->data.set_value(value); - if (status >= 0) { - packedData.PackFrom(function_data->data); - } + int8_t value{}; + auto status = library->ReadI8(session, indicator, &value); + function_data->data.set_value(value); + if (status >= 0) { + packedData.PackFrom(function_data->data); + } - if (status < 0) { - std::cout << "MonikerReadI8 error: " << status << std::endl; - } - return ::grpc::Status::OK; + if (status < 0) { + std::cout << "MonikerReadI8 error: " << status << std::endl; + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadSgl(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadSglData* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto indicator = function_data->indicator; + MonikerReadSglData* function_data = static_cast(data); + auto library = function_data->library; + auto session = function_data->session; + auto indicator = function_data->indicator; - float value {}; - auto status = library->ReadSgl(session, indicator, &value); - function_data->data.set_value(value); - if (status >= 0) { - packedData.PackFrom(function_data->data); - } + float value{}; + auto status = library->ReadSgl(session, indicator, &value); + function_data->data.set_value(value); + if (status >= 0) { + packedData.PackFrom(function_data->data); + } - if (status < 0) { - std::cout << "MonikerReadSgl error: " << status << std::endl; - } - return ::grpc::Status::OK; + if (status < 0) { + std::cout << "MonikerReadSgl error: " << status << std::endl; + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadU16(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadU16Data* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto indicator = function_data->indicator; + MonikerReadU16Data* function_data = static_cast(data); + auto library = function_data->library; + auto session = function_data->session; + auto indicator = function_data->indicator; - uint16_t value {}; - auto status = library->ReadU16(session, indicator, &value); - function_data->data.set_value(value); - if (status >= 0) { - packedData.PackFrom(function_data->data); - } + uint16_t value{}; + auto status = library->ReadU16(session, indicator, &value); + function_data->data.set_value(value); + if (status >= 0) { + packedData.PackFrom(function_data->data); + } - if (status < 0) { - std::cout << "MonikerReadU16 error: " << status << std::endl; - } - return ::grpc::Status::OK; + if (status < 0) { + std::cout << "MonikerReadU16 error: " << status << std::endl; + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadU32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadU32Data* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto indicator = function_data->indicator; + MonikerReadU32Data* function_data = static_cast(data); + auto library = function_data->library; + auto session = function_data->session; + auto indicator = function_data->indicator; - uint32_t value {}; - auto status = library->ReadU32(session, indicator, &value); - function_data->data.set_value(value); - if (status >= 0) { - packedData.PackFrom(function_data->data); - } + uint32_t value{}; + auto status = library->ReadU32(session, indicator, &value); + function_data->data.set_value(value); + if (status >= 0) { + packedData.PackFrom(function_data->data); + } - if (status < 0) { - std::cout << "MonikerReadU32 error: " << status << std::endl; - } - return ::grpc::Status::OK; + if (status < 0) { + std::cout << "MonikerReadU32 error: " << status << std::endl; + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadU64(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadU64Data* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto indicator = function_data->indicator; + MonikerReadU64Data* function_data = static_cast(data); + auto library = function_data->library; + auto session = function_data->session; + auto indicator = function_data->indicator; - uint64_t value {}; - auto status = library->ReadU64(session, indicator, &value); - function_data->data.set_value(value); - if (status >= 0) { - packedData.PackFrom(function_data->data); - } + uint64_t value{}; + auto status = library->ReadU64(session, indicator, &value); + function_data->data.set_value(value); + if (status >= 0) { + packedData.PackFrom(function_data->data); + } - if (status < 0) { - std::cout << "MonikerReadU64 error: " << status << std::endl; - } - return ::grpc::Status::OK; + if (status < 0) { + std::cout << "MonikerReadU64 error: " << status << std::endl; + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadU8(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadU8Data* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto indicator = function_data->indicator; + MonikerReadU8Data* function_data = static_cast(data); + auto library = function_data->library; + auto session = function_data->session; + auto indicator = function_data->indicator; - uint8_t value {}; - auto status = library->ReadU8(session, indicator, &value); - function_data->data.set_value(value); - if (status >= 0) { - packedData.PackFrom(function_data->data); - } + uint8_t value{}; + auto status = library->ReadU8(session, indicator, &value); + function_data->data.set_value(value); + if (status >= 0) { + packedData.PackFrom(function_data->data); + } - if (status < 0) { - std::cout << "MonikerReadU8 error: " << status << std::endl; - } - return ::grpc::Status::OK; + if (status < 0) { + std::cout << "MonikerReadU8 error: " << status << std::endl; + } + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteArrayBool(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteArrayBoolData* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto control = function_data->control; - - ArrayBoolData arraybooldata_message; - packedData.UnpackTo(&arraybooldata_message); - - auto data_array = arraybooldata_message.value(); - std::vector array(data_array.begin(), data_array.end()); - auto size = data_array.size(); - - auto status = library->WriteArrayBool(session, control, array.data(), size); - if (status < 0) { - std::cout << "MonikerWriteArrayBool error: " << status << std::endl; - } - return ::grpc::Status::OK; + MonikerWriteArrayBoolData* function_data = static_cast(data); + auto library = function_data->library; + auto session = function_data->session; + auto control = function_data->control; + + ArrayBoolData arraybooldata_message; + packedData.UnpackTo(&arraybooldata_message); + + auto data_array = arraybooldata_message.value(); + std::vector array(data_array.begin(), data_array.end()); + auto size = data_array.size(); + + auto status = library->WriteArrayBool(session, control, array.data(), size); + if (status < 0) { + std::cout << "MonikerWriteArrayBool error: " << status << std::endl; + } + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteArrayDbl(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteArrayDblData* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto control = function_data->control; - - ArrayDoubleData arraydoubledata_message; - packedData.UnpackTo(&arraydoubledata_message); - - auto data_array = arraydoubledata_message.value(); - auto array = const_cast(arraydoubledata_message.value().data()); - auto size = data_array.size(); - - auto status = library->WriteArrayDbl(session, control, array, size); - if (status < 0) { - std::cout << "MonikerWriteArrayDbl error: " << status << std::endl; - } - return ::grpc::Status::OK; + MonikerWriteArrayDblData* function_data = static_cast(data); + auto library = function_data->library; + auto session = function_data->session; + auto control = function_data->control; + + ArrayDoubleData arraydoubledata_message; + packedData.UnpackTo(&arraydoubledata_message); + + auto data_array = arraydoubledata_message.value(); + auto array = const_cast(arraydoubledata_message.value().data()); + auto size = data_array.size(); + + auto status = library->WriteArrayDbl(session, control, array, size); + if (status < 0) { + std::cout << "MonikerWriteArrayDbl error: " << status << std::endl; + } + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteArrayI16(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteArrayI16Data* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto control = function_data->control; - - ArrayI32Data arrayi32data_message; - packedData.UnpackTo(&arrayi32data_message); - - auto data_array = arrayi32data_message.value(); - auto array = std::vector(); - auto size = data_array.size(); - array.reserve(size); - std::transform( + MonikerWriteArrayI16Data* function_data = static_cast(data); + auto library = function_data->library; + auto session = function_data->session; + auto control = function_data->control; + + ArrayI32Data arrayi32data_message; + packedData.UnpackTo(&arrayi32data_message); + + auto data_array = arrayi32data_message.value(); + auto array = std::vector(); + auto size = data_array.size(); + array.reserve(size); + std::transform( data_array.begin(), data_array.end(), std::back_inserter(array), @@ -1002,70 +959,70 @@ ::grpc::Status MonikerWriteArrayI16(void* data, google::protobuf::Arena& arena, return static_cast(x); }); - auto status = library->WriteArrayI16(session, control, array.data(), size); - if (status < 0) { - std::cout << "MonikerWriteArrayI16 error: " << status << std::endl; - } - return ::grpc::Status::OK; + auto status = library->WriteArrayI16(session, control, array.data(), size); + if (status < 0) { + std::cout << "MonikerWriteArrayI16 error: " << status << std::endl; + } + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteArrayI32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteArrayI32Data* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto control = function_data->control; - - ArrayI32Data arrayi32data_message; - packedData.UnpackTo(&arrayi32data_message); - - auto data_array = arrayi32data_message.value(); - auto array = const_cast(arrayi32data_message.value().data()); - auto size = data_array.size(); - - auto status = library->WriteArrayI32(session, control, array, size); - if (status < 0) { - std::cout << "MonikerWriteArrayI32 error: " << status << std::endl; - } - return ::grpc::Status::OK; + MonikerWriteArrayI32Data* function_data = static_cast(data); + auto library = function_data->library; + auto session = function_data->session; + auto control = function_data->control; + + ArrayI32Data arrayi32data_message; + packedData.UnpackTo(&arrayi32data_message); + + auto data_array = arrayi32data_message.value(); + auto array = const_cast(arrayi32data_message.value().data()); + auto size = data_array.size(); + + auto status = library->WriteArrayI32(session, control, array, size); + if (status < 0) { + std::cout << "MonikerWriteArrayI32 error: " << status << std::endl; + } + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteArrayI64(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteArrayI64Data* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto control = function_data->control; - - ArrayI64Data arrayi64data_message; - packedData.UnpackTo(&arrayi64data_message); - - auto data_array = arrayi64data_message.value(); - auto array = const_cast(arrayi64data_message.value().data()); - auto size = data_array.size(); - - auto status = library->WriteArrayI64(session, control, array, size); - if (status < 0) { - std::cout << "MonikerWriteArrayI64 error: " << status << std::endl; - } - return ::grpc::Status::OK; + MonikerWriteArrayI64Data* function_data = static_cast(data); + auto library = function_data->library; + auto session = function_data->session; + auto control = function_data->control; + + ArrayI64Data arrayi64data_message; + packedData.UnpackTo(&arrayi64data_message); + + auto data_array = arrayi64data_message.value(); + auto array = const_cast(arrayi64data_message.value().data()); + auto size = data_array.size(); + + auto status = library->WriteArrayI64(session, control, array, size); + if (status < 0) { + std::cout << "MonikerWriteArrayI64 error: " << status << std::endl; + } + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteArrayI8(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteArrayI8Data* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto control = function_data->control; - - ArrayI32Data arrayi32data_message; - packedData.UnpackTo(&arrayi32data_message); - - auto data_array = arrayi32data_message.value(); - auto array = std::vector(); - auto size = data_array.size(); - array.reserve(size); - std::transform( + MonikerWriteArrayI8Data* function_data = static_cast(data); + auto library = function_data->library; + auto session = function_data->session; + auto control = function_data->control; + + ArrayI32Data arrayi32data_message; + packedData.UnpackTo(&arrayi32data_message); + + auto data_array = arrayi32data_message.value(); + auto array = std::vector(); + auto size = data_array.size(); + array.reserve(size); + std::transform( data_array.begin(), data_array.end(), std::back_inserter(array), @@ -1077,49 +1034,49 @@ ::grpc::Status MonikerWriteArrayI8(void* data, google::protobuf::Arena& arena, g return static_cast(x); }); - auto status = library->WriteArrayI8(session, control, array.data(), size); - if (status < 0) { - std::cout << "MonikerWriteArrayI8 error: " << status << std::endl; - } - return ::grpc::Status::OK; + auto status = library->WriteArrayI8(session, control, array.data(), size); + if (status < 0) { + std::cout << "MonikerWriteArrayI8 error: " << status << std::endl; + } + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteArraySgl(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteArraySglData* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto control = function_data->control; - - ArrayFloatData arrayfloatdata_message; - packedData.UnpackTo(&arrayfloatdata_message); - - auto data_array = arrayfloatdata_message.value(); - auto array = const_cast(arrayfloatdata_message.value().data()); - auto size = data_array.size(); - - auto status = library->WriteArraySgl(session, control, array, size); - if (status < 0) { - std::cout << "MonikerWriteArraySgl error: " << status << std::endl; - } - return ::grpc::Status::OK; + MonikerWriteArraySglData* function_data = static_cast(data); + auto library = function_data->library; + auto session = function_data->session; + auto control = function_data->control; + + ArrayFloatData arrayfloatdata_message; + packedData.UnpackTo(&arrayfloatdata_message); + + auto data_array = arrayfloatdata_message.value(); + auto array = const_cast(arrayfloatdata_message.value().data()); + auto size = data_array.size(); + + auto status = library->WriteArraySgl(session, control, array, size); + if (status < 0) { + std::cout << "MonikerWriteArraySgl error: " << status << std::endl; + } + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteArrayU16(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteArrayU16Data* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto control = function_data->control; - - ArrayU32Data arrayu32data_message; - packedData.UnpackTo(&arrayu32data_message); - - auto data_array = arrayu32data_message.value(); - auto array = std::vector(); - auto size = data_array.size(); - array.reserve(size); - std::transform( + MonikerWriteArrayU16Data* function_data = static_cast(data); + auto library = function_data->library; + auto session = function_data->session; + auto control = function_data->control; + + ArrayU32Data arrayu32data_message; + packedData.UnpackTo(&arrayu32data_message); + + auto data_array = arrayu32data_message.value(); + auto array = std::vector(); + auto size = data_array.size(); + array.reserve(size); + std::transform( data_array.begin(), data_array.end(), std::back_inserter(array), @@ -1131,70 +1088,70 @@ ::grpc::Status MonikerWriteArrayU16(void* data, google::protobuf::Arena& arena, return static_cast(x); }); - auto status = library->WriteArrayU16(session, control, array.data(), size); - if (status < 0) { - std::cout << "MonikerWriteArrayU16 error: " << status << std::endl; - } - return ::grpc::Status::OK; + auto status = library->WriteArrayU16(session, control, array.data(), size); + if (status < 0) { + std::cout << "MonikerWriteArrayU16 error: " << status << std::endl; + } + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteArrayU32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteArrayU32Data* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto control = function_data->control; - - ArrayU32Data arrayu32data_message; - packedData.UnpackTo(&arrayu32data_message); - - auto data_array = arrayu32data_message.value(); - auto array = const_cast(arrayu32data_message.value().data()); - auto size = data_array.size(); - - auto status = library->WriteArrayU32(session, control, array, size); - if (status < 0) { - std::cout << "MonikerWriteArrayU32 error: " << status << std::endl; - } - return ::grpc::Status::OK; + MonikerWriteArrayU32Data* function_data = static_cast(data); + auto library = function_data->library; + auto session = function_data->session; + auto control = function_data->control; + + ArrayU32Data arrayu32data_message; + packedData.UnpackTo(&arrayu32data_message); + + auto data_array = arrayu32data_message.value(); + auto array = const_cast(arrayu32data_message.value().data()); + auto size = data_array.size(); + + auto status = library->WriteArrayU32(session, control, array, size); + if (status < 0) { + std::cout << "MonikerWriteArrayU32 error: " << status << std::endl; + } + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteArrayU64(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteArrayU64Data* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto control = function_data->control; - - ArrayU64Data arrayu64data_message; - packedData.UnpackTo(&arrayu64data_message); - - auto data_array = arrayu64data_message.value(); - auto array = const_cast(arrayu64data_message.value().data()); - auto size = data_array.size(); - - auto status = library->WriteArrayU64(session, control, array, size); - if (status < 0) { - std::cout << "MonikerWriteArrayU64 error: " << status << std::endl; - } - return ::grpc::Status::OK; + MonikerWriteArrayU64Data* function_data = static_cast(data); + auto library = function_data->library; + auto session = function_data->session; + auto control = function_data->control; + + ArrayU64Data arrayu64data_message; + packedData.UnpackTo(&arrayu64data_message); + + auto data_array = arrayu64data_message.value(); + auto array = const_cast(arrayu64data_message.value().data()); + auto size = data_array.size(); + + auto status = library->WriteArrayU64(session, control, array, size); + if (status < 0) { + std::cout << "MonikerWriteArrayU64 error: " << status << std::endl; + } + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteArrayU8(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteArrayU8Data* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto control = function_data->control; - - ArrayU32Data arrayu32data_message; - packedData.UnpackTo(&arrayu32data_message); - - auto data_array = arrayu32data_message.value(); - auto array = std::vector(); - auto size = data_array.size(); - array.reserve(size); - std::transform( + MonikerWriteArrayU8Data* function_data = static_cast(data); + auto library = function_data->library; + auto session = function_data->session; + auto control = function_data->control; + + ArrayU32Data arrayu32data_message; + packedData.UnpackTo(&arrayu32data_message); + + auto data_array = arrayu32data_message.value(); + auto array = std::vector(); + auto size = data_array.size(); + array.reserve(size); + std::transform( data_array.begin(), data_array.end(), std::back_inserter(array), @@ -1206,4319 +1163,4317 @@ ::grpc::Status MonikerWriteArrayU8(void* data, google::protobuf::Arena& arena, g return static_cast(x); }); - auto status = library->WriteArrayU8(session, control, array.data(), size); - if (status < 0) { - std::cout << "MonikerWriteArrayU8 error: " << status << std::endl; - } - return ::grpc::Status::OK; + auto status = library->WriteArrayU8(session, control, array.data(), size); + if (status < 0) { + std::cout << "MonikerWriteArrayU8 error: " << status << std::endl; + } + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteBool(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteBoolData* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto control = function_data->control; + MonikerWriteBoolData* function_data = static_cast(data); + auto library = function_data->library; + auto session = function_data->session; + auto control = function_data->control; - BoolData booldata_message; - packedData.UnpackTo(&booldata_message); - auto value = booldata_message.value(); + BoolData booldata_message; + packedData.UnpackTo(&booldata_message); + auto value = booldata_message.value(); - auto status = library->WriteBool(session, control, value); - if (status < 0) { - std::cout << "MonikerWriteBool error: " << status << std::endl; - } - return ::grpc::Status::OK; + auto status = library->WriteBool(session, control, value); + if (status < 0) { + std::cout << "MonikerWriteBool error: " << status << std::endl; + } + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteDbl(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteDblData* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto control = function_data->control; + MonikerWriteDblData* function_data = static_cast(data); + auto library = function_data->library; + auto session = function_data->session; + auto control = function_data->control; - DoubleData doubledata_message; - packedData.UnpackTo(&doubledata_message); - auto value = doubledata_message.value(); + DoubleData doubledata_message; + packedData.UnpackTo(&doubledata_message); + auto value = doubledata_message.value(); - auto status = library->WriteDbl(session, control, value); - if (status < 0) { - std::cout << "MonikerWriteDbl error: " << status << std::endl; - } - return ::grpc::Status::OK; + auto status = library->WriteDbl(session, control, value); + if (status < 0) { + std::cout << "MonikerWriteDbl error: " << status << std::endl; + } + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteI16(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteI16Data* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto control = function_data->control; + MonikerWriteI16Data* function_data = static_cast(data); + auto library = function_data->library; + auto session = function_data->session; + auto control = function_data->control; - I32Data i32data_message; - packedData.UnpackTo(&i32data_message); - auto value = i32data_message.value(); - if (value < std::numeric_limits::min() || value > std::numeric_limits::max()) { - std::string message("value " + std::to_string(value) + " doesn't fit in datatype int16_t"); - throw nidevice_grpc::ValueOutOfRangeException(message); - } + I32Data i32data_message; + packedData.UnpackTo(&i32data_message); + auto value = i32data_message.value(); + if (value < std::numeric_limits::min() || value > std::numeric_limits::max()) { + std::string message("value " + std::to_string(value) + " doesn't fit in datatype int16_t"); + throw nidevice_grpc::ValueOutOfRangeException(message); + } - auto status = library->WriteI16(session, control, value); - if (status < 0) { - std::cout << "MonikerWriteI16 error: " << status << std::endl; - } - return ::grpc::Status::OK; + auto status = library->WriteI16(session, control, value); + if (status < 0) { + std::cout << "MonikerWriteI16 error: " << status << std::endl; + } + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteI32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteI32Data* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto control = function_data->control; + MonikerWriteI32Data* function_data = static_cast(data); + auto library = function_data->library; + auto session = function_data->session; + auto control = function_data->control; - I32Data i32data_message; - packedData.UnpackTo(&i32data_message); - auto value = i32data_message.value(); + I32Data i32data_message; + packedData.UnpackTo(&i32data_message); + auto value = i32data_message.value(); - auto status = library->WriteI32(session, control, value); - if (status < 0) { - std::cout << "MonikerWriteI32 error: " << status << std::endl; - } - return ::grpc::Status::OK; + auto status = library->WriteI32(session, control, value); + if (status < 0) { + std::cout << "MonikerWriteI32 error: " << status << std::endl; + } + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteI64(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteI64Data* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto control = function_data->control; + MonikerWriteI64Data* function_data = static_cast(data); + auto library = function_data->library; + auto session = function_data->session; + auto control = function_data->control; - I64Data i64data_message; - packedData.UnpackTo(&i64data_message); - auto value = i64data_message.value(); + I64Data i64data_message; + packedData.UnpackTo(&i64data_message); + auto value = i64data_message.value(); - auto status = library->WriteI64(session, control, value); - if (status < 0) { - std::cout << "MonikerWriteI64 error: " << status << std::endl; - } - return ::grpc::Status::OK; + auto status = library->WriteI64(session, control, value); + if (status < 0) { + std::cout << "MonikerWriteI64 error: " << status << std::endl; + } + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteI8(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteI8Data* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto control = function_data->control; + MonikerWriteI8Data* function_data = static_cast(data); + auto library = function_data->library; + auto session = function_data->session; + auto control = function_data->control; - I32Data i32data_message; - packedData.UnpackTo(&i32data_message); - auto value = i32data_message.value(); - if (value < std::numeric_limits::min() || value > std::numeric_limits::max()) { - std::string message("value " + std::to_string(value) + " doesn't fit in datatype int8_t"); - throw nidevice_grpc::ValueOutOfRangeException(message); - } + I32Data i32data_message; + packedData.UnpackTo(&i32data_message); + auto value = i32data_message.value(); + if (value < std::numeric_limits::min() || value > std::numeric_limits::max()) { + std::string message("value " + std::to_string(value) + " doesn't fit in datatype int8_t"); + throw nidevice_grpc::ValueOutOfRangeException(message); + } - auto status = library->WriteI8(session, control, value); - if (status < 0) { - std::cout << "MonikerWriteI8 error: " << status << std::endl; - } - return ::grpc::Status::OK; + auto status = library->WriteI8(session, control, value); + if (status < 0) { + std::cout << "MonikerWriteI8 error: " << status << std::endl; + } + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteSgl(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteSglData* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto control = function_data->control; + MonikerWriteSglData* function_data = static_cast(data); + auto library = function_data->library; + auto session = function_data->session; + auto control = function_data->control; - FloatData floatdata_message; - packedData.UnpackTo(&floatdata_message); - auto value = floatdata_message.value(); + FloatData floatdata_message; + packedData.UnpackTo(&floatdata_message); + auto value = floatdata_message.value(); - auto status = library->WriteSgl(session, control, value); - if (status < 0) { - std::cout << "MonikerWriteSgl error: " << status << std::endl; - } - return ::grpc::Status::OK; + auto status = library->WriteSgl(session, control, value); + if (status < 0) { + std::cout << "MonikerWriteSgl error: " << status << std::endl; + } + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteU16(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteU16Data* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto control = function_data->control; + MonikerWriteU16Data* function_data = static_cast(data); + auto library = function_data->library; + auto session = function_data->session; + auto control = function_data->control; - U32Data u32data_message; - packedData.UnpackTo(&u32data_message); - auto value = u32data_message.value(); - if (value < std::numeric_limits::min() || value > std::numeric_limits::max()) { - std::string message("value " + std::to_string(value) + " doesn't fit in datatype uint16_t"); - throw nidevice_grpc::ValueOutOfRangeException(message); - } + U32Data u32data_message; + packedData.UnpackTo(&u32data_message); + auto value = u32data_message.value(); + if (value < std::numeric_limits::min() || value > std::numeric_limits::max()) { + std::string message("value " + std::to_string(value) + " doesn't fit in datatype uint16_t"); + throw nidevice_grpc::ValueOutOfRangeException(message); + } - auto status = library->WriteU16(session, control, value); - if (status < 0) { - std::cout << "MonikerWriteU16 error: " << status << std::endl; - } - return ::grpc::Status::OK; + auto status = library->WriteU16(session, control, value); + if (status < 0) { + std::cout << "MonikerWriteU16 error: " << status << std::endl; + } + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteU32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteU32Data* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto control = function_data->control; + MonikerWriteU32Data* function_data = static_cast(data); + auto library = function_data->library; + auto session = function_data->session; + auto control = function_data->control; - U32Data u32data_message; - packedData.UnpackTo(&u32data_message); - auto value = u32data_message.value(); + U32Data u32data_message; + packedData.UnpackTo(&u32data_message); + auto value = u32data_message.value(); - auto status = library->WriteU32(session, control, value); - if (status < 0) { - std::cout << "MonikerWriteU32 error: " << status << std::endl; - } - return ::grpc::Status::OK; + auto status = library->WriteU32(session, control, value); + if (status < 0) { + std::cout << "MonikerWriteU32 error: " << status << std::endl; + } + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteU64(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteU64Data* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto control = function_data->control; + MonikerWriteU64Data* function_data = static_cast(data); + auto library = function_data->library; + auto session = function_data->session; + auto control = function_data->control; - U64Data u64data_message; - packedData.UnpackTo(&u64data_message); - auto value = u64data_message.value(); + U64Data u64data_message; + packedData.UnpackTo(&u64data_message); + auto value = u64data_message.value(); - auto status = library->WriteU64(session, control, value); - if (status < 0) { - std::cout << "MonikerWriteU64 error: " << status << std::endl; - } - return ::grpc::Status::OK; + auto status = library->WriteU64(session, control, value); + if (status < 0) { + std::cout << "MonikerWriteU64 error: " << status << std::endl; + } + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteU8Data* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto control = function_data->control; + MonikerWriteU8Data* function_data = static_cast(data); + auto library = function_data->library; + auto session = function_data->session; + auto control = function_data->control; - U32Data u32data_message; - packedData.UnpackTo(&u32data_message); - auto value = u32data_message.value(); - if (value < std::numeric_limits::min() || value > std::numeric_limits::max()) { - std::string message("value " + std::to_string(value) + " doesn't fit in datatype uint8_t"); - throw nidevice_grpc::ValueOutOfRangeException(message); - } + U32Data u32data_message; + packedData.UnpackTo(&u32data_message); + auto value = u32data_message.value(); + if (value < std::numeric_limits::min() || value > std::numeric_limits::max()) { + std::string message("value " + std::to_string(value) + " doesn't fit in datatype uint8_t"); + throw nidevice_grpc::ValueOutOfRangeException(message); + } - auto status = library->WriteU8(session, control, value); - if (status < 0) { - std::cout << "MonikerWriteU8 error: " << status << std::endl; - } - return ::grpc::Status::OK; + auto status = library->WriteU8(session, control, value); + if (status < 0) { + std::cout << "MonikerWriteU8 error: " << status << std::endl; + } + return ::grpc::Status::OK; } - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::Abort(::grpc::ServerContext* context, const AbortRequest* request, AbortResponse* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - auto status = library_->Abort(session); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::Abort(::grpc::ServerContext* context, const AbortRequest* request, AbortResponse* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + auto status = library_->Abort(session); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::AcknowledgeIrqs(::grpc::ServerContext* context, const AcknowledgeIrqsRequest* request, AcknowledgeIrqsResponse* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t irqs = request->irqs(); - auto status = library_->AcknowledgeIrqs(session, irqs); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::AcknowledgeIrqs(::grpc::ServerContext* context, const AcknowledgeIrqsRequest* request, AcknowledgeIrqsResponse* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t irqs = request->irqs(); + auto status = library_->AcknowledgeIrqs(session, irqs); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::Close(::grpc::ServerContext* context, const CloseRequest* request, CloseResponse* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t attribute; - switch (request->attribute_enum_case()) { - case nifpga_grpc::CloseRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - break; - } - case nifpga_grpc::CloseRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - break; - } - case nifpga_grpc::CloseRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::Close(::grpc::ServerContext* context, const CloseRequest* request, CloseResponse* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t attribute; + switch (request->attribute_enum_case()) { + case nifpga_grpc::CloseRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + break; } - - session_repository_->remove_session(session_grpc_session.name()); - auto status = library_->Close(session, attribute); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + case nifpga_grpc::CloseRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + break; + } + case nifpga_grpc::CloseRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + + session_repository_->remove_session(session_grpc_session.name()); + auto status = library_->Close(session, attribute); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::CommitFifoConfiguration(::grpc::ServerContext* context, const CommitFifoConfigurationRequest* request, CommitFifoConfigurationResponse* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - auto status = library_->CommitFifoConfiguration(session, fifo); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::CommitFifoConfiguration(::grpc::ServerContext* context, const CommitFifoConfigurationRequest* request, CommitFifoConfigurationResponse* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + auto status = library_->CommitFifoConfiguration(session, fifo); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::ConfigureFifo(::grpc::ServerContext* context, const ConfigureFifoRequest* request, ConfigureFifoResponse* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - size_t depth = request->depth(); - auto status = library_->ConfigureFifo(session, fifo, depth); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::ConfigureFifo(::grpc::ServerContext* context, const ConfigureFifoRequest* request, ConfigureFifoResponse* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + size_t depth = request->depth(); + auto status = library_->ConfigureFifo(session, fifo, depth); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::ConfigureFifo2(::grpc::ServerContext* context, const ConfigureFifo2Request* request, ConfigureFifo2Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - size_t requested_depth = request->requested_depth(); - size_t actual_depth {}; - auto status = library_->ConfigureFifo2(session, fifo, requested_depth, &actual_depth); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_actual_depth(actual_depth); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::ConfigureFifo2(::grpc::ServerContext* context, const ConfigureFifo2Request* request, ConfigureFifo2Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + size_t requested_depth = request->requested_depth(); + size_t actual_depth{}; + auto status = library_->ConfigureFifo2(session, fifo, requested_depth, &actual_depth); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_actual_depth(actual_depth); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::Download(::grpc::ServerContext* context, const DownloadRequest* request, DownloadResponse* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - auto status = library_->Download(session); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::Download(::grpc::ServerContext* context, const DownloadRequest* request, DownloadResponse* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + auto status = library_->Download(session); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::FindFifo(::grpc::ServerContext* context, const FindFifoRequest* request, FindFifoResponse* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - auto fifo_name_mbcs = convert_from_grpc(request->fifo_name()); - char* fifo_name = (char*)fifo_name_mbcs.c_str(); - uint32_t fifo_number {}; - auto status = library_->FindFifo(session, fifo_name, &fifo_number); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_fifo_number(fifo_number); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::FindFifo(::grpc::ServerContext* context, const FindFifoRequest* request, FindFifoResponse* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + auto fifo_name_mbcs = convert_from_grpc(request->fifo_name()); + char* fifo_name = (char*)fifo_name_mbcs.c_str(); + uint32_t fifo_number{}; + auto status = library_->FindFifo(session, fifo_name, &fifo_number); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_fifo_number(fifo_number); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::FindRegister(::grpc::ServerContext* context, const FindRegisterRequest* request, FindRegisterResponse* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - auto register_name_mbcs = convert_from_grpc(request->register_name()); - char* register_name = (char*)register_name_mbcs.c_str(); - uint32_t register_offset {}; - auto status = library_->FindRegister(session, register_name, ®ister_offset); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_register_offset(register_offset); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::FindRegister(::grpc::ServerContext* context, const FindRegisterRequest* request, FindRegisterResponse* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + auto register_name_mbcs = convert_from_grpc(request->register_name()); + char* register_name = (char*)register_name_mbcs.c_str(); + uint32_t register_offset{}; + auto status = library_->FindRegister(session, register_name, ®ister_offset); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_register_offset(register_offset); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::GetBitfileSignature(::grpc::ServerContext* context, const GetBitfileSignatureRequest* request, GetBitfileSignatureResponse* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t signature {}; - size_t signature_size {}; - auto status = library_->GetBitfileSignature(session, &signature, &signature_size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_signature(signature); - response->set_signature_size(signature_size); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::GetBitfileSignature(::grpc::ServerContext* context, const GetBitfileSignatureRequest* request, GetBitfileSignatureResponse* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t signature{}; + size_t signature_size{}; + auto status = library_->GetBitfileSignature(session, &signature, &signature_size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_signature(signature); + response->set_signature_size(signature_size); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::GetFifoPropertyI32(::grpc::ServerContext* context, const GetFifoPropertyI32Request* request, GetFifoPropertyI32Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - NiFpga_FifoProperty property; - switch (request->property_enum_case()) { - case nifpga_grpc::GetFifoPropertyI32Request::PropertyEnumCase::kProperty: { - property = static_cast(request->property()); - break; - } - case nifpga_grpc::GetFifoPropertyI32Request::PropertyEnumCase::kPropertyRaw: { - property = static_cast(request->property_raw()); - break; - } - case nifpga_grpc::GetFifoPropertyI32Request::PropertyEnumCase::PROPERTY_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for property was not specified or out of range"); - break; - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::GetFifoPropertyI32(::grpc::ServerContext* context, const GetFifoPropertyI32Request* request, GetFifoPropertyI32Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + NiFpga_FifoProperty property; + switch (request->property_enum_case()) { + case nifpga_grpc::GetFifoPropertyI32Request::PropertyEnumCase::kProperty: { + property = static_cast(request->property()); + break; } - - int32_t value {}; - auto status = library_->GetFifoPropertyI32(session, fifo, property, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + case nifpga_grpc::GetFifoPropertyI32Request::PropertyEnumCase::kPropertyRaw: { + property = static_cast(request->property_raw()); + break; + } + case nifpga_grpc::GetFifoPropertyI32Request::PropertyEnumCase::PROPERTY_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for property was not specified or out of range"); + break; } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + + int32_t value{}; + auto status = library_->GetFifoPropertyI32(session, fifo, property, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::GetFifoPropertyI64(::grpc::ServerContext* context, const GetFifoPropertyI64Request* request, GetFifoPropertyI64Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - NiFpga_FifoProperty property; - switch (request->property_enum_case()) { - case nifpga_grpc::GetFifoPropertyI64Request::PropertyEnumCase::kProperty: { - property = static_cast(request->property()); - break; - } - case nifpga_grpc::GetFifoPropertyI64Request::PropertyEnumCase::kPropertyRaw: { - property = static_cast(request->property_raw()); - break; - } - case nifpga_grpc::GetFifoPropertyI64Request::PropertyEnumCase::PROPERTY_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for property was not specified or out of range"); - break; - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::GetFifoPropertyI64(::grpc::ServerContext* context, const GetFifoPropertyI64Request* request, GetFifoPropertyI64Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + NiFpga_FifoProperty property; + switch (request->property_enum_case()) { + case nifpga_grpc::GetFifoPropertyI64Request::PropertyEnumCase::kProperty: { + property = static_cast(request->property()); + break; } - - int64_t value {}; - auto status = library_->GetFifoPropertyI64(session, fifo, property, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + case nifpga_grpc::GetFifoPropertyI64Request::PropertyEnumCase::kPropertyRaw: { + property = static_cast(request->property_raw()); + break; + } + case nifpga_grpc::GetFifoPropertyI64Request::PropertyEnumCase::PROPERTY_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for property was not specified or out of range"); + break; } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + + int64_t value{}; + auto status = library_->GetFifoPropertyI64(session, fifo, property, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::GetFifoPropertyU32(::grpc::ServerContext* context, const GetFifoPropertyU32Request* request, GetFifoPropertyU32Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - NiFpga_FifoProperty property; - switch (request->property_enum_case()) { - case nifpga_grpc::GetFifoPropertyU32Request::PropertyEnumCase::kProperty: { - property = static_cast(request->property()); - break; - } - case nifpga_grpc::GetFifoPropertyU32Request::PropertyEnumCase::kPropertyRaw: { - property = static_cast(request->property_raw()); - break; - } - case nifpga_grpc::GetFifoPropertyU32Request::PropertyEnumCase::PROPERTY_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for property was not specified or out of range"); - break; - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::GetFifoPropertyU32(::grpc::ServerContext* context, const GetFifoPropertyU32Request* request, GetFifoPropertyU32Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + NiFpga_FifoProperty property; + switch (request->property_enum_case()) { + case nifpga_grpc::GetFifoPropertyU32Request::PropertyEnumCase::kProperty: { + property = static_cast(request->property()); + break; } - - uint32_t value {}; - auto status = library_->GetFifoPropertyU32(session, fifo, property, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + case nifpga_grpc::GetFifoPropertyU32Request::PropertyEnumCase::kPropertyRaw: { + property = static_cast(request->property_raw()); + break; + } + case nifpga_grpc::GetFifoPropertyU32Request::PropertyEnumCase::PROPERTY_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for property was not specified or out of range"); + break; } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + + uint32_t value{}; + auto status = library_->GetFifoPropertyU32(session, fifo, property, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::GetFifoPropertyU64(::grpc::ServerContext* context, const GetFifoPropertyU64Request* request, GetFifoPropertyU64Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - NiFpga_FifoProperty property; - switch (request->property_enum_case()) { - case nifpga_grpc::GetFifoPropertyU64Request::PropertyEnumCase::kProperty: { - property = static_cast(request->property()); - break; - } - case nifpga_grpc::GetFifoPropertyU64Request::PropertyEnumCase::kPropertyRaw: { - property = static_cast(request->property_raw()); - break; - } - case nifpga_grpc::GetFifoPropertyU64Request::PropertyEnumCase::PROPERTY_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for property was not specified or out of range"); - break; - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::GetFifoPropertyU64(::grpc::ServerContext* context, const GetFifoPropertyU64Request* request, GetFifoPropertyU64Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + NiFpga_FifoProperty property; + switch (request->property_enum_case()) { + case nifpga_grpc::GetFifoPropertyU64Request::PropertyEnumCase::kProperty: { + property = static_cast(request->property()); + break; } - - uint64_t value {}; - auto status = library_->GetFifoPropertyU64(session, fifo, property, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + case nifpga_grpc::GetFifoPropertyU64Request::PropertyEnumCase::kPropertyRaw: { + property = static_cast(request->property_raw()); + break; + } + case nifpga_grpc::GetFifoPropertyU64Request::PropertyEnumCase::PROPERTY_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for property was not specified or out of range"); + break; } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + + uint64_t value{}; + auto status = library_->GetFifoPropertyU64(session, fifo, property, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::GetFpgaViState(::grpc::ServerContext* context, const GetFpgaViStateRequest* request, GetFpgaViStateResponse* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t state {}; - auto status = library_->GetFpgaViState(session, &state); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_state(static_cast(state)); - response->set_state_raw(state); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::GetFpgaViState(::grpc::ServerContext* context, const GetFpgaViStateRequest* request, GetFpgaViStateResponse* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t state{}; + auto status = library_->GetFpgaViState(session, &state); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_state(static_cast(state)); + response->set_state_raw(state); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::Open(::grpc::ServerContext* context, const OpenRequest* request, OpenResponse* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto bitfile_mbcs = convert_from_grpc(request->bitfile()); - char* bitfile = (char*)bitfile_mbcs.c_str(); - auto signature_mbcs = convert_from_grpc(request->signature()); - char* signature = (char*)signature_mbcs.c_str(); - auto resource_mbcs = convert_from_grpc(request->resource()); - char* resource = (char*)resource_mbcs.c_str(); - uint32_t attribute; - switch (request->attribute_enum_case()) { - case nifpga_grpc::OpenRequest::AttributeEnumCase::kAttributeMapped: { - auto attribute_imap_it = openattribute_input_map_.find(request->attribute_mapped()); - if (attribute_imap_it == openattribute_input_map_.end()) { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute_mapped was not specified or out of range."); - } - attribute = static_cast(attribute_imap_it->second); - break; - } - case nifpga_grpc::OpenRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - break; - } - case nifpga_grpc::OpenRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::Open(::grpc::ServerContext* context, const OpenRequest* request, OpenResponse* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto bitfile_mbcs = convert_from_grpc(request->bitfile()); + char* bitfile = (char*)bitfile_mbcs.c_str(); + auto signature_mbcs = convert_from_grpc(request->signature()); + char* signature = (char*)signature_mbcs.c_str(); + auto resource_mbcs = convert_from_grpc(request->resource()); + char* resource = (char*)resource_mbcs.c_str(); + uint32_t attribute; + switch (request->attribute_enum_case()) { + case nifpga_grpc::OpenRequest::AttributeEnumCase::kAttributeMapped: { + auto attribute_imap_it = openattribute_input_map_.find(request->attribute_mapped()); + if (attribute_imap_it == openattribute_input_map_.end()) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute_mapped was not specified or out of range."); } + attribute = static_cast(attribute_imap_it->second); + break; } - - auto initialization_behavior = request->initialization_behavior(); - - bool new_session_initialized {}; - auto init_lambda = [&] () { - NiFpga_Session session; - auto status = library_->Open(bitfile, signature, resource, attribute, &session); - return std::make_tuple(status, session); - }; - std::string grpc_device_session_name = request->session_name(); - // Capture the library shared_ptr by value. Do not capture `this` or any references. - LibrarySharedPtr library = library_; - auto cleanup_lambda = [library] (NiFpga_Session id) { library->Close(id, 0); }; - int status = session_repository_->add_session(grpc_device_session_name, init_lambda, cleanup_lambda, initialization_behavior, &new_session_initialized); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, 0); + case nifpga_grpc::OpenRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + break; } - response->set_status(status); - response->mutable_session()->set_name(grpc_device_session_name); - response->set_new_session_initialized(new_session_initialized); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } - } - - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::ReadArrayBool(::grpc::ServerContext* context, const ReadArrayBoolRequest* request, ReadArrayBoolResponse* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - size_t size = request->size(); - std::vector array(size, NiFpga_Bool()); - auto status = library_->ReadArrayBool(session, indicator, array.data(), size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + case nifpga_grpc::OpenRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; } - response->set_status(status); - convert_to_grpc(array, response->mutable_array()); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } - } - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::BeginReadArrayBool(::grpc::ServerContext* context, const BeginReadArrayBoolRequest* request, BeginReadArrayBoolResponse* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - size_t size = request->size(); - - auto data = std::make_unique(); - data->session = session; - data->indicator = indicator; - data->size = size; - data->library = std::shared_ptr(library_); - - data->data.mutable_value()->Reserve(request->size()); - data->data.mutable_value()->Resize(request->size(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayBool", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } + auto initialization_behavior = request->initialization_behavior(); + + bool new_session_initialized{}; + auto init_lambda = [&]() { + NiFpga_Session session; + auto status = library_->Open(bitfile, signature, resource, attribute, &session); + return std::make_tuple(status, session); + }; + std::string grpc_device_session_name = request->session_name(); + // Capture the library shared_ptr by value. Do not capture `this` or any references. + LibrarySharedPtr library = library_; + auto cleanup_lambda = [library](NiFpga_Session id) { library->Close(id, 0); }; + int status = session_repository_->add_session(grpc_device_session_name, init_lambda, cleanup_lambda, initialization_behavior, &new_session_initialized); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, 0); + } + response->set_status(status); + response->mutable_session()->set_name(grpc_device_session_name); + response->set_new_session_initialized(new_session_initialized); + return ::grpc::Status::OK; } - - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::ReadArrayDbl(::grpc::ServerContext* context, const ReadArrayDblRequest* request, ReadArrayDblResponse* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - size_t size = request->size(); - response->mutable_array()->Resize(size, 0); - double* array = response->mutable_array()->mutable_data(); - auto status = library_->ReadArrayDbl(session, indicator, array, size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::BeginReadArrayDbl(::grpc::ServerContext* context, const BeginReadArrayDblRequest* request, BeginReadArrayDblResponse* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - size_t size = request->size(); - - auto data = std::make_unique(); - data->session = session; - data->indicator = indicator; - data->size = size; - data->library = std::shared_ptr(library_); - - data->data.mutable_value()->Reserve(request->size()); - data->data.mutable_value()->Resize(request->size(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayDbl", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::ReadArrayBool(::grpc::ServerContext* context, const ReadArrayBoolRequest* request, ReadArrayBoolResponse* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + size_t size = request->size(); + std::vector array(size, NiFpga_Bool()); + auto status = library_->ReadArrayBool(session, indicator, array.data(), size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); } + response->set_status(status); + convert_to_grpc(array, response->mutable_array()); + return ::grpc::Status::OK; } - - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::ReadArrayI16(::grpc::ServerContext* context, const ReadArrayI16Request* request, ReadArrayI16Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - size_t size = request->size(); - std::vector array(size); - auto status = library_->ReadArrayI16(session, indicator, array.data(), size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->mutable_array()->Clear(); - response->mutable_array()->Reserve(size); - std::transform( - array.begin(), - array.begin() + size, - google::protobuf::RepeatedFieldBackInserter(response->mutable_array()), - [&](auto x) { - return x; - }); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::BeginReadArrayI16(::grpc::ServerContext* context, const BeginReadArrayI16Request* request, BeginReadArrayI16Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - size_t size = request->size(); - - auto data = std::make_unique(); - data->session = session; - data->indicator = indicator; - data->size = size; - data->library = std::shared_ptr(library_); - - data->data.mutable_value()->Reserve(request->size()); - data->data.mutable_value()->Resize(request->size(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayI16", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::BeginReadArrayBool(::grpc::ServerContext* context, const BeginReadArrayBoolRequest* request, BeginReadArrayBoolResponse* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + size_t size = request->size(); + + auto data = std::make_unique(); + data->session = session; + data->indicator = indicator; + data->size = size; + data->library = std::shared_ptr(library_); + + data->data.mutable_value()->Reserve(request->size()); + data->data.mutable_value()->Resize(request->size(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayBool", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; } - - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::ReadArrayI32(::grpc::ServerContext* context, const ReadArrayI32Request* request, ReadArrayI32Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - size_t size = request->size(); - response->mutable_array()->Resize(size, 0); - int32_t* array = response->mutable_array()->mutable_data(); - auto status = library_->ReadArrayI32(session, indicator, array, size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::BeginReadArrayI32(::grpc::ServerContext* context, const BeginReadArrayI32Request* request, BeginReadArrayI32Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - size_t size = request->size(); - - auto data = std::make_unique(); - data->session = session; - data->indicator = indicator; - data->size = size; - data->library = std::shared_ptr(library_); - - data->data.mutable_value()->Reserve(request->size()); - data->data.mutable_value()->Resize(request->size(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayI32", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::ReadArrayDbl(::grpc::ServerContext* context, const ReadArrayDblRequest* request, ReadArrayDblResponse* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + size_t size = request->size(); + response->mutable_array()->Resize(size, 0); + double* array = response->mutable_array()->mutable_data(); + auto status = library_->ReadArrayDbl(session, indicator, array, size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; } - - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::ReadArrayI64(::grpc::ServerContext* context, const ReadArrayI64Request* request, ReadArrayI64Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - size_t size = request->size(); - response->mutable_array()->Resize(size, 0); - int64_t* array = response->mutable_array()->mutable_data(); - auto status = library_->ReadArrayI64(session, indicator, array, size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::BeginReadArrayI64(::grpc::ServerContext* context, const BeginReadArrayI64Request* request, BeginReadArrayI64Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - size_t size = request->size(); - - auto data = std::make_unique(); - data->session = session; - data->indicator = indicator; - data->size = size; - data->library = std::shared_ptr(library_); - - data->data.mutable_value()->Reserve(request->size()); - data->data.mutable_value()->Resize(request->size(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayI64", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::BeginReadArrayDbl(::grpc::ServerContext* context, const BeginReadArrayDblRequest* request, BeginReadArrayDblResponse* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + size_t size = request->size(); + + auto data = std::make_unique(); + data->session = session; + data->indicator = indicator; + data->size = size; + data->library = std::shared_ptr(library_); + + data->data.mutable_value()->Reserve(request->size()); + data->data.mutable_value()->Resize(request->size(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayDbl", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::ReadArrayI8(::grpc::ServerContext* context, const ReadArrayI8Request* request, ReadArrayI8Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - size_t size = request->size(); - std::vector array(size); - auto status = library_->ReadArrayI8(session, indicator, array.data(), size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->mutable_array()->Clear(); - response->mutable_array()->Reserve(size); - std::transform( - array.begin(), - array.begin() + size, - google::protobuf::RepeatedFieldBackInserter(response->mutable_array()), - [&](auto x) { - return x; - }); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::ReadArrayI16(::grpc::ServerContext* context, const ReadArrayI16Request* request, ReadArrayI16Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + size_t size = request->size(); + std::vector array(size); + auto status = library_->ReadArrayI16(session, indicator, array.data(), size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); } + response->set_status(status); + response->mutable_array()->Clear(); + response->mutable_array()->Reserve(size); + std::transform( + array.begin(), + array.begin() + size, + google::protobuf::RepeatedFieldBackInserter(response->mutable_array()), + [&](auto x) { + return x; + }); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::BeginReadArrayI8(::grpc::ServerContext* context, const BeginReadArrayI8Request* request, BeginReadArrayI8Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - size_t size = request->size(); - - auto data = std::make_unique(); - data->session = session; - data->indicator = indicator; - data->size = size; - data->library = std::shared_ptr(library_); - - data->data.mutable_value()->Reserve(request->size()); - data->data.mutable_value()->Resize(request->size(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayI8", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::BeginReadArrayI16(::grpc::ServerContext* context, const BeginReadArrayI16Request* request, BeginReadArrayI16Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + size_t size = request->size(); + + auto data = std::make_unique(); + data->session = session; + data->indicator = indicator; + data->size = size; + data->library = std::shared_ptr(library_); + + data->data.mutable_value()->Reserve(request->size()); + data->data.mutable_value()->Resize(request->size(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayI16", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::ReadArraySgl(::grpc::ServerContext* context, const ReadArraySglRequest* request, ReadArraySglResponse* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - size_t size = request->size(); - response->mutable_array()->Resize(size, 0); - float* array = response->mutable_array()->mutable_data(); - auto status = library_->ReadArraySgl(session, indicator, array, size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::ReadArrayI32(::grpc::ServerContext* context, const ReadArrayI32Request* request, ReadArrayI32Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + size_t size = request->size(); + response->mutable_array()->Resize(size, 0); + int32_t* array = response->mutable_array()->mutable_data(); + auto status = library_->ReadArrayI32(session, indicator, array, size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::BeginReadArraySgl(::grpc::ServerContext* context, const BeginReadArraySglRequest* request, BeginReadArraySglResponse* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - size_t size = request->size(); - - auto data = std::make_unique(); - data->session = session; - data->indicator = indicator; - data->size = size; - data->library = std::shared_ptr(library_); - - data->data.mutable_value()->Reserve(request->size()); - data->data.mutable_value()->Resize(request->size(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArraySgl", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::BeginReadArrayI32(::grpc::ServerContext* context, const BeginReadArrayI32Request* request, BeginReadArrayI32Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + size_t size = request->size(); + + auto data = std::make_unique(); + data->session = session; + data->indicator = indicator; + data->size = size; + data->library = std::shared_ptr(library_); + + data->data.mutable_value()->Reserve(request->size()); + data->data.mutable_value()->Resize(request->size(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayI32", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::ReadArrayU16(::grpc::ServerContext* context, const ReadArrayU16Request* request, ReadArrayU16Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - size_t size = request->size(); - std::vector array(size); - auto status = library_->ReadArrayU16(session, indicator, array.data(), size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->mutable_array()->Clear(); - response->mutable_array()->Reserve(size); - std::transform( - array.begin(), - array.begin() + size, - google::protobuf::RepeatedFieldBackInserter(response->mutable_array()), - [&](auto x) { - return x; - }); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::ReadArrayI64(::grpc::ServerContext* context, const ReadArrayI64Request* request, ReadArrayI64Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + size_t size = request->size(); + response->mutable_array()->Resize(size, 0); + int64_t* array = response->mutable_array()->mutable_data(); + auto status = library_->ReadArrayI64(session, indicator, array, size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::BeginReadArrayU16(::grpc::ServerContext* context, const BeginReadArrayU16Request* request, BeginReadArrayU16Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - size_t size = request->size(); - - auto data = std::make_unique(); - data->session = session; - data->indicator = indicator; - data->size = size; - data->library = std::shared_ptr(library_); - - data->data.mutable_value()->Reserve(request->size()); - data->data.mutable_value()->Resize(request->size(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayU16", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::BeginReadArrayI64(::grpc::ServerContext* context, const BeginReadArrayI64Request* request, BeginReadArrayI64Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + size_t size = request->size(); + + auto data = std::make_unique(); + data->session = session; + data->indicator = indicator; + data->size = size; + data->library = std::shared_ptr(library_); + + data->data.mutable_value()->Reserve(request->size()); + data->data.mutable_value()->Resize(request->size(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayI64", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::ReadArrayU32(::grpc::ServerContext* context, const ReadArrayU32Request* request, ReadArrayU32Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - size_t size = request->size(); - response->mutable_array()->Resize(size, 0); - uint32_t* array = response->mutable_array()->mutable_data(); - auto status = library_->ReadArrayU32(session, indicator, array, size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::ReadArrayI8(::grpc::ServerContext* context, const ReadArrayI8Request* request, ReadArrayI8Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + size_t size = request->size(); + std::vector array(size); + auto status = library_->ReadArrayI8(session, indicator, array.data(), size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); } + response->set_status(status); + response->mutable_array()->Clear(); + response->mutable_array()->Reserve(size); + std::transform( + array.begin(), + array.begin() + size, + google::protobuf::RepeatedFieldBackInserter(response->mutable_array()), + [&](auto x) { + return x; + }); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::BeginReadArrayU32(::grpc::ServerContext* context, const BeginReadArrayU32Request* request, BeginReadArrayU32Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - size_t size = request->size(); - - auto data = std::make_unique(); - data->session = session; - data->indicator = indicator; - data->size = size; - data->library = std::shared_ptr(library_); - - data->data.mutable_value()->Reserve(request->size()); - data->data.mutable_value()->Resize(request->size(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayU32", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::BeginReadArrayI8(::grpc::ServerContext* context, const BeginReadArrayI8Request* request, BeginReadArrayI8Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + size_t size = request->size(); + + auto data = std::make_unique(); + data->session = session; + data->indicator = indicator; + data->size = size; + data->library = std::shared_ptr(library_); + + data->data.mutable_value()->Reserve(request->size()); + data->data.mutable_value()->Resize(request->size(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayI8", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::ReadArrayU64(::grpc::ServerContext* context, const ReadArrayU64Request* request, ReadArrayU64Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - size_t size = request->size(); - response->mutable_array()->Resize(size, 0); - uint64_t* array = response->mutable_array()->mutable_data(); - auto status = library_->ReadArrayU64(session, indicator, array, size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::ReadArraySgl(::grpc::ServerContext* context, const ReadArraySglRequest* request, ReadArraySglResponse* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + size_t size = request->size(); + response->mutable_array()->Resize(size, 0); + float* array = response->mutable_array()->mutable_data(); + auto status = library_->ReadArraySgl(session, indicator, array, size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::BeginReadArrayU64(::grpc::ServerContext* context, const BeginReadArrayU64Request* request, BeginReadArrayU64Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - size_t size = request->size(); - - auto data = std::make_unique(); - data->session = session; - data->indicator = indicator; - data->size = size; - data->library = std::shared_ptr(library_); - - data->data.mutable_value()->Reserve(request->size()); - data->data.mutable_value()->Resize(request->size(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayU64", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::BeginReadArraySgl(::grpc::ServerContext* context, const BeginReadArraySglRequest* request, BeginReadArraySglResponse* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + size_t size = request->size(); + + auto data = std::make_unique(); + data->session = session; + data->indicator = indicator; + data->size = size; + data->library = std::shared_ptr(library_); + + data->data.mutable_value()->Reserve(request->size()); + data->data.mutable_value()->Resize(request->size(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArraySgl", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::ReadArrayU8(::grpc::ServerContext* context, const ReadArrayU8Request* request, ReadArrayU8Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - size_t size = request->size(); - std::vector array(size); - auto status = library_->ReadArrayU8(session, indicator, array.data(), size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->mutable_array()->Clear(); - response->mutable_array()->Reserve(size); - std::transform( - array.begin(), - array.begin() + size, - google::protobuf::RepeatedFieldBackInserter(response->mutable_array()), - [&](auto x) { - return x; - }); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::ReadArrayU16(::grpc::ServerContext* context, const ReadArrayU16Request* request, ReadArrayU16Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + size_t size = request->size(); + std::vector array(size); + auto status = library_->ReadArrayU16(session, indicator, array.data(), size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); } + response->set_status(status); + response->mutable_array()->Clear(); + response->mutable_array()->Reserve(size); + std::transform( + array.begin(), + array.begin() + size, + google::protobuf::RepeatedFieldBackInserter(response->mutable_array()), + [&](auto x) { + return x; + }); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::BeginReadArrayU8(::grpc::ServerContext* context, const BeginReadArrayU8Request* request, BeginReadArrayU8Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - size_t size = request->size(); - - auto data = std::make_unique(); - data->session = session; - data->indicator = indicator; - data->size = size; - data->library = std::shared_ptr(library_); - - data->data.mutable_value()->Reserve(request->size()); - data->data.mutable_value()->Resize(request->size(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayU8", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::BeginReadArrayU16(::grpc::ServerContext* context, const BeginReadArrayU16Request* request, BeginReadArrayU16Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + size_t size = request->size(); + + auto data = std::make_unique(); + data->session = session; + data->indicator = indicator; + data->size = size; + data->library = std::shared_ptr(library_); + + data->data.mutable_value()->Reserve(request->size()); + data->data.mutable_value()->Resize(request->size(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayU16", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::ReadBool(::grpc::ServerContext* context, const ReadBoolRequest* request, ReadBoolResponse* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - NiFpga_Bool value {}; - auto status = library_->ReadBool(session, indicator, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::ReadArrayU32(::grpc::ServerContext* context, const ReadArrayU32Request* request, ReadArrayU32Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + size_t size = request->size(); + response->mutable_array()->Resize(size, 0); + uint32_t* array = response->mutable_array()->mutable_data(); + auto status = library_->ReadArrayU32(session, indicator, array, size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::BeginReadBool(::grpc::ServerContext* context, const BeginReadBoolRequest* request, BeginReadBoolResponse* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - - auto data = std::make_unique(); - data->session = session; - data->indicator = indicator; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadBool", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::BeginReadArrayU32(::grpc::ServerContext* context, const BeginReadArrayU32Request* request, BeginReadArrayU32Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + size_t size = request->size(); + + auto data = std::make_unique(); + data->session = session; + data->indicator = indicator; + data->size = size; + data->library = std::shared_ptr(library_); + + data->data.mutable_value()->Reserve(request->size()); + data->data.mutable_value()->Resize(request->size(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayU32", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::ReadDbl(::grpc::ServerContext* context, const ReadDblRequest* request, ReadDblResponse* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - double value {}; - auto status = library_->ReadDbl(session, indicator, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::ReadArrayU64(::grpc::ServerContext* context, const ReadArrayU64Request* request, ReadArrayU64Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + size_t size = request->size(); + response->mutable_array()->Resize(size, 0); + uint64_t* array = response->mutable_array()->mutable_data(); + auto status = library_->ReadArrayU64(session, indicator, array, size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::BeginReadDbl(::grpc::ServerContext* context, const BeginReadDblRequest* request, BeginReadDblResponse* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - - auto data = std::make_unique(); - data->session = session; - data->indicator = indicator; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadDbl", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::BeginReadArrayU64(::grpc::ServerContext* context, const BeginReadArrayU64Request* request, BeginReadArrayU64Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + size_t size = request->size(); + + auto data = std::make_unique(); + data->session = session; + data->indicator = indicator; + data->size = size; + data->library = std::shared_ptr(library_); + + data->data.mutable_value()->Reserve(request->size()); + data->data.mutable_value()->Resize(request->size(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayU64", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::ReadFifoBool(::grpc::ServerContext* context, const ReadFifoBoolRequest* request, ReadFifoBoolResponse* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - size_t number_of_elements = request->number_of_elements(); - uint32_t timeout = request->timeout(); - std::vector data(number_of_elements, NiFpga_Bool()); - size_t elements_remaining {}; - auto status = library_->ReadFifoBool(session, fifo, data.data(), number_of_elements, timeout, &elements_remaining); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - convert_to_grpc(data, response->mutable_data()); - response->set_elements_remaining(elements_remaining); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::ReadArrayU8(::grpc::ServerContext* context, const ReadArrayU8Request* request, ReadArrayU8Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + size_t size = request->size(); + std::vector array(size); + auto status = library_->ReadArrayU8(session, indicator, array.data(), size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); } + response->set_status(status); + response->mutable_array()->Clear(); + response->mutable_array()->Reserve(size); + std::transform( + array.begin(), + array.begin() + size, + google::protobuf::RepeatedFieldBackInserter(response->mutable_array()), + [&](auto x) { + return x; + }); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::ReadFifoDbl(::grpc::ServerContext* context, const ReadFifoDblRequest* request, ReadFifoDblResponse* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - size_t number_of_elements = request->number_of_elements(); - uint32_t timeout = request->timeout(); - response->mutable_data()->Resize(number_of_elements, 0); - double* data = response->mutable_data()->mutable_data(); - size_t elements_remaining {}; - auto status = library_->ReadFifoDbl(session, fifo, data, number_of_elements, timeout, &elements_remaining); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_elements_remaining(elements_remaining); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::BeginReadArrayU8(::grpc::ServerContext* context, const BeginReadArrayU8Request* request, BeginReadArrayU8Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + size_t size = request->size(); + + auto data = std::make_unique(); + data->session = session; + data->indicator = indicator; + data->size = size; + data->library = std::shared_ptr(library_); + + data->data.mutable_value()->Reserve(request->size()); + data->data.mutable_value()->Resize(request->size(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayU8", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::ReadFifoI16(::grpc::ServerContext* context, const ReadFifoI16Request* request, ReadFifoI16Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - size_t number_of_elements = request->number_of_elements(); - uint32_t timeout = request->timeout(); - std::vector data(number_of_elements); - size_t elements_remaining {}; - auto status = library_->ReadFifoI16(session, fifo, data.data(), number_of_elements, timeout, &elements_remaining); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->mutable_data()->Clear(); - response->mutable_data()->Reserve(number_of_elements); - std::transform( - data.begin(), - data.begin() + number_of_elements, - google::protobuf::RepeatedFieldBackInserter(response->mutable_data()), - [&](auto x) { - return x; - }); - response->set_elements_remaining(elements_remaining); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::ReadBool(::grpc::ServerContext* context, const ReadBoolRequest* request, ReadBoolResponse* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + NiFpga_Bool value{}; + auto status = library_->ReadBool(session, indicator, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::ReadFifoI32(::grpc::ServerContext* context, const ReadFifoI32Request* request, ReadFifoI32Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - size_t number_of_elements = request->number_of_elements(); - uint32_t timeout = request->timeout(); - response->mutable_data()->Resize(number_of_elements, 0); - int32_t* data = response->mutable_data()->mutable_data(); - size_t elements_remaining {}; - auto status = library_->ReadFifoI32(session, fifo, data, number_of_elements, timeout, &elements_remaining); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_elements_remaining(elements_remaining); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::BeginReadBool(::grpc::ServerContext* context, const BeginReadBoolRequest* request, BeginReadBoolResponse* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + + auto data = std::make_unique(); + data->session = session; + data->indicator = indicator; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadBool", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::ReadFifoI64(::grpc::ServerContext* context, const ReadFifoI64Request* request, ReadFifoI64Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - size_t number_of_elements = request->number_of_elements(); - uint32_t timeout = request->timeout(); - response->mutable_data()->Resize(number_of_elements, 0); - int64_t* data = response->mutable_data()->mutable_data(); - size_t elements_remaining {}; - auto status = library_->ReadFifoI64(session, fifo, data, number_of_elements, timeout, &elements_remaining); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_elements_remaining(elements_remaining); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::ReadDbl(::grpc::ServerContext* context, const ReadDblRequest* request, ReadDblResponse* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + double value{}; + auto status = library_->ReadDbl(session, indicator, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::ReadFifoI8(::grpc::ServerContext* context, const ReadFifoI8Request* request, ReadFifoI8Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - size_t number_of_elements = request->number_of_elements(); - uint32_t timeout = request->timeout(); - std::vector data(number_of_elements); - size_t elements_remaining {}; - auto status = library_->ReadFifoI8(session, fifo, data.data(), number_of_elements, timeout, &elements_remaining); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->mutable_data()->Clear(); - response->mutable_data()->Reserve(number_of_elements); - std::transform( - data.begin(), - data.begin() + number_of_elements, - google::protobuf::RepeatedFieldBackInserter(response->mutable_data()), - [&](auto x) { - return x; - }); - response->set_elements_remaining(elements_remaining); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::BeginReadDbl(::grpc::ServerContext* context, const BeginReadDblRequest* request, BeginReadDblResponse* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + + auto data = std::make_unique(); + data->session = session; + data->indicator = indicator; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadDbl", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::ReadFifoSgl(::grpc::ServerContext* context, const ReadFifoSglRequest* request, ReadFifoSglResponse* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - size_t number_of_elements = request->number_of_elements(); - uint32_t timeout = request->timeout(); - response->mutable_data()->Resize(number_of_elements, 0); - float* data = response->mutable_data()->mutable_data(); - size_t elements_remaining {}; - auto status = library_->ReadFifoSgl(session, fifo, data, number_of_elements, timeout, &elements_remaining); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_elements_remaining(elements_remaining); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::ReadFifoBool(::grpc::ServerContext* context, const ReadFifoBoolRequest* request, ReadFifoBoolResponse* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + size_t number_of_elements = request->number_of_elements(); + uint32_t timeout = request->timeout(); + std::vector data(number_of_elements, NiFpga_Bool()); + size_t elements_remaining{}; + auto status = library_->ReadFifoBool(session, fifo, data.data(), number_of_elements, timeout, &elements_remaining); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + convert_to_grpc(data, response->mutable_data()); + response->set_elements_remaining(elements_remaining); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::ReadFifoU16(::grpc::ServerContext* context, const ReadFifoU16Request* request, ReadFifoU16Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - size_t number_of_elements = request->number_of_elements(); - uint32_t timeout = request->timeout(); - std::vector data(number_of_elements); - size_t elements_remaining {}; - auto status = library_->ReadFifoU16(session, fifo, data.data(), number_of_elements, timeout, &elements_remaining); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->mutable_data()->Clear(); - response->mutable_data()->Reserve(number_of_elements); - std::transform( - data.begin(), - data.begin() + number_of_elements, - google::protobuf::RepeatedFieldBackInserter(response->mutable_data()), - [&](auto x) { - return x; - }); - response->set_elements_remaining(elements_remaining); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::ReadFifoDbl(::grpc::ServerContext* context, const ReadFifoDblRequest* request, ReadFifoDblResponse* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + size_t number_of_elements = request->number_of_elements(); + uint32_t timeout = request->timeout(); + response->mutable_data()->Resize(number_of_elements, 0); + double* data = response->mutable_data()->mutable_data(); + size_t elements_remaining{}; + auto status = library_->ReadFifoDbl(session, fifo, data, number_of_elements, timeout, &elements_remaining); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_elements_remaining(elements_remaining); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::ReadFifoU32(::grpc::ServerContext* context, const ReadFifoU32Request* request, ReadFifoU32Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - size_t number_of_elements = request->number_of_elements(); - uint32_t timeout = request->timeout(); - response->mutable_data()->Resize(number_of_elements, 0); - uint32_t* data = response->mutable_data()->mutable_data(); - size_t elements_remaining {}; - auto status = library_->ReadFifoU32(session, fifo, data, number_of_elements, timeout, &elements_remaining); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_elements_remaining(elements_remaining); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::ReadFifoI16(::grpc::ServerContext* context, const ReadFifoI16Request* request, ReadFifoI16Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + size_t number_of_elements = request->number_of_elements(); + uint32_t timeout = request->timeout(); + std::vector data(number_of_elements); + size_t elements_remaining{}; + auto status = library_->ReadFifoI16(session, fifo, data.data(), number_of_elements, timeout, &elements_remaining); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->mutable_data()->Clear(); + response->mutable_data()->Reserve(number_of_elements); + std::transform( + data.begin(), + data.begin() + number_of_elements, + google::protobuf::RepeatedFieldBackInserter(response->mutable_data()), + [&](auto x) { + return x; + }); + response->set_elements_remaining(elements_remaining); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::ReadFifoU64(::grpc::ServerContext* context, const ReadFifoU64Request* request, ReadFifoU64Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - size_t number_of_elements = request->number_of_elements(); - uint32_t timeout = request->timeout(); - response->mutable_data()->Resize(number_of_elements, 0); - uint64_t* data = response->mutable_data()->mutable_data(); - size_t elements_remaining {}; - auto status = library_->ReadFifoU64(session, fifo, data, number_of_elements, timeout, &elements_remaining); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_elements_remaining(elements_remaining); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::ReadFifoI32(::grpc::ServerContext* context, const ReadFifoI32Request* request, ReadFifoI32Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + size_t number_of_elements = request->number_of_elements(); + uint32_t timeout = request->timeout(); + response->mutable_data()->Resize(number_of_elements, 0); + int32_t* data = response->mutable_data()->mutable_data(); + size_t elements_remaining{}; + auto status = library_->ReadFifoI32(session, fifo, data, number_of_elements, timeout, &elements_remaining); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_elements_remaining(elements_remaining); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } +} + +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::ReadFifoI64(::grpc::ServerContext* context, const ReadFifoI64Request* request, ReadFifoI64Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + size_t number_of_elements = request->number_of_elements(); + uint32_t timeout = request->timeout(); + response->mutable_data()->Resize(number_of_elements, 0); + int64_t* data = response->mutable_data()->mutable_data(); + size_t elements_remaining{}; + auto status = library_->ReadFifoI64(session, fifo, data, number_of_elements, timeout, &elements_remaining); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_elements_remaining(elements_remaining); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::ReadFifoU8(::grpc::ServerContext* context, const ReadFifoU8Request* request, ReadFifoU8Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - size_t number_of_elements = request->number_of_elements(); - uint32_t timeout = request->timeout(); - std::vector data(number_of_elements); - size_t elements_remaining {}; - auto status = library_->ReadFifoU8(session, fifo, data.data(), number_of_elements, timeout, &elements_remaining); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->mutable_data()->Clear(); - response->mutable_data()->Reserve(number_of_elements); - std::transform( - data.begin(), - data.begin() + number_of_elements, - google::protobuf::RepeatedFieldBackInserter(response->mutable_data()), - [&](auto x) { - return x; - }); - response->set_elements_remaining(elements_remaining); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::ReadFifoI8(::grpc::ServerContext* context, const ReadFifoI8Request* request, ReadFifoI8Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + size_t number_of_elements = request->number_of_elements(); + uint32_t timeout = request->timeout(); + std::vector data(number_of_elements); + size_t elements_remaining{}; + auto status = library_->ReadFifoI8(session, fifo, data.data(), number_of_elements, timeout, &elements_remaining); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->mutable_data()->Clear(); + response->mutable_data()->Reserve(number_of_elements); + std::transform( + data.begin(), + data.begin() + number_of_elements, + google::protobuf::RepeatedFieldBackInserter(response->mutable_data()), + [&](auto x) { + return x; + }); + response->set_elements_remaining(elements_remaining); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::ReadI16(::grpc::ServerContext* context, const ReadI16Request* request, ReadI16Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - int16_t value {}; - auto status = library_->ReadI16(session, indicator, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::ReadFifoSgl(::grpc::ServerContext* context, const ReadFifoSglRequest* request, ReadFifoSglResponse* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + size_t number_of_elements = request->number_of_elements(); + uint32_t timeout = request->timeout(); + response->mutable_data()->Resize(number_of_elements, 0); + float* data = response->mutable_data()->mutable_data(); + size_t elements_remaining{}; + auto status = library_->ReadFifoSgl(session, fifo, data, number_of_elements, timeout, &elements_remaining); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_elements_remaining(elements_remaining); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::BeginReadI16(::grpc::ServerContext* context, const BeginReadI16Request* request, BeginReadI16Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - - auto data = std::make_unique(); - data->session = session; - data->indicator = indicator; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadI16", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::ReadFifoU16(::grpc::ServerContext* context, const ReadFifoU16Request* request, ReadFifoU16Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + size_t number_of_elements = request->number_of_elements(); + uint32_t timeout = request->timeout(); + std::vector data(number_of_elements); + size_t elements_remaining{}; + auto status = library_->ReadFifoU16(session, fifo, data.data(), number_of_elements, timeout, &elements_remaining); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->mutable_data()->Clear(); + response->mutable_data()->Reserve(number_of_elements); + std::transform( + data.begin(), + data.begin() + number_of_elements, + google::protobuf::RepeatedFieldBackInserter(response->mutable_data()), + [&](auto x) { + return x; + }); + response->set_elements_remaining(elements_remaining); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } +} + +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::ReadFifoU32(::grpc::ServerContext* context, const ReadFifoU32Request* request, ReadFifoU32Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + size_t number_of_elements = request->number_of_elements(); + uint32_t timeout = request->timeout(); + response->mutable_data()->Resize(number_of_elements, 0); + uint32_t* data = response->mutable_data()->mutable_data(); + size_t elements_remaining{}; + auto status = library_->ReadFifoU32(session, fifo, data, number_of_elements, timeout, &elements_remaining); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_elements_remaining(elements_remaining); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } +} + +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::ReadFifoU64(::grpc::ServerContext* context, const ReadFifoU64Request* request, ReadFifoU64Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + size_t number_of_elements = request->number_of_elements(); + uint32_t timeout = request->timeout(); + response->mutable_data()->Resize(number_of_elements, 0); + uint64_t* data = response->mutable_data()->mutable_data(); + size_t elements_remaining{}; + auto status = library_->ReadFifoU64(session, fifo, data, number_of_elements, timeout, &elements_remaining); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_elements_remaining(elements_remaining); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } +} + +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::ReadFifoU8(::grpc::ServerContext* context, const ReadFifoU8Request* request, ReadFifoU8Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + size_t number_of_elements = request->number_of_elements(); + uint32_t timeout = request->timeout(); + std::vector data(number_of_elements); + size_t elements_remaining{}; + auto status = library_->ReadFifoU8(session, fifo, data.data(), number_of_elements, timeout, &elements_remaining); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->mutable_data()->Clear(); + response->mutable_data()->Reserve(number_of_elements); + std::transform( + data.begin(), + data.begin() + number_of_elements, + google::protobuf::RepeatedFieldBackInserter(response->mutable_data()), + [&](auto x) { + return x; + }); + response->set_elements_remaining(elements_remaining); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } +} + +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::ReadI16(::grpc::ServerContext* context, const ReadI16Request* request, ReadI16Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + int16_t value{}; + auto status = library_->ReadI16(session, indicator, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } +} + +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::BeginReadI16(::grpc::ServerContext* context, const BeginReadI16Request* request, BeginReadI16Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + + auto data = std::make_unique(); + data->session = session; + data->indicator = indicator; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadI16", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } +} + +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::ReadI32(::grpc::ServerContext* context, const ReadI32Request* request, ReadI32Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + int32_t value{}; + auto status = library_->ReadI32(session, indicator, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } +} + +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::BeginReadI32(::grpc::ServerContext* context, const BeginReadI32Request* request, BeginReadI32Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + + auto data = std::make_unique(); + data->session = session; + data->indicator = indicator; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadI32", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } +} + +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::ReadI64(::grpc::ServerContext* context, const ReadI64Request* request, ReadI64Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + int64_t value{}; + auto status = library_->ReadI64(session, indicator, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } +} + +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::BeginReadI64(::grpc::ServerContext* context, const BeginReadI64Request* request, BeginReadI64Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + + auto data = std::make_unique(); + data->session = session; + data->indicator = indicator; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadI64", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } +} + +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::ReadI8(::grpc::ServerContext* context, const ReadI8Request* request, ReadI8Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + int8_t value{}; + auto status = library_->ReadI8(session, indicator, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } +} + +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::BeginReadI8(::grpc::ServerContext* context, const BeginReadI8Request* request, BeginReadI8Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + + auto data = std::make_unique(); + data->session = session; + data->indicator = indicator; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadI8", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } +} + +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::ReadSgl(::grpc::ServerContext* context, const ReadSglRequest* request, ReadSglResponse* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + float value{}; + auto status = library_->ReadSgl(session, indicator, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } +} + +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::BeginReadSgl(::grpc::ServerContext* context, const BeginReadSglRequest* request, BeginReadSglResponse* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + + auto data = std::make_unique(); + data->session = session; + data->indicator = indicator; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadSgl", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } +} + +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::ReadU16(::grpc::ServerContext* context, const ReadU16Request* request, ReadU16Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + uint16_t value{}; + auto status = library_->ReadU16(session, indicator, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } +} + +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::BeginReadU16(::grpc::ServerContext* context, const BeginReadU16Request* request, BeginReadU16Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + + auto data = std::make_unique(); + data->session = session; + data->indicator = indicator; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadU16", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; } - - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::ReadI32(::grpc::ServerContext* context, const ReadI32Request* request, ReadI32Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - int32_t value {}; - auto status = library_->ReadI32(session, indicator, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::BeginReadI32(::grpc::ServerContext* context, const BeginReadI32Request* request, BeginReadI32Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - - auto data = std::make_unique(); - data->session = session; - data->indicator = indicator; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadI32", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::ReadU32(::grpc::ServerContext* context, const ReadU32Request* request, ReadU32Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + uint32_t value{}; + auto status = library_->ReadU32(session, indicator, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; } - - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::ReadI64(::grpc::ServerContext* context, const ReadI64Request* request, ReadI64Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - int64_t value {}; - auto status = library_->ReadI64(session, indicator, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::BeginReadI64(::grpc::ServerContext* context, const BeginReadI64Request* request, BeginReadI64Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - - auto data = std::make_unique(); - data->session = session; - data->indicator = indicator; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadI64", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::BeginReadU32(::grpc::ServerContext* context, const BeginReadU32Request* request, BeginReadU32Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + + auto data = std::make_unique(); + data->session = session; + data->indicator = indicator; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadU32", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; } - - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::ReadI8(::grpc::ServerContext* context, const ReadI8Request* request, ReadI8Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - int8_t value {}; - auto status = library_->ReadI8(session, indicator, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::BeginReadI8(::grpc::ServerContext* context, const BeginReadI8Request* request, BeginReadI8Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - - auto data = std::make_unique(); - data->session = session; - data->indicator = indicator; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadI8", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::ReadU64(::grpc::ServerContext* context, const ReadU64Request* request, ReadU64Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + uint64_t value{}; + auto status = library_->ReadU64(session, indicator, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; } - - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::ReadSgl(::grpc::ServerContext* context, const ReadSglRequest* request, ReadSglResponse* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - float value {}; - auto status = library_->ReadSgl(session, indicator, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::BeginReadSgl(::grpc::ServerContext* context, const BeginReadSglRequest* request, BeginReadSglResponse* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - - auto data = std::make_unique(); - data->session = session; - data->indicator = indicator; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadSgl", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::BeginReadU64(::grpc::ServerContext* context, const BeginReadU64Request* request, BeginReadU64Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + + auto data = std::make_unique(); + data->session = session; + data->indicator = indicator; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadU64", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; } - - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::ReadU16(::grpc::ServerContext* context, const ReadU16Request* request, ReadU16Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - uint16_t value {}; - auto status = library_->ReadU16(session, indicator, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::BeginReadU16(::grpc::ServerContext* context, const BeginReadU16Request* request, BeginReadU16Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - - auto data = std::make_unique(); - data->session = session; - data->indicator = indicator; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadU16", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::ReadU8(::grpc::ServerContext* context, const ReadU8Request* request, ReadU8Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + uint8_t value{}; + auto status = library_->ReadU8(session, indicator, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; } - - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::ReadU32(::grpc::ServerContext* context, const ReadU32Request* request, ReadU32Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - uint32_t value {}; - auto status = library_->ReadU32(session, indicator, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::BeginReadU32(::grpc::ServerContext* context, const BeginReadU32Request* request, BeginReadU32Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - - auto data = std::make_unique(); - data->session = session; - data->indicator = indicator; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadU32", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::BeginReadU8(::grpc::ServerContext* context, const BeginReadU8Request* request, BeginReadU8Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + + auto data = std::make_unique(); + data->session = session; + data->indicator = indicator; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadU8", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; } - - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::ReadU64(::grpc::ServerContext* context, const ReadU64Request* request, ReadU64Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - uint64_t value {}; - auto status = library_->ReadU64(session, indicator, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::BeginReadU64(::grpc::ServerContext* context, const BeginReadU64Request* request, BeginReadU64Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - - auto data = std::make_unique(); - data->session = session; - data->indicator = indicator; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadU64", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::ReleaseFifoElements(::grpc::ServerContext* context, const ReleaseFifoElementsRequest* request, ReleaseFifoElementsResponse* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + size_t elements = request->elements(); + auto status = library_->ReleaseFifoElements(session, fifo, elements); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; } - - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::ReadU8(::grpc::ServerContext* context, const ReadU8Request* request, ReadU8Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - uint8_t value {}; - auto status = library_->ReadU8(session, indicator, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::BeginReadU8(::grpc::ServerContext* context, const BeginReadU8Request* request, BeginReadU8Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - - auto data = std::make_unique(); - data->session = session; - data->indicator = indicator; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadU8", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::Reset(::grpc::ServerContext* context, const ResetRequest* request, ResetResponse* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::ReleaseFifoElements(::grpc::ServerContext* context, const ReleaseFifoElementsRequest* request, ReleaseFifoElementsResponse* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - size_t elements = request->elements(); - auto status = library_->ReleaseFifoElements(session, fifo, elements); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + auto status = library_->Reset(session); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); } + response->set_status(status); + return ::grpc::Status::OK; } - - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::Reset(::grpc::ServerContext* context, const ResetRequest* request, ResetResponse* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - auto status = library_->Reset(session); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::Run(::grpc::ServerContext* context, const RunRequest* request, RunResponse* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t attribute; - switch (request->attribute_enum_case()) { - case nifpga_grpc::RunRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - break; - } - case nifpga_grpc::RunRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - break; - } - case nifpga_grpc::RunRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::Run(::grpc::ServerContext* context, const RunRequest* request, RunResponse* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t attribute; + switch (request->attribute_enum_case()) { + case nifpga_grpc::RunRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + break; } - - auto status = library_->Run(session, attribute); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + case nifpga_grpc::RunRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + break; + } + case nifpga_grpc::RunRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + + auto status = library_->Run(session, attribute); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::SetFifoPropertyI32(::grpc::ServerContext* context, const SetFifoPropertyI32Request* request, SetFifoPropertyI32Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - NiFpga_FifoProperty property; - switch (request->property_enum_case()) { - case nifpga_grpc::SetFifoPropertyI32Request::PropertyEnumCase::kProperty: { - property = static_cast(request->property()); - break; - } - case nifpga_grpc::SetFifoPropertyI32Request::PropertyEnumCase::kPropertyRaw: { - property = static_cast(request->property_raw()); - break; - } - case nifpga_grpc::SetFifoPropertyI32Request::PropertyEnumCase::PROPERTY_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for property was not specified or out of range"); - break; - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::SetFifoPropertyI32(::grpc::ServerContext* context, const SetFifoPropertyI32Request* request, SetFifoPropertyI32Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + NiFpga_FifoProperty property; + switch (request->property_enum_case()) { + case nifpga_grpc::SetFifoPropertyI32Request::PropertyEnumCase::kProperty: { + property = static_cast(request->property()); + break; } - - int32_t value = request->value(); - auto status = library_->SetFifoPropertyI32(session, fifo, property, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + case nifpga_grpc::SetFifoPropertyI32Request::PropertyEnumCase::kPropertyRaw: { + property = static_cast(request->property_raw()); + break; + } + case nifpga_grpc::SetFifoPropertyI32Request::PropertyEnumCase::PROPERTY_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for property was not specified or out of range"); + break; } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + + int32_t value = request->value(); + auto status = library_->SetFifoPropertyI32(session, fifo, property, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::SetFifoPropertyI64(::grpc::ServerContext* context, const SetFifoPropertyI64Request* request, SetFifoPropertyI64Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - NiFpga_FifoProperty property; - switch (request->property_enum_case()) { - case nifpga_grpc::SetFifoPropertyI64Request::PropertyEnumCase::kProperty: { - property = static_cast(request->property()); - break; - } - case nifpga_grpc::SetFifoPropertyI64Request::PropertyEnumCase::kPropertyRaw: { - property = static_cast(request->property_raw()); - break; - } - case nifpga_grpc::SetFifoPropertyI64Request::PropertyEnumCase::PROPERTY_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for property was not specified or out of range"); - break; - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::SetFifoPropertyI64(::grpc::ServerContext* context, const SetFifoPropertyI64Request* request, SetFifoPropertyI64Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + NiFpga_FifoProperty property; + switch (request->property_enum_case()) { + case nifpga_grpc::SetFifoPropertyI64Request::PropertyEnumCase::kProperty: { + property = static_cast(request->property()); + break; } - - int64_t value = request->value(); - auto status = library_->SetFifoPropertyI64(session, fifo, property, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + case nifpga_grpc::SetFifoPropertyI64Request::PropertyEnumCase::kPropertyRaw: { + property = static_cast(request->property_raw()); + break; + } + case nifpga_grpc::SetFifoPropertyI64Request::PropertyEnumCase::PROPERTY_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for property was not specified or out of range"); + break; } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + + int64_t value = request->value(); + auto status = library_->SetFifoPropertyI64(session, fifo, property, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::SetFifoPropertyU32(::grpc::ServerContext* context, const SetFifoPropertyU32Request* request, SetFifoPropertyU32Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - NiFpga_FifoProperty property; - switch (request->property_enum_case()) { - case nifpga_grpc::SetFifoPropertyU32Request::PropertyEnumCase::kProperty: { - property = static_cast(request->property()); - break; - } - case nifpga_grpc::SetFifoPropertyU32Request::PropertyEnumCase::kPropertyRaw: { - property = static_cast(request->property_raw()); - break; - } - case nifpga_grpc::SetFifoPropertyU32Request::PropertyEnumCase::PROPERTY_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for property was not specified or out of range"); - break; - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::SetFifoPropertyU32(::grpc::ServerContext* context, const SetFifoPropertyU32Request* request, SetFifoPropertyU32Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + NiFpga_FifoProperty property; + switch (request->property_enum_case()) { + case nifpga_grpc::SetFifoPropertyU32Request::PropertyEnumCase::kProperty: { + property = static_cast(request->property()); + break; } - - uint32_t value = request->value(); - auto status = library_->SetFifoPropertyU32(session, fifo, property, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + case nifpga_grpc::SetFifoPropertyU32Request::PropertyEnumCase::kPropertyRaw: { + property = static_cast(request->property_raw()); + break; + } + case nifpga_grpc::SetFifoPropertyU32Request::PropertyEnumCase::PROPERTY_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for property was not specified or out of range"); + break; } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + + uint32_t value = request->value(); + auto status = library_->SetFifoPropertyU32(session, fifo, property, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::SetFifoPropertyU64(::grpc::ServerContext* context, const SetFifoPropertyU64Request* request, SetFifoPropertyU64Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - NiFpga_FifoProperty property; - switch (request->property_enum_case()) { - case nifpga_grpc::SetFifoPropertyU64Request::PropertyEnumCase::kProperty: { - property = static_cast(request->property()); - break; - } - case nifpga_grpc::SetFifoPropertyU64Request::PropertyEnumCase::kPropertyRaw: { - property = static_cast(request->property_raw()); - break; - } - case nifpga_grpc::SetFifoPropertyU64Request::PropertyEnumCase::PROPERTY_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for property was not specified or out of range"); - break; - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::SetFifoPropertyU64(::grpc::ServerContext* context, const SetFifoPropertyU64Request* request, SetFifoPropertyU64Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + NiFpga_FifoProperty property; + switch (request->property_enum_case()) { + case nifpga_grpc::SetFifoPropertyU64Request::PropertyEnumCase::kProperty: { + property = static_cast(request->property()); + break; } - - uint64_t value = request->value(); - auto status = library_->SetFifoPropertyU64(session, fifo, property, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + case nifpga_grpc::SetFifoPropertyU64Request::PropertyEnumCase::kPropertyRaw: { + property = static_cast(request->property_raw()); + break; + } + case nifpga_grpc::SetFifoPropertyU64Request::PropertyEnumCase::PROPERTY_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for property was not specified or out of range"); + break; } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + + uint64_t value = request->value(); + auto status = library_->SetFifoPropertyU64(session, fifo, property, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::StartFifo(::grpc::ServerContext* context, const StartFifoRequest* request, StartFifoResponse* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - auto status = library_->StartFifo(session, fifo); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::StartFifo(::grpc::ServerContext* context, const StartFifoRequest* request, StartFifoResponse* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + auto status = library_->StartFifo(session, fifo); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::StopFifo(::grpc::ServerContext* context, const StopFifoRequest* request, StopFifoResponse* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - auto status = library_->StopFifo(session, fifo); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::StopFifo(::grpc::ServerContext* context, const StopFifoRequest* request, StopFifoResponse* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + auto status = library_->StopFifo(session, fifo); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::UnreserveFifo(::grpc::ServerContext* context, const UnreserveFifoRequest* request, UnreserveFifoResponse* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - auto status = library_->UnreserveFifo(session, fifo); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::UnreserveFifo(::grpc::ServerContext* context, const UnreserveFifoRequest* request, UnreserveFifoResponse* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + auto status = library_->UnreserveFifo(session, fifo); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::WaitOnIrqs(::grpc::ServerContext* context, const WaitOnIrqsRequest* request, WaitOnIrqsResponse* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t irqs = request->irqs(); - uint32_t timeout = request->timeout(); - NiFpga_IrqContext irq_context {}; - uint32_t irqs_asserted {}; - NiFpga_Bool timed_out {}; - auto status = library_->WaitOnIrqs(session, &irq_context, irqs, timeout, &irqs_asserted, &timed_out); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_irqs_asserted(irqs_asserted); - response->set_timed_out(timed_out); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::WaitOnIrqs(::grpc::ServerContext* context, const WaitOnIrqsRequest* request, WaitOnIrqsResponse* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t irqs = request->irqs(); + uint32_t timeout = request->timeout(); + NiFpga_IrqContext irq_context{}; + uint32_t irqs_asserted{}; + NiFpga_Bool timed_out{}; + auto status = library_->WaitOnIrqs(session, &irq_context, irqs, timeout, &irqs_asserted, &timed_out); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_irqs_asserted(irqs_asserted); + response->set_timed_out(timed_out); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::WriteArrayBool(::grpc::ServerContext* context, const WriteArrayBoolRequest* request, WriteArrayBoolResponse* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - auto array = convert_from_grpc(request->array()); - size_t size = static_cast(request->array().size()); - auto status = library_->WriteArrayBool(session, control, array.data(), size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::WriteArrayBool(::grpc::ServerContext* context, const WriteArrayBoolRequest* request, WriteArrayBoolResponse* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + auto array = convert_from_grpc(request->array()); + size_t size = static_cast(request->array().size()); + auto status = library_->WriteArrayBool(session, control, array.data(), size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::BeginWriteArrayBool(::grpc::ServerContext* context, const BeginWriteArrayBoolRequest* request, BeginWriteArrayBoolResponse* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - - auto data = std::make_unique(); - data->session = session; - data->control = control; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayBool", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::BeginWriteArrayBool(::grpc::ServerContext* context, const BeginWriteArrayBoolRequest* request, BeginWriteArrayBoolResponse* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + + auto data = std::make_unique(); + data->session = session; + data->control = control; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayBool", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::WriteArrayDbl(::grpc::ServerContext* context, const WriteArrayDblRequest* request, WriteArrayDblResponse* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - auto array = const_cast(request->array().data()); - size_t size = static_cast(request->array().size()); - auto status = library_->WriteArrayDbl(session, control, array, size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::WriteArrayDbl(::grpc::ServerContext* context, const WriteArrayDblRequest* request, WriteArrayDblResponse* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + auto array = const_cast(request->array().data()); + size_t size = static_cast(request->array().size()); + auto status = library_->WriteArrayDbl(session, control, array, size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::BeginWriteArrayDbl(::grpc::ServerContext* context, const BeginWriteArrayDblRequest* request, BeginWriteArrayDblResponse* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - - auto data = std::make_unique(); - data->session = session; - data->control = control; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayDbl", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::BeginWriteArrayDbl(::grpc::ServerContext* context, const BeginWriteArrayDblRequest* request, BeginWriteArrayDblResponse* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + + auto data = std::make_unique(); + data->session = session; + data->control = control; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayDbl", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::WriteArrayI16(::grpc::ServerContext* context, const WriteArrayI16Request* request, WriteArrayI16Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - auto array_raw = request->array(); - auto array = std::vector(); - array.reserve(array_raw.size()); - std::transform( +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::WriteArrayI16(::grpc::ServerContext* context, const WriteArrayI16Request* request, WriteArrayI16Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + auto array_raw = request->array(); + auto array = std::vector(); + array.reserve(array_raw.size()); + std::transform( array_raw.begin(), array_raw.end(), std::back_inserter(array), [](auto x) { - if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { - std::string message("value "); - message.append(std::to_string(x)); - message.append(" doesn't fit in datatype "); - message.append("int16_t"); - throw nidevice_grpc::ValueOutOfRangeException(message); - } - return static_cast(x); + if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { + std::string message("value "); + message.append(std::to_string(x)); + message.append(" doesn't fit in datatype "); + message.append("int16_t"); + throw nidevice_grpc::ValueOutOfRangeException(message); + } + return static_cast(x); }); - size_t size = static_cast(request->array().size()); - auto status = library_->WriteArrayI16(session, control, array.data(), size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + size_t size = static_cast(request->array().size()); + auto status = library_->WriteArrayI16(session, control, array.data(), size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::BeginWriteArrayI16(::grpc::ServerContext* context, const BeginWriteArrayI16Request* request, BeginWriteArrayI16Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - - auto data = std::make_unique(); - data->session = session; - data->control = control; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayI16", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::BeginWriteArrayI16(::grpc::ServerContext* context, const BeginWriteArrayI16Request* request, BeginWriteArrayI16Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + + auto data = std::make_unique(); + data->session = session; + data->control = control; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayI16", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::WriteArrayI32(::grpc::ServerContext* context, const WriteArrayI32Request* request, WriteArrayI32Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - auto array = const_cast(request->array().data()); - size_t size = static_cast(request->array().size()); - auto status = library_->WriteArrayI32(session, control, array, size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::WriteArrayI32(::grpc::ServerContext* context, const WriteArrayI32Request* request, WriteArrayI32Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + auto array = const_cast(request->array().data()); + size_t size = static_cast(request->array().size()); + auto status = library_->WriteArrayI32(session, control, array, size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::BeginWriteArrayI32(::grpc::ServerContext* context, const BeginWriteArrayI32Request* request, BeginWriteArrayI32Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - - auto data = std::make_unique(); - data->session = session; - data->control = control; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayI32", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::BeginWriteArrayI32(::grpc::ServerContext* context, const BeginWriteArrayI32Request* request, BeginWriteArrayI32Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + + auto data = std::make_unique(); + data->session = session; + data->control = control; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayI32", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::WriteArrayI64(::grpc::ServerContext* context, const WriteArrayI64Request* request, WriteArrayI64Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - auto array = const_cast(request->array().data()); - size_t size = static_cast(request->array().size()); - auto status = library_->WriteArrayI64(session, control, array, size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::WriteArrayI64(::grpc::ServerContext* context, const WriteArrayI64Request* request, WriteArrayI64Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + auto array = const_cast(request->array().data()); + size_t size = static_cast(request->array().size()); + auto status = library_->WriteArrayI64(session, control, array, size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::BeginWriteArrayI64(::grpc::ServerContext* context, const BeginWriteArrayI64Request* request, BeginWriteArrayI64Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - - auto data = std::make_unique(); - data->session = session; - data->control = control; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayI64", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::BeginWriteArrayI64(::grpc::ServerContext* context, const BeginWriteArrayI64Request* request, BeginWriteArrayI64Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + + auto data = std::make_unique(); + data->session = session; + data->control = control; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayI64", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::WriteArrayI8(::grpc::ServerContext* context, const WriteArrayI8Request* request, WriteArrayI8Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - auto array_raw = request->array(); - auto array = std::vector(); - array.reserve(array_raw.size()); - std::transform( +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::WriteArrayI8(::grpc::ServerContext* context, const WriteArrayI8Request* request, WriteArrayI8Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + auto array_raw = request->array(); + auto array = std::vector(); + array.reserve(array_raw.size()); + std::transform( array_raw.begin(), array_raw.end(), std::back_inserter(array), [](auto x) { - if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { - std::string message("value "); - message.append(std::to_string(x)); - message.append(" doesn't fit in datatype "); - message.append("int8_t"); - throw nidevice_grpc::ValueOutOfRangeException(message); - } - return static_cast(x); + if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { + std::string message("value "); + message.append(std::to_string(x)); + message.append(" doesn't fit in datatype "); + message.append("int8_t"); + throw nidevice_grpc::ValueOutOfRangeException(message); + } + return static_cast(x); }); - size_t size = static_cast(request->array().size()); - auto status = library_->WriteArrayI8(session, control, array.data(), size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + size_t size = static_cast(request->array().size()); + auto status = library_->WriteArrayI8(session, control, array.data(), size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::BeginWriteArrayI8(::grpc::ServerContext* context, const BeginWriteArrayI8Request* request, BeginWriteArrayI8Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - - auto data = std::make_unique(); - data->session = session; - data->control = control; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayI8", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::BeginWriteArrayI8(::grpc::ServerContext* context, const BeginWriteArrayI8Request* request, BeginWriteArrayI8Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + + auto data = std::make_unique(); + data->session = session; + data->control = control; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayI8", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::WriteArraySgl(::grpc::ServerContext* context, const WriteArraySglRequest* request, WriteArraySglResponse* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - auto array = const_cast(request->array().data()); - size_t size = static_cast(request->array().size()); - auto status = library_->WriteArraySgl(session, control, array, size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::WriteArraySgl(::grpc::ServerContext* context, const WriteArraySglRequest* request, WriteArraySglResponse* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + auto array = const_cast(request->array().data()); + size_t size = static_cast(request->array().size()); + auto status = library_->WriteArraySgl(session, control, array, size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::BeginWriteArraySgl(::grpc::ServerContext* context, const BeginWriteArraySglRequest* request, BeginWriteArraySglResponse* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - - auto data = std::make_unique(); - data->session = session; - data->control = control; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArraySgl", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::BeginWriteArraySgl(::grpc::ServerContext* context, const BeginWriteArraySglRequest* request, BeginWriteArraySglResponse* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + + auto data = std::make_unique(); + data->session = session; + data->control = control; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArraySgl", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::WriteArrayU16(::grpc::ServerContext* context, const WriteArrayU16Request* request, WriteArrayU16Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - auto array_raw = request->array(); - auto array = std::vector(); - array.reserve(array_raw.size()); - std::transform( +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::WriteArrayU16(::grpc::ServerContext* context, const WriteArrayU16Request* request, WriteArrayU16Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + auto array_raw = request->array(); + auto array = std::vector(); + array.reserve(array_raw.size()); + std::transform( array_raw.begin(), array_raw.end(), std::back_inserter(array), [](auto x) { - if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { - std::string message("value "); - message.append(std::to_string(x)); - message.append(" doesn't fit in datatype "); - message.append("uint16_t"); - throw nidevice_grpc::ValueOutOfRangeException(message); - } - return static_cast(x); + if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { + std::string message("value "); + message.append(std::to_string(x)); + message.append(" doesn't fit in datatype "); + message.append("uint16_t"); + throw nidevice_grpc::ValueOutOfRangeException(message); + } + return static_cast(x); }); - size_t size = static_cast(request->array().size()); - auto status = library_->WriteArrayU16(session, control, array.data(), size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + size_t size = static_cast(request->array().size()); + auto status = library_->WriteArrayU16(session, control, array.data(), size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::BeginWriteArrayU16(::grpc::ServerContext* context, const BeginWriteArrayU16Request* request, BeginWriteArrayU16Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - - auto data = std::make_unique(); - data->session = session; - data->control = control; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayU16", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::BeginWriteArrayU16(::grpc::ServerContext* context, const BeginWriteArrayU16Request* request, BeginWriteArrayU16Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + + auto data = std::make_unique(); + data->session = session; + data->control = control; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayU16", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::WriteArrayU32(::grpc::ServerContext* context, const WriteArrayU32Request* request, WriteArrayU32Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - auto array = const_cast(request->array().data()); - size_t size = static_cast(request->array().size()); - auto status = library_->WriteArrayU32(session, control, array, size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::WriteArrayU32(::grpc::ServerContext* context, const WriteArrayU32Request* request, WriteArrayU32Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + auto array = const_cast(request->array().data()); + size_t size = static_cast(request->array().size()); + auto status = library_->WriteArrayU32(session, control, array, size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::BeginWriteArrayU32(::grpc::ServerContext* context, const BeginWriteArrayU32Request* request, BeginWriteArrayU32Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - - auto data = std::make_unique(); - data->session = session; - data->control = control; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayU32", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::BeginWriteArrayU32(::grpc::ServerContext* context, const BeginWriteArrayU32Request* request, BeginWriteArrayU32Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + + auto data = std::make_unique(); + data->session = session; + data->control = control; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayU32", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::WriteArrayU64(::grpc::ServerContext* context, const WriteArrayU64Request* request, WriteArrayU64Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - auto array = const_cast(request->array().data()); - size_t size = static_cast(request->array().size()); - auto status = library_->WriteArrayU64(session, control, array, size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::WriteArrayU64(::grpc::ServerContext* context, const WriteArrayU64Request* request, WriteArrayU64Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + auto array = const_cast(request->array().data()); + size_t size = static_cast(request->array().size()); + auto status = library_->WriteArrayU64(session, control, array, size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::BeginWriteArrayU64(::grpc::ServerContext* context, const BeginWriteArrayU64Request* request, BeginWriteArrayU64Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - - auto data = std::make_unique(); - data->session = session; - data->control = control; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayU64", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::BeginWriteArrayU64(::grpc::ServerContext* context, const BeginWriteArrayU64Request* request, BeginWriteArrayU64Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + + auto data = std::make_unique(); + data->session = session; + data->control = control; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayU64", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::WriteArrayU8(::grpc::ServerContext* context, const WriteArrayU8Request* request, WriteArrayU8Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - auto array_raw = request->array(); - auto array = std::vector(); - array.reserve(array_raw.size()); - std::transform( +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::WriteArrayU8(::grpc::ServerContext* context, const WriteArrayU8Request* request, WriteArrayU8Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + auto array_raw = request->array(); + auto array = std::vector(); + array.reserve(array_raw.size()); + std::transform( array_raw.begin(), array_raw.end(), std::back_inserter(array), [](auto x) { - if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { - std::string message("value "); - message.append(std::to_string(x)); - message.append(" doesn't fit in datatype "); - message.append("uint8_t"); - throw nidevice_grpc::ValueOutOfRangeException(message); - } - return static_cast(x); + if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { + std::string message("value "); + message.append(std::to_string(x)); + message.append(" doesn't fit in datatype "); + message.append("uint8_t"); + throw nidevice_grpc::ValueOutOfRangeException(message); + } + return static_cast(x); }); - size_t size = static_cast(request->array().size()); - auto status = library_->WriteArrayU8(session, control, array.data(), size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + size_t size = static_cast(request->array().size()); + auto status = library_->WriteArrayU8(session, control, array.data(), size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::BeginWriteArrayU8(::grpc::ServerContext* context, const BeginWriteArrayU8Request* request, BeginWriteArrayU8Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - - auto data = std::make_unique(); - data->session = session; - data->control = control; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayU8", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::BeginWriteArrayU8(::grpc::ServerContext* context, const BeginWriteArrayU8Request* request, BeginWriteArrayU8Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + + auto data = std::make_unique(); + data->session = session; + data->control = control; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayU8", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::WriteBool(::grpc::ServerContext* context, const WriteBoolRequest* request, WriteBoolResponse* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - NiFpga_Bool value = request->value(); - auto status = library_->WriteBool(session, control, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::WriteBool(::grpc::ServerContext* context, const WriteBoolRequest* request, WriteBoolResponse* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + NiFpga_Bool value = request->value(); + auto status = library_->WriteBool(session, control, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::BeginWriteBool(::grpc::ServerContext* context, const BeginWriteBoolRequest* request, BeginWriteBoolResponse* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - - auto data = std::make_unique(); - data->session = session; - data->control = control; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteBool", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::BeginWriteBool(::grpc::ServerContext* context, const BeginWriteBoolRequest* request, BeginWriteBoolResponse* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + + auto data = std::make_unique(); + data->session = session; + data->control = control; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteBool", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::WriteDbl(::grpc::ServerContext* context, const WriteDblRequest* request, WriteDblResponse* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - double value = request->value(); - auto status = library_->WriteDbl(session, control, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::WriteDbl(::grpc::ServerContext* context, const WriteDblRequest* request, WriteDblResponse* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + double value = request->value(); + auto status = library_->WriteDbl(session, control, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::BeginWriteDbl(::grpc::ServerContext* context, const BeginWriteDblRequest* request, BeginWriteDblResponse* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - - auto data = std::make_unique(); - data->session = session; - data->control = control; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteDbl", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::BeginWriteDbl(::grpc::ServerContext* context, const BeginWriteDblRequest* request, BeginWriteDblResponse* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + + auto data = std::make_unique(); + data->session = session; + data->control = control; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteDbl", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::WriteFifoBool(::grpc::ServerContext* context, const WriteFifoBoolRequest* request, WriteFifoBoolResponse* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - auto data = convert_from_grpc(request->data()); - size_t number_of_elements = static_cast(request->data().size()); - uint32_t timeout = request->timeout(); - size_t empty_elements_remaining {}; - auto status = library_->WriteFifoBool(session, fifo, data.data(), number_of_elements, timeout, &empty_elements_remaining); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_empty_elements_remaining(empty_elements_remaining); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::WriteFifoBool(::grpc::ServerContext* context, const WriteFifoBoolRequest* request, WriteFifoBoolResponse* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + auto data = convert_from_grpc(request->data()); + size_t number_of_elements = static_cast(request->data().size()); + uint32_t timeout = request->timeout(); + size_t empty_elements_remaining{}; + auto status = library_->WriteFifoBool(session, fifo, data.data(), number_of_elements, timeout, &empty_elements_remaining); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_empty_elements_remaining(empty_elements_remaining); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::WriteFifoDbl(::grpc::ServerContext* context, const WriteFifoDblRequest* request, WriteFifoDblResponse* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - auto data = const_cast(request->data().data()); - size_t number_of_elements = static_cast(request->data().size()); - uint32_t timeout = request->timeout(); - size_t empty_elements_remaining {}; - auto status = library_->WriteFifoDbl(session, fifo, data, number_of_elements, timeout, &empty_elements_remaining); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_empty_elements_remaining(empty_elements_remaining); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::WriteFifoDbl(::grpc::ServerContext* context, const WriteFifoDblRequest* request, WriteFifoDblResponse* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + auto data = const_cast(request->data().data()); + size_t number_of_elements = static_cast(request->data().size()); + uint32_t timeout = request->timeout(); + size_t empty_elements_remaining{}; + auto status = library_->WriteFifoDbl(session, fifo, data, number_of_elements, timeout, &empty_elements_remaining); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_empty_elements_remaining(empty_elements_remaining); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::WriteFifoI16(::grpc::ServerContext* context, const WriteFifoI16Request* request, WriteFifoI16Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - auto data_raw = request->data(); - auto data = std::vector(); - data.reserve(data_raw.size()); - std::transform( +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::WriteFifoI16(::grpc::ServerContext* context, const WriteFifoI16Request* request, WriteFifoI16Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + auto data_raw = request->data(); + auto data = std::vector(); + data.reserve(data_raw.size()); + std::transform( data_raw.begin(), data_raw.end(), std::back_inserter(data), [](auto x) { - if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { - std::string message("value "); - message.append(std::to_string(x)); - message.append(" doesn't fit in datatype "); - message.append("int16_t"); - throw nidevice_grpc::ValueOutOfRangeException(message); - } - return static_cast(x); + if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { + std::string message("value "); + message.append(std::to_string(x)); + message.append(" doesn't fit in datatype "); + message.append("int16_t"); + throw nidevice_grpc::ValueOutOfRangeException(message); + } + return static_cast(x); }); - size_t number_of_elements = static_cast(request->data().size()); - uint32_t timeout = request->timeout(); - size_t empty_elements_remaining {}; - auto status = library_->WriteFifoI16(session, fifo, data.data(), number_of_elements, timeout, &empty_elements_remaining); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_empty_elements_remaining(empty_elements_remaining); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + size_t number_of_elements = static_cast(request->data().size()); + uint32_t timeout = request->timeout(); + size_t empty_elements_remaining{}; + auto status = library_->WriteFifoI16(session, fifo, data.data(), number_of_elements, timeout, &empty_elements_remaining); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); } + response->set_status(status); + response->set_empty_elements_remaining(empty_elements_remaining); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::WriteFifoI32(::grpc::ServerContext* context, const WriteFifoI32Request* request, WriteFifoI32Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - auto data = const_cast(request->data().data()); - size_t number_of_elements = static_cast(request->data().size()); - uint32_t timeout = request->timeout(); - size_t empty_elements_remaining {}; - auto status = library_->WriteFifoI32(session, fifo, data, number_of_elements, timeout, &empty_elements_remaining); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_empty_elements_remaining(empty_elements_remaining); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::WriteFifoI32(::grpc::ServerContext* context, const WriteFifoI32Request* request, WriteFifoI32Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + auto data = const_cast(request->data().data()); + size_t number_of_elements = static_cast(request->data().size()); + uint32_t timeout = request->timeout(); + size_t empty_elements_remaining{}; + auto status = library_->WriteFifoI32(session, fifo, data, number_of_elements, timeout, &empty_elements_remaining); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_empty_elements_remaining(empty_elements_remaining); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::WriteFifoI64(::grpc::ServerContext* context, const WriteFifoI64Request* request, WriteFifoI64Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - auto data = const_cast(request->data().data()); - size_t number_of_elements = static_cast(request->data().size()); - uint32_t timeout = request->timeout(); - size_t empty_elements_remaining {}; - auto status = library_->WriteFifoI64(session, fifo, data, number_of_elements, timeout, &empty_elements_remaining); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_empty_elements_remaining(empty_elements_remaining); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::WriteFifoI64(::grpc::ServerContext* context, const WriteFifoI64Request* request, WriteFifoI64Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + auto data = const_cast(request->data().data()); + size_t number_of_elements = static_cast(request->data().size()); + uint32_t timeout = request->timeout(); + size_t empty_elements_remaining{}; + auto status = library_->WriteFifoI64(session, fifo, data, number_of_elements, timeout, &empty_elements_remaining); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_empty_elements_remaining(empty_elements_remaining); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::WriteFifoI8(::grpc::ServerContext* context, const WriteFifoI8Request* request, WriteFifoI8Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - auto data_raw = request->data(); - auto data = std::vector(); - data.reserve(data_raw.size()); - std::transform( +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::WriteFifoI8(::grpc::ServerContext* context, const WriteFifoI8Request* request, WriteFifoI8Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + auto data_raw = request->data(); + auto data = std::vector(); + data.reserve(data_raw.size()); + std::transform( data_raw.begin(), data_raw.end(), std::back_inserter(data), [](auto x) { - if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { - std::string message("value "); - message.append(std::to_string(x)); - message.append(" doesn't fit in datatype "); - message.append("int8_t"); - throw nidevice_grpc::ValueOutOfRangeException(message); - } - return static_cast(x); + if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { + std::string message("value "); + message.append(std::to_string(x)); + message.append(" doesn't fit in datatype "); + message.append("int8_t"); + throw nidevice_grpc::ValueOutOfRangeException(message); + } + return static_cast(x); }); - size_t number_of_elements = static_cast(request->data().size()); - uint32_t timeout = request->timeout(); - size_t empty_elements_remaining {}; - auto status = library_->WriteFifoI8(session, fifo, data.data(), number_of_elements, timeout, &empty_elements_remaining); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_empty_elements_remaining(empty_elements_remaining); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + size_t number_of_elements = static_cast(request->data().size()); + uint32_t timeout = request->timeout(); + size_t empty_elements_remaining{}; + auto status = library_->WriteFifoI8(session, fifo, data.data(), number_of_elements, timeout, &empty_elements_remaining); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); } + response->set_status(status); + response->set_empty_elements_remaining(empty_elements_remaining); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::WriteFifoSgl(::grpc::ServerContext* context, const WriteFifoSglRequest* request, WriteFifoSglResponse* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - auto data = const_cast(request->data().data()); - size_t number_of_elements = static_cast(request->data().size()); - uint32_t timeout = request->timeout(); - size_t empty_elements_remaining {}; - auto status = library_->WriteFifoSgl(session, fifo, data, number_of_elements, timeout, &empty_elements_remaining); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_empty_elements_remaining(empty_elements_remaining); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::WriteFifoSgl(::grpc::ServerContext* context, const WriteFifoSglRequest* request, WriteFifoSglResponse* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + auto data = const_cast(request->data().data()); + size_t number_of_elements = static_cast(request->data().size()); + uint32_t timeout = request->timeout(); + size_t empty_elements_remaining{}; + auto status = library_->WriteFifoSgl(session, fifo, data, number_of_elements, timeout, &empty_elements_remaining); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_empty_elements_remaining(empty_elements_remaining); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::WriteFifoU16(::grpc::ServerContext* context, const WriteFifoU16Request* request, WriteFifoU16Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - auto data_raw = request->data(); - auto data = std::vector(); - data.reserve(data_raw.size()); - std::transform( +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::WriteFifoU16(::grpc::ServerContext* context, const WriteFifoU16Request* request, WriteFifoU16Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + auto data_raw = request->data(); + auto data = std::vector(); + data.reserve(data_raw.size()); + std::transform( data_raw.begin(), data_raw.end(), std::back_inserter(data), [](auto x) { - if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { - std::string message("value "); - message.append(std::to_string(x)); - message.append(" doesn't fit in datatype "); - message.append("uint16_t"); - throw nidevice_grpc::ValueOutOfRangeException(message); - } - return static_cast(x); + if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { + std::string message("value "); + message.append(std::to_string(x)); + message.append(" doesn't fit in datatype "); + message.append("uint16_t"); + throw nidevice_grpc::ValueOutOfRangeException(message); + } + return static_cast(x); }); - size_t number_of_elements = static_cast(request->data().size()); - uint32_t timeout = request->timeout(); - size_t empty_elements_remaining {}; - auto status = library_->WriteFifoU16(session, fifo, data.data(), number_of_elements, timeout, &empty_elements_remaining); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_empty_elements_remaining(empty_elements_remaining); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + size_t number_of_elements = static_cast(request->data().size()); + uint32_t timeout = request->timeout(); + size_t empty_elements_remaining{}; + auto status = library_->WriteFifoU16(session, fifo, data.data(), number_of_elements, timeout, &empty_elements_remaining); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); } + response->set_status(status); + response->set_empty_elements_remaining(empty_elements_remaining); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::WriteFifoU32(::grpc::ServerContext* context, const WriteFifoU32Request* request, WriteFifoU32Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - auto data = const_cast(request->data().data()); - size_t number_of_elements = static_cast(request->data().size()); - uint32_t timeout = request->timeout(); - size_t empty_elements_remaining {}; - auto status = library_->WriteFifoU32(session, fifo, data, number_of_elements, timeout, &empty_elements_remaining); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_empty_elements_remaining(empty_elements_remaining); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::WriteFifoU32(::grpc::ServerContext* context, const WriteFifoU32Request* request, WriteFifoU32Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + auto data = const_cast(request->data().data()); + size_t number_of_elements = static_cast(request->data().size()); + uint32_t timeout = request->timeout(); + size_t empty_elements_remaining{}; + auto status = library_->WriteFifoU32(session, fifo, data, number_of_elements, timeout, &empty_elements_remaining); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_empty_elements_remaining(empty_elements_remaining); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::WriteFifoU64(::grpc::ServerContext* context, const WriteFifoU64Request* request, WriteFifoU64Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - auto data = const_cast(request->data().data()); - size_t number_of_elements = static_cast(request->data().size()); - uint32_t timeout = request->timeout(); - size_t empty_elements_remaining {}; - auto status = library_->WriteFifoU64(session, fifo, data, number_of_elements, timeout, &empty_elements_remaining); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_empty_elements_remaining(empty_elements_remaining); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::WriteFifoU64(::grpc::ServerContext* context, const WriteFifoU64Request* request, WriteFifoU64Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + auto data = const_cast(request->data().data()); + size_t number_of_elements = static_cast(request->data().size()); + uint32_t timeout = request->timeout(); + size_t empty_elements_remaining{}; + auto status = library_->WriteFifoU64(session, fifo, data, number_of_elements, timeout, &empty_elements_remaining); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_empty_elements_remaining(empty_elements_remaining); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::WriteFifoU8(::grpc::ServerContext* context, const WriteFifoU8Request* request, WriteFifoU8Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - auto data_raw = request->data(); - auto data = std::vector(); - data.reserve(data_raw.size()); - std::transform( +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::WriteFifoU8(::grpc::ServerContext* context, const WriteFifoU8Request* request, WriteFifoU8Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + auto data_raw = request->data(); + auto data = std::vector(); + data.reserve(data_raw.size()); + std::transform( data_raw.begin(), data_raw.end(), std::back_inserter(data), [](auto x) { - if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { - std::string message("value "); - message.append(std::to_string(x)); - message.append(" doesn't fit in datatype "); - message.append("uint8_t"); - throw nidevice_grpc::ValueOutOfRangeException(message); - } - return static_cast(x); + if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { + std::string message("value "); + message.append(std::to_string(x)); + message.append(" doesn't fit in datatype "); + message.append("uint8_t"); + throw nidevice_grpc::ValueOutOfRangeException(message); + } + return static_cast(x); }); - size_t number_of_elements = static_cast(request->data().size()); - uint32_t timeout = request->timeout(); - size_t empty_elements_remaining {}; - auto status = library_->WriteFifoU8(session, fifo, data.data(), number_of_elements, timeout, &empty_elements_remaining); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_empty_elements_remaining(empty_elements_remaining); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + size_t number_of_elements = static_cast(request->data().size()); + uint32_t timeout = request->timeout(); + size_t empty_elements_remaining{}; + auto status = library_->WriteFifoU8(session, fifo, data.data(), number_of_elements, timeout, &empty_elements_remaining); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); } + response->set_status(status); + response->set_empty_elements_remaining(empty_elements_remaining); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::WriteI16(::grpc::ServerContext* context, const WriteI16Request* request, WriteI16Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::WriteI16(::grpc::ServerContext* context, const WriteI16Request* request, WriteI16Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + auto value_raw = request->value(); + if (value_raw < std::numeric_limits::min() || value_raw > std::numeric_limits::max()) { + std::string message("value "); + message.append(std::to_string(value_raw)); + message.append(" doesn't fit in datatype "); + message.append("int16_t"); + throw nidevice_grpc::ValueOutOfRangeException(message); } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - auto value_raw = request->value(); - if (value_raw < std::numeric_limits::min() || value_raw > std::numeric_limits::max()) { - std::string message("value "); - message.append(std::to_string(value_raw)); - message.append(" doesn't fit in datatype "); - message.append("int16_t"); - throw nidevice_grpc::ValueOutOfRangeException(message); - } - auto value = static_cast(value_raw); + auto value = static_cast(value_raw); - auto status = library_->WriteI16(session, control, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + auto status = library_->WriteI16(session, control, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::BeginWriteI16(::grpc::ServerContext* context, const BeginWriteI16Request* request, BeginWriteI16Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - - auto data = std::make_unique(); - data->session = session; - data->control = control; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteI16", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::BeginWriteI16(::grpc::ServerContext* context, const BeginWriteI16Request* request, BeginWriteI16Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + + auto data = std::make_unique(); + data->session = session; + data->control = control; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteI16", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::WriteI32(::grpc::ServerContext* context, const WriteI32Request* request, WriteI32Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - int32_t value = request->value(); - auto status = library_->WriteI32(session, control, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::WriteI32(::grpc::ServerContext* context, const WriteI32Request* request, WriteI32Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + int32_t value = request->value(); + auto status = library_->WriteI32(session, control, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::BeginWriteI32(::grpc::ServerContext* context, const BeginWriteI32Request* request, BeginWriteI32Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - - auto data = std::make_unique(); - data->session = session; - data->control = control; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteI32", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::BeginWriteI32(::grpc::ServerContext* context, const BeginWriteI32Request* request, BeginWriteI32Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + + auto data = std::make_unique(); + data->session = session; + data->control = control; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteI32", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::WriteI64(::grpc::ServerContext* context, const WriteI64Request* request, WriteI64Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - int64_t value = request->value(); - auto status = library_->WriteI64(session, control, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::WriteI64(::grpc::ServerContext* context, const WriteI64Request* request, WriteI64Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + int64_t value = request->value(); + auto status = library_->WriteI64(session, control, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::BeginWriteI64(::grpc::ServerContext* context, const BeginWriteI64Request* request, BeginWriteI64Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - - auto data = std::make_unique(); - data->session = session; - data->control = control; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteI64", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::BeginWriteI64(::grpc::ServerContext* context, const BeginWriteI64Request* request, BeginWriteI64Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + + auto data = std::make_unique(); + data->session = session; + data->control = control; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteI64", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::WriteI8(::grpc::ServerContext* context, const WriteI8Request* request, WriteI8Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::WriteI8(::grpc::ServerContext* context, const WriteI8Request* request, WriteI8Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + auto value_raw = request->value(); + if (value_raw < std::numeric_limits::min() || value_raw > std::numeric_limits::max()) { + std::string message("value "); + message.append(std::to_string(value_raw)); + message.append(" doesn't fit in datatype "); + message.append("int8_t"); + throw nidevice_grpc::ValueOutOfRangeException(message); } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - auto value_raw = request->value(); - if (value_raw < std::numeric_limits::min() || value_raw > std::numeric_limits::max()) { - std::string message("value "); - message.append(std::to_string(value_raw)); - message.append(" doesn't fit in datatype "); - message.append("int8_t"); - throw nidevice_grpc::ValueOutOfRangeException(message); - } - auto value = static_cast(value_raw); + auto value = static_cast(value_raw); - auto status = library_->WriteI8(session, control, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + auto status = library_->WriteI8(session, control, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::BeginWriteI8(::grpc::ServerContext* context, const BeginWriteI8Request* request, BeginWriteI8Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - - auto data = std::make_unique(); - data->session = session; - data->control = control; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteI8", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::BeginWriteI8(::grpc::ServerContext* context, const BeginWriteI8Request* request, BeginWriteI8Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + + auto data = std::make_unique(); + data->session = session; + data->control = control; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteI8", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::WriteSgl(::grpc::ServerContext* context, const WriteSglRequest* request, WriteSglResponse* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - float value = request->value(); - auto status = library_->WriteSgl(session, control, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::WriteSgl(::grpc::ServerContext* context, const WriteSglRequest* request, WriteSglResponse* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + float value = request->value(); + auto status = library_->WriteSgl(session, control, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::BeginWriteSgl(::grpc::ServerContext* context, const BeginWriteSglRequest* request, BeginWriteSglResponse* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - - auto data = std::make_unique(); - data->session = session; - data->control = control; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteSgl", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::BeginWriteSgl(::grpc::ServerContext* context, const BeginWriteSglRequest* request, BeginWriteSglResponse* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + + auto data = std::make_unique(); + data->session = session; + data->control = control; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteSgl", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::WriteU16(::grpc::ServerContext* context, const WriteU16Request* request, WriteU16Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::WriteU16(::grpc::ServerContext* context, const WriteU16Request* request, WriteU16Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + auto value_raw = request->value(); + if (value_raw < std::numeric_limits::min() || value_raw > std::numeric_limits::max()) { + std::string message("value "); + message.append(std::to_string(value_raw)); + message.append(" doesn't fit in datatype "); + message.append("uint16_t"); + throw nidevice_grpc::ValueOutOfRangeException(message); } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - auto value_raw = request->value(); - if (value_raw < std::numeric_limits::min() || value_raw > std::numeric_limits::max()) { - std::string message("value "); - message.append(std::to_string(value_raw)); - message.append(" doesn't fit in datatype "); - message.append("uint16_t"); - throw nidevice_grpc::ValueOutOfRangeException(message); - } - auto value = static_cast(value_raw); + auto value = static_cast(value_raw); - auto status = library_->WriteU16(session, control, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + auto status = library_->WriteU16(session, control, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::BeginWriteU16(::grpc::ServerContext* context, const BeginWriteU16Request* request, BeginWriteU16Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - - auto data = std::make_unique(); - data->session = session; - data->control = control; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteU16", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::BeginWriteU16(::grpc::ServerContext* context, const BeginWriteU16Request* request, BeginWriteU16Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + + auto data = std::make_unique(); + data->session = session; + data->control = control; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteU16", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::WriteU32(::grpc::ServerContext* context, const WriteU32Request* request, WriteU32Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - uint32_t value = request->value(); - auto status = library_->WriteU32(session, control, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::WriteU32(::grpc::ServerContext* context, const WriteU32Request* request, WriteU32Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + uint32_t value = request->value(); + auto status = library_->WriteU32(session, control, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::BeginWriteU32(::grpc::ServerContext* context, const BeginWriteU32Request* request, BeginWriteU32Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - - auto data = std::make_unique(); - data->session = session; - data->control = control; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteU32", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::BeginWriteU32(::grpc::ServerContext* context, const BeginWriteU32Request* request, BeginWriteU32Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + + auto data = std::make_unique(); + data->session = session; + data->control = control; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteU32", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::WriteU64(::grpc::ServerContext* context, const WriteU64Request* request, WriteU64Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - uint64_t value = request->value(); - auto status = library_->WriteU64(session, control, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::WriteU64(::grpc::ServerContext* context, const WriteU64Request* request, WriteU64Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + uint64_t value = request->value(); + auto status = library_->WriteU64(session, control, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::BeginWriteU64(::grpc::ServerContext* context, const BeginWriteU64Request* request, BeginWriteU64Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - - auto data = std::make_unique(); - data->session = session; - data->control = control; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteU64", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::BeginWriteU64(::grpc::ServerContext* context, const BeginWriteU64Request* request, BeginWriteU64Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + + auto data = std::make_unique(); + data->session = session; + data->control = control; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteU64", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::WriteU8(::grpc::ServerContext* context, const WriteU8Request* request, WriteU8Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::WriteU8(::grpc::ServerContext* context, const WriteU8Request* request, WriteU8Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + auto value_raw = request->value(); + if (value_raw < std::numeric_limits::min() || value_raw > std::numeric_limits::max()) { + std::string message("value "); + message.append(std::to_string(value_raw)); + message.append(" doesn't fit in datatype "); + message.append("uint8_t"); + throw nidevice_grpc::ValueOutOfRangeException(message); } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - auto value_raw = request->value(); - if (value_raw < std::numeric_limits::min() || value_raw > std::numeric_limits::max()) { - std::string message("value "); - message.append(std::to_string(value_raw)); - message.append(" doesn't fit in datatype "); - message.append("uint8_t"); - throw nidevice_grpc::ValueOutOfRangeException(message); - } - auto value = static_cast(value_raw); + auto value = static_cast(value_raw); - auto status = library_->WriteU8(session, control, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + auto status = library_->WriteU8(session, control, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); } + response->set_status(status); + return ::grpc::Status::OK; } - - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiFpgaService::BeginWriteU8(::grpc::ServerContext* context, const BeginWriteU8Request* request, BeginWriteU8Response* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - - auto data = std::make_unique(); - data->session = session; - data->control = control; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteU8", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } +} +//--------------------------------------------------------------------- +//--------------------------------------------------------------------- +::grpc::Status NiFpgaService::BeginWriteU8(::grpc::ServerContext* context, const BeginWriteU8Request* request, BeginWriteU8Response* response) +{ + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + + auto data = std::make_unique(); + data->session = session; + data->control = control; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteU8", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } +} - NiFpgaFeatureToggles::NiFpgaFeatureToggles( +NiFpgaFeatureToggles::NiFpgaFeatureToggles( const nidevice_grpc::FeatureToggles& feature_toggles) : is_enabled( - feature_toggles.is_feature_enabled("nifpga", CodeReadiness::kRelease)) - { - } -} // namespace nifpga_grpc - + feature_toggles.is_feature_enabled("nifpga", CodeReadiness::kRelease)) +{ +} +} // namespace nifpga_grpc diff --git a/source/codegen/templates/service.cpp.mako b/source/codegen/templates/service.cpp.mako index ba25d7cde..58340062e 100644 --- a/source/codegen/templates/service.cpp.mako +++ b/source/codegen/templates/service.cpp.mako @@ -118,12 +118,11 @@ ${mako_helper.define_moniker_streaming_struct(function_name=function_name, param ${mako_helper.register_moniker_functions(function_name)}\ % endfor } + % endif % for function_name in streaming_functions_to_generate: -<% -function_data = functions[function_name] -%> -${mako_helper.define_moniker_function_body(function_name=function_name, function_data=function_data)}\ +${mako_helper.define_moniker_function_body(function_name=function_name, functions=functions)}\ + % endfor % for function_name in service_helpers.filter_proto_rpc_functions_to_generate(functions): <% diff --git a/source/codegen/templates/service_helpers.mako b/source/codegen/templates/service_helpers.mako index 90ed1921b..60b5b39a8 100644 --- a/source/codegen/templates/service_helpers.mako +++ b/source/codegen/templates/service_helpers.mako @@ -281,9 +281,7 @@ ${populate_response(function_data=function_data, parameters=parameters)}\ <%def name="define_moniker_streaming_struct(function_name, parameters)">\ <% config = data['config'] - streaming_param = common_helpers.get_first_streaming_parameter(parameters) service_class_prefix = config["service_class_prefix"] - grpc_streaming_type = streaming_param['grpc_streaming_type'] struct_name = common_helpers.get_data_moniker_struct_name(function_name) request_response_data_type = common_helpers.get_data_moniker_request_response_data_type(function_name) streaming_params_to_include = common_helpers.get_input_streaming_params(parameters) @@ -304,11 +302,13 @@ ${populate_response(function_data=function_data, parameters=parameters)}\ }; -<%def name="define_moniker_function_body(function_name, function_data)">\ +<%def name="define_moniker_function_body(function_name, functions)">\ <% config = data['config'] + function_data = functions[function_name] struct_name = common_helpers.get_data_moniker_struct_name(function_name) moniker_function_name = common_helpers.get_data_moniker_function_name(function_name) + non_streaming_function_name = function_name.replace("Begin", "") streaming_param = common_helpers.get_first_streaming_parameter(function_data['parameters']) streaming_type = streaming_param['type'] grpc_streaming_type = streaming_param['grpc_streaming_type'] @@ -317,22 +317,35 @@ ${populate_response(function_data=function_data, parameters=parameters)}\ data_type = streaming_type.replace("[]", "") c_api_name = service_helpers.get_c_api_name(function_name) streaming_params_to_include = common_helpers.get_input_streaming_params(function_data['parameters']) - output_params_to_define = service_helpers.get_output_streaming_params_to_define(function_data['parameters'], streaming_param) + output_parameters = [p for p in functions[non_streaming_function_name]['parameters'] if common_helpers.is_output_parameter(p)] + output_params_to_define = service_helpers.get_output_streaming_params_to_define(function_data['parameters'], streaming_param) # TODO duplicate? %>\ ::grpc::Status ${moniker_function_name}(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { ${struct_name}* function_data = static_cast<${struct_name}*>(data); - auto library = function_data->library;\ + auto library = function_data->library; + auto response = function_data->data.mutable_response();\ ${initialize_moniker_input_parameters(streaming_params_to_include)}\ ${initialize_moniker_output_parameters(output_params_to_define)}\ % if streaming_param and streaming_param['direction'] == 'in': ${streaming_handle_in_direction(c_api_name, arg_string, data_type, grpc_streaming_type, streaming_type, streaming_param)}\ % elif streaming_param and streaming_param['direction'] == 'out': - ${streaming_handle_out_direction(c_api_name, arg_string, data_type, streaming_type, streaming_param, moniker_params)}\ + ${streaming_handle_out_direction(c_api_name, arg_string, data_type, streaming_param, moniker_params)}\ % endif - if (status < 0) { - std::cout << "${moniker_function_name} error: " << status << std::endl; + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; +${populate_response(function_data=function_data, parameters=functions[non_streaming_function_name]['parameters'])}\ + */ +% if streaming_param['direction'] == 'out': + if (status >= 0) + { + response->set_status(status); +<%block filter="common_helpers.indent(-1)">\ +${set_response_values(output_parameters=output_parameters, init_method=false)}\ +\ + packedData.PackFrom(function_data->data); } +% endif return ::grpc::Status::OK; } @@ -350,7 +363,7 @@ ${initialize_moniker_output_parameters(output_params_to_define)}\ streaming_params_to_include = common_helpers.get_input_streaming_params(parameters) %>\ ${initialize_streaming_input_param(function_name, streaming_params_to_include, parameters, streaming_param)} - auto data = std::make_unique<${struct_name}>();\ + auto data = std::make_unique<${struct_name}>(); ${initialize_begin_input_params(streaming_params_to_include, streaming_param)}\ data->library = std::shared_ptr<${service_class_prefix}LibraryInterface>(library_); ${initialize_service_output_params(output_params, streaming_param)}\ @@ -361,14 +374,14 @@ ${initialize_streaming_input_param(function_name, streaming_params_to_include, p return ::grpc::Status::OK;\ -<%def name="streaming_handle_out_direction(c_api_name, arg_string, data_type, streaming_type, streaming_param, moniker_params)"> +<%def name="streaming_handle_out_direction(c_api_name, arg_string, data_type, streaming_param, moniker_params)"> <% - is_array = common_helpers.is_array(streaming_type) + is_array = common_helpers.is_array(streaming_param['type']) %>\ % if is_array: - ${streaming_handle_out_direction_array(c_api_name, arg_string, data_type, streaming_param)} +${streaming_handle_out_direction_array(c_api_name, arg_string, data_type, streaming_param)} % else: - ${streaming_handle_out_direction_scaler(c_api_name, arg_string, streaming_param)} +${streaming_handle_out_direction_scaler(c_api_name, arg_string, streaming_param, moniker_params)} % endif @@ -376,46 +389,31 @@ ${initialize_streaming_input_param(function_name, streaming_params_to_include, p <% is_coerced = service_helpers.is_output_array_that_needs_coercion(streaming_param) size_param_name = service_helpers.get_size_param_name(streaming_param) - streaming_param_name = common_helpers.camel_to_snake(streaming_param['name']) + streaming_param_field_name = common_helpers.get_grpc_field_name(streaming_param) + streaming_param_name = common_helpers.camel_to_snake(streaming_param['name']) // TODO: duplicate after merge? underlying_param_type = common_helpers.get_underlying_type_name(streaming_param["type"]) %>\ % if common_helpers.supports_standard_copy_conversion_routines(streaming_param): -std::vector<${data_type}> ${streaming_param_name}(${size_param_name}, ${data_type}()); + std::vector<${data_type}> ${streaming_param_field_name}(${size_param_name}, ${data_type}()); % elif is_coerced: -std::vector<${data_type}> ${streaming_param_name}(${size_param_name}); + std::vector<${data_type}> ${streaming_param_field_name}(${size}); % elif common_helpers.is_driver_typedef_with_same_size_but_different_qualifiers(underlying_param_type): -function_data->data.mutable_value()->Resize(${size_param_name}, 0); - auto ${streaming_param_name} = reinterpret_cast<${underlying_param_type}*>(function_data->data.mutable_value()->mutable_data()); + response->mutable_${streaming_param_field_name}()->Resize(${size_param_name}, 0); + auto ${streaming_param_field_name} = reinterpret_cast<${underlying_param_type}*>(response->mutable_${streaming_param_field_name}()->mutable_data()); % else: -function_data->data.mutable_value()->Resize(${size_param_name}, 0); - auto ${streaming_param_name} = function_data->data.mutable_value()->mutable_data(); + response->mutable_${streaming_param_field_name}()->Resize(${size_param_name}, 0); + auto ${streaming_param_name} = response->mutable_${streaming_param_field_name}()->mutable_data(); % endif auto status = library->${c_api_name}(${arg_string}); - if (status >= 0) { -% if is_coerced or common_helpers.supports_standard_copy_conversion_routines(streaming_param): - std::transform( - ${streaming_param_name}.begin(), - ${streaming_param_name}.begin() + ${size_param_name}, - function_data->data.mutable_value()->begin(), - [&](auto x) { - return x; - }); -% endif - packedData.PackFrom(function_data->data); - } -<%def name="streaming_handle_out_direction_scaler(c_api_name, arg_string, streaming_param)">\ +<%def name="streaming_handle_out_direction_scaler(c_api_name, arg_string, streaming_param, moniker_params)">\ <% parameter_name = common_helpers.get_cpp_local_name(streaming_param) %>\ ${streaming_param['type']} ${parameter_name} {};\ auto status = library->${c_api_name}(${arg_string}); - function_data->data.set_value(${parameter_name}); - if (status >= 0) { - packedData.PackFrom(function_data->data); - } <%def name="streaming_handle_in_direction(c_api_name, arg_string, data_type, grpc_streaming_type, streaming_type, streaming_param)"> @@ -486,7 +484,7 @@ auto value = ${grpc_streaming_type.lower()}_message.value(); ## Initialize an bgin input parameter for an API call. -<%def name="initialize_begin_input_params(streaming_params_to_include, streaming_param)"> +<%def name="initialize_begin_input_params(streaming_params_to_include, streaming_param)">\ % for parameter in streaming_params_to_include: <% parameter_name = common_helpers.get_cpp_local_name(parameter) @@ -526,8 +524,11 @@ ${initialize_input_param(function_name, param, parameters)}\ %> % for param in output_params: % if common_helpers.is_array(param['type']): - data->data.mutable_value()->Reserve(request->${size_param_name}()); - data->data.mutable_value()->Resize(request->${size_param_name}(), 0); +<% + grpc_field_name = common_helpers.get_grpc_field_name(param) +%>\ + data->data.mutable_response()->mutable_${grpc_field_name}()->Reserve(request->${size_param_name}()); + data->data.mutable_response()->mutable_${grpc_field_name}()->Resize(request->${size_param_name}(), 0); % endif % endfor From 4392afb3309456beb4a8e57ab7abf30a8c14ee03 Mon Sep 17 00:00:00 2001 From: Rohan Doshi Date: Tue, 19 Nov 2024 13:18:55 +0530 Subject: [PATCH 03/25] run codegen after resolving merge conflicts --- generated/nifpga/nifpga_service.cpp | 10064 +++++++++++++------------- 1 file changed, 5212 insertions(+), 4852 deletions(-) diff --git a/generated/nifpga/nifpga_service.cpp b/generated/nifpga/nifpga_service.cpp index 4d0171973..676e8050f 100644 --- a/generated/nifpga/nifpga_service.cpp +++ b/generated/nifpga/nifpga_service.cpp @@ -6,948 +6,1206 @@ //--------------------------------------------------------------------- #include "nifpga_service.h" -#include -#include - -#include +#include #include #include -#include +#include #include +#include +#include namespace nifpga_grpc { -using nidevice_grpc::converters::allocate_output_storage; -using nidevice_grpc::converters::calculate_linked_array_size; -using nidevice_grpc::converters::convert_from_grpc; -using nidevice_grpc::converters::convert_to_grpc; -using nidevice_grpc::converters::MatchState; - -struct MonikerReadArrayBoolData { - NiFpga_Session session; - uint32_t indicator; - size_t size; - nifpga_grpc::ReadArrayBoolStreamingData data; - std::shared_ptr library; -}; - -struct MonikerReadArrayDblData { - NiFpga_Session session; - uint32_t indicator; - size_t size; - nifpga_grpc::ReadArrayDblStreamingData data; - std::shared_ptr library; -}; - -struct MonikerReadArrayI16Data { - NiFpga_Session session; - uint32_t indicator; - size_t size; - nifpga_grpc::ReadArrayI16StreamingData data; - std::shared_ptr library; -}; - -struct MonikerReadArrayI32Data { - NiFpga_Session session; - uint32_t indicator; - size_t size; - nifpga_grpc::ReadArrayI32StreamingData data; - std::shared_ptr library; -}; - -struct MonikerReadArrayI64Data { - NiFpga_Session session; - uint32_t indicator; - size_t size; - nifpga_grpc::ReadArrayI64StreamingData data; - std::shared_ptr library; -}; - -struct MonikerReadArrayI8Data { - NiFpga_Session session; - uint32_t indicator; - size_t size; - nifpga_grpc::ReadArrayI8StreamingData data; - std::shared_ptr library; -}; - -struct MonikerReadArraySglData { - NiFpga_Session session; - uint32_t indicator; - size_t size; - nifpga_grpc::ReadArraySglStreamingData data; - std::shared_ptr library; -}; - -struct MonikerReadArrayU16Data { - NiFpga_Session session; - uint32_t indicator; - size_t size; - nifpga_grpc::ReadArrayU16StreamingData data; - std::shared_ptr library; -}; - -struct MonikerReadArrayU32Data { - NiFpga_Session session; - uint32_t indicator; - size_t size; - nifpga_grpc::ReadArrayU32StreamingData data; - std::shared_ptr library; -}; - -struct MonikerReadArrayU64Data { - NiFpga_Session session; - uint32_t indicator; - size_t size; - nifpga_grpc::ReadArrayU64StreamingData data; - std::shared_ptr library; -}; - -struct MonikerReadArrayU8Data { - NiFpga_Session session; - uint32_t indicator; - size_t size; - nifpga_grpc::ReadArrayU8StreamingData data; - std::shared_ptr library; -}; - -struct MonikerReadBoolData { - NiFpga_Session session; - uint32_t indicator; - nifpga_grpc::ReadBoolStreamingData data; - std::shared_ptr library; -}; - -struct MonikerReadDblData { - NiFpga_Session session; - uint32_t indicator; - nifpga_grpc::ReadDblStreamingData data; - std::shared_ptr library; -}; - -struct MonikerReadI16Data { - NiFpga_Session session; - uint32_t indicator; - nifpga_grpc::ReadI16StreamingData data; - std::shared_ptr library; -}; - -struct MonikerReadI32Data { - NiFpga_Session session; - uint32_t indicator; - nifpga_grpc::ReadI32StreamingData data; - std::shared_ptr library; -}; - -struct MonikerReadI64Data { - NiFpga_Session session; - uint32_t indicator; - nifpga_grpc::ReadI64StreamingData data; - std::shared_ptr library; -}; - -struct MonikerReadI8Data { - NiFpga_Session session; - uint32_t indicator; - nifpga_grpc::ReadI8StreamingData data; - std::shared_ptr library; -}; - -struct MonikerReadSglData { - NiFpga_Session session; - uint32_t indicator; - nifpga_grpc::ReadSglStreamingData data; - std::shared_ptr library; -}; - -struct MonikerReadU16Data { - NiFpga_Session session; - uint32_t indicator; - nifpga_grpc::ReadU16StreamingData data; - std::shared_ptr library; -}; - -struct MonikerReadU32Data { - NiFpga_Session session; - uint32_t indicator; - nifpga_grpc::ReadU32StreamingData data; - std::shared_ptr library; -}; - -struct MonikerReadU64Data { - NiFpga_Session session; - uint32_t indicator; - nifpga_grpc::ReadU64StreamingData data; - std::shared_ptr library; -}; - -struct MonikerReadU8Data { - NiFpga_Session session; - uint32_t indicator; - nifpga_grpc::ReadU8StreamingData data; - std::shared_ptr library; -}; - -struct MonikerWriteArrayBoolData { - NiFpga_Session session; - uint32_t control; - nifpga_grpc::WriteArrayBoolStreamingData data; - std::shared_ptr library; -}; - -struct MonikerWriteArrayDblData { - NiFpga_Session session; - uint32_t control; - nifpga_grpc::WriteArrayDblStreamingData data; - std::shared_ptr library; -}; - -struct MonikerWriteArrayI16Data { - NiFpga_Session session; - uint32_t control; - nifpga_grpc::WriteArrayI16StreamingData data; - std::shared_ptr library; -}; - -struct MonikerWriteArrayI32Data { - NiFpga_Session session; - uint32_t control; - nifpga_grpc::WriteArrayI32StreamingData data; - std::shared_ptr library; -}; - -struct MonikerWriteArrayI64Data { - NiFpga_Session session; - uint32_t control; - nifpga_grpc::WriteArrayI64StreamingData data; - std::shared_ptr library; -}; - -struct MonikerWriteArrayI8Data { - NiFpga_Session session; - uint32_t control; - nifpga_grpc::WriteArrayI8StreamingData data; - std::shared_ptr library; -}; - -struct MonikerWriteArraySglData { - NiFpga_Session session; - uint32_t control; - nifpga_grpc::WriteArraySglStreamingData data; - std::shared_ptr library; -}; - -struct MonikerWriteArrayU16Data { - NiFpga_Session session; - uint32_t control; - nifpga_grpc::WriteArrayU16StreamingData data; - std::shared_ptr library; -}; - -struct MonikerWriteArrayU32Data { - NiFpga_Session session; - uint32_t control; - nifpga_grpc::WriteArrayU32StreamingData data; - std::shared_ptr library; -}; - -struct MonikerWriteArrayU64Data { - NiFpga_Session session; - uint32_t control; - nifpga_grpc::WriteArrayU64StreamingData data; - std::shared_ptr library; -}; - -struct MonikerWriteArrayU8Data { - NiFpga_Session session; - uint32_t control; - nifpga_grpc::WriteArrayU8StreamingData data; - std::shared_ptr library; -}; - -struct MonikerWriteBoolData { - NiFpga_Session session; - uint32_t control; - nifpga_grpc::WriteBoolStreamingData data; - std::shared_ptr library; -}; - -struct MonikerWriteDblData { - NiFpga_Session session; - uint32_t control; - nifpga_grpc::WriteDblStreamingData data; - std::shared_ptr library; -}; - -struct MonikerWriteI16Data { - NiFpga_Session session; - uint32_t control; - nifpga_grpc::WriteI16StreamingData data; - std::shared_ptr library; -}; - -struct MonikerWriteI32Data { - NiFpga_Session session; - uint32_t control; - nifpga_grpc::WriteI32StreamingData data; - std::shared_ptr library; -}; - -struct MonikerWriteI64Data { - NiFpga_Session session; - uint32_t control; - nifpga_grpc::WriteI64StreamingData data; - std::shared_ptr library; -}; - -struct MonikerWriteI8Data { - NiFpga_Session session; - uint32_t control; - nifpga_grpc::WriteI8StreamingData data; - std::shared_ptr library; -}; - -struct MonikerWriteSglData { - NiFpga_Session session; - uint32_t control; - nifpga_grpc::WriteSglStreamingData data; - std::shared_ptr library; -}; - -struct MonikerWriteU16Data { - NiFpga_Session session; - uint32_t control; - nifpga_grpc::WriteU16StreamingData data; - std::shared_ptr library; -}; - -struct MonikerWriteU32Data { - NiFpga_Session session; - uint32_t control; - nifpga_grpc::WriteU32StreamingData data; - std::shared_ptr library; -}; - -struct MonikerWriteU64Data { - NiFpga_Session session; - uint32_t control; - nifpga_grpc::WriteU64StreamingData data; - std::shared_ptr library; -}; - -struct MonikerWriteU8Data { - NiFpga_Session session; - uint32_t control; - nifpga_grpc::WriteU8StreamingData data; - std::shared_ptr library; -}; - -NiFpgaService::NiFpgaService( - LibrarySharedPtr library, - ResourceRepositorySharedPtr resource_repository, - const NiFpgaFeatureToggles& feature_toggles) - : library_(library), + using nidevice_grpc::converters::allocate_output_storage; + using nidevice_grpc::converters::calculate_linked_array_size; + using nidevice_grpc::converters::convert_from_grpc; + using nidevice_grpc::converters::convert_to_grpc; + using nidevice_grpc::converters::MatchState; + + struct MonikerReadArrayBoolData + { + NiFpga_Session session; + uint32_t indicator; + size_t size; + nifpga_grpc::ReadArrayBoolStreamingData data; + std::shared_ptr library; + }; + + struct MonikerReadArrayDblData + { + NiFpga_Session session; + uint32_t indicator; + size_t size; + nifpga_grpc::ReadArrayDblStreamingData data; + std::shared_ptr library; + }; + + struct MonikerReadArrayI16Data + { + NiFpga_Session session; + uint32_t indicator; + size_t size; + nifpga_grpc::ReadArrayI16StreamingData data; + std::shared_ptr library; + }; + + struct MonikerReadArrayI32Data + { + NiFpga_Session session; + uint32_t indicator; + size_t size; + nifpga_grpc::ReadArrayI32StreamingData data; + std::shared_ptr library; + }; + + struct MonikerReadArrayI64Data + { + NiFpga_Session session; + uint32_t indicator; + size_t size; + nifpga_grpc::ReadArrayI64StreamingData data; + std::shared_ptr library; + }; + + struct MonikerReadArrayI8Data + { + NiFpga_Session session; + uint32_t indicator; + size_t size; + nifpga_grpc::ReadArrayI8StreamingData data; + std::shared_ptr library; + }; + + struct MonikerReadArraySglData + { + NiFpga_Session session; + uint32_t indicator; + size_t size; + nifpga_grpc::ReadArraySglStreamingData data; + std::shared_ptr library; + }; + + struct MonikerReadArrayU16Data + { + NiFpga_Session session; + uint32_t indicator; + size_t size; + nifpga_grpc::ReadArrayU16StreamingData data; + std::shared_ptr library; + }; + + struct MonikerReadArrayU32Data + { + NiFpga_Session session; + uint32_t indicator; + size_t size; + nifpga_grpc::ReadArrayU32StreamingData data; + std::shared_ptr library; + }; + + struct MonikerReadArrayU64Data + { + NiFpga_Session session; + uint32_t indicator; + size_t size; + nifpga_grpc::ReadArrayU64StreamingData data; + std::shared_ptr library; + }; + + struct MonikerReadArrayU8Data + { + NiFpga_Session session; + uint32_t indicator; + size_t size; + nifpga_grpc::ReadArrayU8StreamingData data; + std::shared_ptr library; + }; + + struct MonikerReadBoolData + { + NiFpga_Session session; + uint32_t indicator; + nifpga_grpc::ReadBoolStreamingData data; + std::shared_ptr library; + }; + + struct MonikerReadDblData + { + NiFpga_Session session; + uint32_t indicator; + nifpga_grpc::ReadDblStreamingData data; + std::shared_ptr library; + }; + + struct MonikerReadI16Data + { + NiFpga_Session session; + uint32_t indicator; + nifpga_grpc::ReadI16StreamingData data; + std::shared_ptr library; + }; + + struct MonikerReadI32Data + { + NiFpga_Session session; + uint32_t indicator; + nifpga_grpc::ReadI32StreamingData data; + std::shared_ptr library; + }; + + struct MonikerReadI64Data + { + NiFpga_Session session; + uint32_t indicator; + nifpga_grpc::ReadI64StreamingData data; + std::shared_ptr library; + }; + + struct MonikerReadI8Data + { + NiFpga_Session session; + uint32_t indicator; + nifpga_grpc::ReadI8StreamingData data; + std::shared_ptr library; + }; + + struct MonikerReadSglData + { + NiFpga_Session session; + uint32_t indicator; + nifpga_grpc::ReadSglStreamingData data; + std::shared_ptr library; + }; + + struct MonikerReadU16Data + { + NiFpga_Session session; + uint32_t indicator; + nifpga_grpc::ReadU16StreamingData data; + std::shared_ptr library; + }; + + struct MonikerReadU32Data + { + NiFpga_Session session; + uint32_t indicator; + nifpga_grpc::ReadU32StreamingData data; + std::shared_ptr library; + }; + + struct MonikerReadU64Data + { + NiFpga_Session session; + uint32_t indicator; + nifpga_grpc::ReadU64StreamingData data; + std::shared_ptr library; + }; + + struct MonikerReadU8Data + { + NiFpga_Session session; + uint32_t indicator; + nifpga_grpc::ReadU8StreamingData data; + std::shared_ptr library; + }; + + struct MonikerWriteArrayBoolData + { + NiFpga_Session session; + uint32_t control; + nifpga_grpc::WriteArrayBoolStreamingData data; + std::shared_ptr library; + }; + + struct MonikerWriteArrayDblData + { + NiFpga_Session session; + uint32_t control; + nifpga_grpc::WriteArrayDblStreamingData data; + std::shared_ptr library; + }; + + struct MonikerWriteArrayI16Data + { + NiFpga_Session session; + uint32_t control; + nifpga_grpc::WriteArrayI16StreamingData data; + std::shared_ptr library; + }; + + struct MonikerWriteArrayI32Data + { + NiFpga_Session session; + uint32_t control; + nifpga_grpc::WriteArrayI32StreamingData data; + std::shared_ptr library; + }; + + struct MonikerWriteArrayI64Data + { + NiFpga_Session session; + uint32_t control; + nifpga_grpc::WriteArrayI64StreamingData data; + std::shared_ptr library; + }; + + struct MonikerWriteArrayI8Data + { + NiFpga_Session session; + uint32_t control; + nifpga_grpc::WriteArrayI8StreamingData data; + std::shared_ptr library; + }; + + struct MonikerWriteArraySglData + { + NiFpga_Session session; + uint32_t control; + nifpga_grpc::WriteArraySglStreamingData data; + std::shared_ptr library; + }; + + struct MonikerWriteArrayU16Data + { + NiFpga_Session session; + uint32_t control; + nifpga_grpc::WriteArrayU16StreamingData data; + std::shared_ptr library; + }; + + struct MonikerWriteArrayU32Data + { + NiFpga_Session session; + uint32_t control; + nifpga_grpc::WriteArrayU32StreamingData data; + std::shared_ptr library; + }; + + struct MonikerWriteArrayU64Data + { + NiFpga_Session session; + uint32_t control; + nifpga_grpc::WriteArrayU64StreamingData data; + std::shared_ptr library; + }; + + struct MonikerWriteArrayU8Data + { + NiFpga_Session session; + uint32_t control; + nifpga_grpc::WriteArrayU8StreamingData data; + std::shared_ptr library; + }; + + struct MonikerWriteBoolData + { + NiFpga_Session session; + uint32_t control; + nifpga_grpc::WriteBoolStreamingData data; + std::shared_ptr library; + }; + + struct MonikerWriteDblData + { + NiFpga_Session session; + uint32_t control; + nifpga_grpc::WriteDblStreamingData data; + std::shared_ptr library; + }; + + struct MonikerWriteI16Data + { + NiFpga_Session session; + uint32_t control; + nifpga_grpc::WriteI16StreamingData data; + std::shared_ptr library; + }; + + struct MonikerWriteI32Data + { + NiFpga_Session session; + uint32_t control; + nifpga_grpc::WriteI32StreamingData data; + std::shared_ptr library; + }; + + struct MonikerWriteI64Data + { + NiFpga_Session session; + uint32_t control; + nifpga_grpc::WriteI64StreamingData data; + std::shared_ptr library; + }; + + struct MonikerWriteI8Data + { + NiFpga_Session session; + uint32_t control; + nifpga_grpc::WriteI8StreamingData data; + std::shared_ptr library; + }; + + struct MonikerWriteSglData + { + NiFpga_Session session; + uint32_t control; + nifpga_grpc::WriteSglStreamingData data; + std::shared_ptr library; + }; + + struct MonikerWriteU16Data + { + NiFpga_Session session; + uint32_t control; + nifpga_grpc::WriteU16StreamingData data; + std::shared_ptr library; + }; + + struct MonikerWriteU32Data + { + NiFpga_Session session; + uint32_t control; + nifpga_grpc::WriteU32StreamingData data; + std::shared_ptr library; + }; + + struct MonikerWriteU64Data + { + NiFpga_Session session; + uint32_t control; + nifpga_grpc::WriteU64StreamingData data; + std::shared_ptr library; + }; + + struct MonikerWriteU8Data + { + NiFpga_Session session; + uint32_t control; + nifpga_grpc::WriteU8StreamingData data; + std::shared_ptr library; + }; + + NiFpgaService::NiFpgaService( + LibrarySharedPtr library, + ResourceRepositorySharedPtr resource_repository, + const NiFpgaFeatureToggles& feature_toggles) + : library_(library), session_repository_(resource_repository), feature_toggles_(feature_toggles) -{ -} - -NiFpgaService::~NiFpgaService() -{ -} - -// 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; -} - -void RegisterMonikerEndpoints() -{ - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadArrayBool", MonikerReadArrayBool); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadArrayDbl", MonikerReadArrayDbl); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadArrayI16", MonikerReadArrayI16); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadArrayI32", MonikerReadArrayI32); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadArrayI64", MonikerReadArrayI64); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadArrayI8", MonikerReadArrayI8); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadArraySgl", MonikerReadArraySgl); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadArrayU16", MonikerReadArrayU16); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadArrayU32", MonikerReadArrayU32); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadArrayU64", MonikerReadArrayU64); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadArrayU8", MonikerReadArrayU8); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadBool", MonikerReadBool); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadDbl", MonikerReadDbl); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadI16", MonikerReadI16); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadI32", MonikerReadI32); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadI64", MonikerReadI64); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadI8", MonikerReadI8); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadSgl", MonikerReadSgl); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadU16", MonikerReadU16); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadU32", MonikerReadU32); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadU64", MonikerReadU64); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadU8", MonikerReadU8); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteArrayBool", MonikerWriteArrayBool); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteArrayDbl", MonikerWriteArrayDbl); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteArrayI16", MonikerWriteArrayI16); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteArrayI32", MonikerWriteArrayI32); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteArrayI64", MonikerWriteArrayI64); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteArrayI8", MonikerWriteArrayI8); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteArraySgl", MonikerWriteArraySgl); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteArrayU16", MonikerWriteArrayU16); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteArrayU32", MonikerWriteArrayU32); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteArrayU64", MonikerWriteArrayU64); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteArrayU8", MonikerWriteArrayU8); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteBool", MonikerWriteBool); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteDbl", MonikerWriteDbl); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteI16", MonikerWriteI16); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteI32", MonikerWriteI32); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteI64", MonikerWriteI64); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteI8", MonikerWriteI8); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteSgl", MonikerWriteSgl); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteU16", MonikerWriteU16); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteU32", MonikerWriteU32); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteU64", MonikerWriteU64); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteU8", MonikerWriteU8); -} + { + } + + NiFpgaService::~NiFpgaService() + { + } + + // 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; + } + + void RegisterMonikerEndpoints() + { + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadArrayBool", MonikerReadArrayBool); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadArrayDbl", MonikerReadArrayDbl); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadArrayI16", MonikerReadArrayI16); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadArrayI32", MonikerReadArrayI32); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadArrayI64", MonikerReadArrayI64); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadArrayI8", MonikerReadArrayI8); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadArraySgl", MonikerReadArraySgl); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadArrayU16", MonikerReadArrayU16); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadArrayU32", MonikerReadArrayU32); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadArrayU64", MonikerReadArrayU64); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadArrayU8", MonikerReadArrayU8); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadBool", MonikerReadBool); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadDbl", MonikerReadDbl); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadI16", MonikerReadI16); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadI32", MonikerReadI32); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadI64", MonikerReadI64); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadI8", MonikerReadI8); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadSgl", MonikerReadSgl); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadU16", MonikerReadU16); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadU32", MonikerReadU32); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadU64", MonikerReadU64); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadU8", MonikerReadU8); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteArrayBool", MonikerWriteArrayBool); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteArrayDbl", MonikerWriteArrayDbl); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteArrayI16", MonikerWriteArrayI16); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteArrayI32", MonikerWriteArrayI32); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteArrayI64", MonikerWriteArrayI64); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteArrayI8", MonikerWriteArrayI8); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteArraySgl", MonikerWriteArraySgl); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteArrayU16", MonikerWriteArrayU16); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteArrayU32", MonikerWriteArrayU32); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteArrayU64", MonikerWriteArrayU64); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteArrayU8", MonikerWriteArrayU8); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteBool", MonikerWriteBool); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteDbl", MonikerWriteDbl); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteI16", MonikerWriteI16); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteI32", MonikerWriteI32); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteI64", MonikerWriteI64); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteI8", MonikerWriteI8); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteSgl", MonikerWriteSgl); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteU16", MonikerWriteU16); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteU32", MonikerWriteU32); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteU64", MonikerWriteU64); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteU8", MonikerWriteU8); + } ::grpc::Status MonikerReadArrayBool(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadArrayBoolData* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto indicator = function_data->indicator; - auto size = function_data->size; - - std::vector array(size, NiFpga_Bool()); - auto status = library->ReadArrayBool(session, indicator, array.data(), size); - if (status >= 0) { - std::transform( - array.begin(), - array.begin() + size, - function_data->data.mutable_value()->begin(), - [&](auto x) { - return x; - }); - packedData.PackFrom(function_data->data); - } + MonikerReadArrayBoolData* function_data = static_cast(data); + auto library = function_data->library; + auto response = function_data->data.mutable_response(); + auto session = function_data->session; + auto indicator = function_data->indicator; + auto size = function_data->size; + + std::vector array(size, NiFpga_Bool()); + auto status = library->ReadArrayBool(session, indicator, array.data(), size); - if (status < 0) { - std::cout << "MonikerReadArrayBool error: " << status << std::endl; - } - return ::grpc::Status::OK; + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + convert_to_grpc(array, response->mutable_array()); + */ + if (status >= 0) + { + response->set_status(status); + convert_to_grpc(array, response->mutable_array()); + packedData.PackFrom(function_data->data); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadArrayDbl(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadArrayDblData* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto indicator = function_data->indicator; - auto size = function_data->size; - - function_data->data.mutable_value()->Resize(size, 0); - auto array = function_data->data.mutable_value()->mutable_data(); - auto status = library->ReadArrayDbl(session, indicator, array, size); - if (status >= 0) { - packedData.PackFrom(function_data->data); - } - - if (status < 0) { - std::cout << "MonikerReadArrayDbl error: " << status << std::endl; - } - return ::grpc::Status::OK; + MonikerReadArrayDblData* function_data = static_cast(data); + auto library = function_data->library; + auto response = function_data->data.mutable_response(); + auto session = function_data->session; + auto indicator = function_data->indicator; + auto size = function_data->size; + + function_data->data.mutable_array()->Resize(size, 0); + auto array = response->mutable_array()->mutable_data(); + auto status = library->ReadArrayDbl(session, indicator, array, size); + + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + */ + if (status >= 0) + { + response->set_status(status); + packedData.PackFrom(function_data->data); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadArrayI16(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadArrayI16Data* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto indicator = function_data->indicator; - auto size = function_data->size; - - std::vector array(size); - auto status = library->ReadArrayI16(session, indicator, array.data(), size); - if (status >= 0) { - std::transform( - array.begin(), - array.begin() + size, - function_data->data.mutable_value()->begin(), - [&](auto x) { - return x; - }); - packedData.PackFrom(function_data->data); - } + MonikerReadArrayI16Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = function_data->data.mutable_response(); + auto session = function_data->session; + auto indicator = function_data->indicator; + auto size = function_data->size; + + std::vector array(size); + auto status = library->ReadArrayI16(session, indicator, array.data(), size); - if (status < 0) { - std::cout << "MonikerReadArrayI16 error: " << status << std::endl; - } - return ::grpc::Status::OK; + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->mutable_array()->Clear(); + response->mutable_array()->Reserve(size); + std::transform( + array.begin(), + array.begin() + size, + google::protobuf::RepeatedFieldBackInserter(response->mutable_array()), + [&](auto x) { + return x; + }); + */ + if (status >= 0) + { + response->set_status(status); + response->mutable_array()->Clear(); + response->mutable_array()->Reserve(size); + std::transform( + array.begin(), + array.begin() + size, + google::protobuf::RepeatedFieldBackInserter(response->mutable_array()), + [&](auto x) { + return x; + }); + packedData.PackFrom(function_data->data); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadArrayI32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadArrayI32Data* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto indicator = function_data->indicator; - auto size = function_data->size; - - function_data->data.mutable_value()->Resize(size, 0); - auto array = function_data->data.mutable_value()->mutable_data(); - auto status = library->ReadArrayI32(session, indicator, array, size); - if (status >= 0) { - packedData.PackFrom(function_data->data); - } - - if (status < 0) { - std::cout << "MonikerReadArrayI32 error: " << status << std::endl; - } - return ::grpc::Status::OK; + MonikerReadArrayI32Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = function_data->data.mutable_response(); + auto session = function_data->session; + auto indicator = function_data->indicator; + auto size = function_data->size; + + function_data->data.mutable_array()->Resize(size, 0); + auto array = response->mutable_array()->mutable_data(); + auto status = library->ReadArrayI32(session, indicator, array, size); + + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + */ + if (status >= 0) + { + response->set_status(status); + packedData.PackFrom(function_data->data); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadArrayI64(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadArrayI64Data* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto indicator = function_data->indicator; - auto size = function_data->size; - - function_data->data.mutable_value()->Resize(size, 0); - auto array = function_data->data.mutable_value()->mutable_data(); - auto status = library->ReadArrayI64(session, indicator, array, size); - if (status >= 0) { - packedData.PackFrom(function_data->data); - } - - if (status < 0) { - std::cout << "MonikerReadArrayI64 error: " << status << std::endl; - } - return ::grpc::Status::OK; + MonikerReadArrayI64Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = function_data->data.mutable_response(); + auto session = function_data->session; + auto indicator = function_data->indicator; + auto size = function_data->size; + + function_data->data.mutable_array()->Resize(size, 0); + auto array = response->mutable_array()->mutable_data(); + auto status = library->ReadArrayI64(session, indicator, array, size); + + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + */ + if (status >= 0) + { + response->set_status(status); + packedData.PackFrom(function_data->data); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadArrayI8(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadArrayI8Data* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto indicator = function_data->indicator; - auto size = function_data->size; - - std::vector array(size); - auto status = library->ReadArrayI8(session, indicator, array.data(), size); - if (status >= 0) { - std::transform( - array.begin(), - array.begin() + size, - function_data->data.mutable_value()->begin(), - [&](auto x) { - return x; - }); - packedData.PackFrom(function_data->data); - } + MonikerReadArrayI8Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = function_data->data.mutable_response(); + auto session = function_data->session; + auto indicator = function_data->indicator; + auto size = function_data->size; + + std::vector array(size); + auto status = library->ReadArrayI8(session, indicator, array.data(), size); - if (status < 0) { - std::cout << "MonikerReadArrayI8 error: " << status << std::endl; - } - return ::grpc::Status::OK; + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->mutable_array()->Clear(); + response->mutable_array()->Reserve(size); + std::transform( + array.begin(), + array.begin() + size, + google::protobuf::RepeatedFieldBackInserter(response->mutable_array()), + [&](auto x) { + return x; + }); + */ + if (status >= 0) + { + response->set_status(status); + response->mutable_array()->Clear(); + response->mutable_array()->Reserve(size); + std::transform( + array.begin(), + array.begin() + size, + google::protobuf::RepeatedFieldBackInserter(response->mutable_array()), + [&](auto x) { + return x; + }); + packedData.PackFrom(function_data->data); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadArraySgl(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadArraySglData* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto indicator = function_data->indicator; - auto size = function_data->size; - - function_data->data.mutable_value()->Resize(size, 0); - auto array = function_data->data.mutable_value()->mutable_data(); - auto status = library->ReadArraySgl(session, indicator, array, size); - if (status >= 0) { - packedData.PackFrom(function_data->data); - } - - if (status < 0) { - std::cout << "MonikerReadArraySgl error: " << status << std::endl; - } - return ::grpc::Status::OK; + MonikerReadArraySglData* function_data = static_cast(data); + auto library = function_data->library; + auto response = function_data->data.mutable_response(); + auto session = function_data->session; + auto indicator = function_data->indicator; + auto size = function_data->size; + + function_data->data.mutable_array()->Resize(size, 0); + auto array = response->mutable_array()->mutable_data(); + auto status = library->ReadArraySgl(session, indicator, array, size); + + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + */ + if (status >= 0) + { + response->set_status(status); + packedData.PackFrom(function_data->data); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadArrayU16(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadArrayU16Data* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto indicator = function_data->indicator; - auto size = function_data->size; - - std::vector array(size); - auto status = library->ReadArrayU16(session, indicator, array.data(), size); - if (status >= 0) { - std::transform( - array.begin(), - array.begin() + size, - function_data->data.mutable_value()->begin(), - [&](auto x) { - return x; - }); - packedData.PackFrom(function_data->data); - } + MonikerReadArrayU16Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = function_data->data.mutable_response(); + auto session = function_data->session; + auto indicator = function_data->indicator; + auto size = function_data->size; + + std::vector array(size); + auto status = library->ReadArrayU16(session, indicator, array.data(), size); - if (status < 0) { - std::cout << "MonikerReadArrayU16 error: " << status << std::endl; - } - return ::grpc::Status::OK; + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->mutable_array()->Clear(); + response->mutable_array()->Reserve(size); + std::transform( + array.begin(), + array.begin() + size, + google::protobuf::RepeatedFieldBackInserter(response->mutable_array()), + [&](auto x) { + return x; + }); + */ + if (status >= 0) + { + response->set_status(status); + response->mutable_array()->Clear(); + response->mutable_array()->Reserve(size); + std::transform( + array.begin(), + array.begin() + size, + google::protobuf::RepeatedFieldBackInserter(response->mutable_array()), + [&](auto x) { + return x; + }); + packedData.PackFrom(function_data->data); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadArrayU32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadArrayU32Data* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto indicator = function_data->indicator; - auto size = function_data->size; - - function_data->data.mutable_value()->Resize(size, 0); - auto array = function_data->data.mutable_value()->mutable_data(); - auto status = library->ReadArrayU32(session, indicator, array, size); - if (status >= 0) { - packedData.PackFrom(function_data->data); - } - - if (status < 0) { - std::cout << "MonikerReadArrayU32 error: " << status << std::endl; - } - return ::grpc::Status::OK; + MonikerReadArrayU32Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = function_data->data.mutable_response(); + auto session = function_data->session; + auto indicator = function_data->indicator; + auto size = function_data->size; + + function_data->data.mutable_array()->Resize(size, 0); + auto array = response->mutable_array()->mutable_data(); + auto status = library->ReadArrayU32(session, indicator, array, size); + + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + */ + if (status >= 0) + { + response->set_status(status); + packedData.PackFrom(function_data->data); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadArrayU64(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadArrayU64Data* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto indicator = function_data->indicator; - auto size = function_data->size; - - function_data->data.mutable_value()->Resize(size, 0); - auto array = function_data->data.mutable_value()->mutable_data(); - auto status = library->ReadArrayU64(session, indicator, array, size); - if (status >= 0) { - packedData.PackFrom(function_data->data); - } - - if (status < 0) { - std::cout << "MonikerReadArrayU64 error: " << status << std::endl; - } - return ::grpc::Status::OK; + MonikerReadArrayU64Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = function_data->data.mutable_response(); + auto session = function_data->session; + auto indicator = function_data->indicator; + auto size = function_data->size; + + function_data->data.mutable_array()->Resize(size, 0); + auto array = response->mutable_array()->mutable_data(); + auto status = library->ReadArrayU64(session, indicator, array, size); + + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + */ + if (status >= 0) + { + response->set_status(status); + packedData.PackFrom(function_data->data); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadArrayU8(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadArrayU8Data* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto indicator = function_data->indicator; - auto size = function_data->size; - - std::vector array(size); - auto status = library->ReadArrayU8(session, indicator, array.data(), size); - if (status >= 0) { - std::transform( - array.begin(), - array.begin() + size, - function_data->data.mutable_value()->begin(), - [&](auto x) { - return x; - }); - packedData.PackFrom(function_data->data); - } + MonikerReadArrayU8Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = function_data->data.mutable_response(); + auto session = function_data->session; + auto indicator = function_data->indicator; + auto size = function_data->size; + + std::vector array(size); + auto status = library->ReadArrayU8(session, indicator, array.data(), size); - if (status < 0) { - std::cout << "MonikerReadArrayU8 error: " << status << std::endl; - } - return ::grpc::Status::OK; + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->mutable_array()->Clear(); + response->mutable_array()->Reserve(size); + std::transform( + array.begin(), + array.begin() + size, + google::protobuf::RepeatedFieldBackInserter(response->mutable_array()), + [&](auto x) { + return x; + }); + */ + if (status >= 0) + { + response->set_status(status); + response->mutable_array()->Clear(); + response->mutable_array()->Reserve(size); + std::transform( + array.begin(), + array.begin() + size, + google::protobuf::RepeatedFieldBackInserter(response->mutable_array()), + [&](auto x) { + return x; + }); + packedData.PackFrom(function_data->data); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadBool(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadBoolData* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto indicator = function_data->indicator; - - NiFpga_Bool value{}; - auto status = library->ReadBool(session, indicator, &value); - function_data->data.set_value(value); - if (status >= 0) { - packedData.PackFrom(function_data->data); - } - - if (status < 0) { - std::cout << "MonikerReadBool error: " << status << std::endl; - } - return ::grpc::Status::OK; + MonikerReadBoolData* function_data = static_cast(data); + auto library = function_data->library; + auto response = function_data->data.mutable_response(); + auto session = function_data->session; + auto indicator = function_data->indicator; + +NiFpga_Bool value {}; + auto status = library->ReadBool(session, indicator, &value); + + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_value(value); + */ + if (status >= 0) + { + response->set_status(status); + response->set_value(value); + packedData.PackFrom(function_data->data); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadDbl(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadDblData* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto indicator = function_data->indicator; - - double value{}; - auto status = library->ReadDbl(session, indicator, &value); - function_data->data.set_value(value); - if (status >= 0) { - packedData.PackFrom(function_data->data); - } - - if (status < 0) { - std::cout << "MonikerReadDbl error: " << status << std::endl; - } - return ::grpc::Status::OK; + MonikerReadDblData* function_data = static_cast(data); + auto library = function_data->library; + auto response = function_data->data.mutable_response(); + auto session = function_data->session; + auto indicator = function_data->indicator; + +double value {}; + auto status = library->ReadDbl(session, indicator, &value); + + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_value(value); + */ + if (status >= 0) + { + response->set_status(status); + response->set_value(value); + packedData.PackFrom(function_data->data); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadI16(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadI16Data* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto indicator = function_data->indicator; - - int16_t value{}; - auto status = library->ReadI16(session, indicator, &value); - function_data->data.set_value(value); - if (status >= 0) { - packedData.PackFrom(function_data->data); - } - - if (status < 0) { - std::cout << "MonikerReadI16 error: " << status << std::endl; - } - return ::grpc::Status::OK; + MonikerReadI16Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = function_data->data.mutable_response(); + auto session = function_data->session; + auto indicator = function_data->indicator; + +int16_t value {}; + auto status = library->ReadI16(session, indicator, &value); + + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_value(value); + */ + if (status >= 0) + { + response->set_status(status); + response->set_value(value); + packedData.PackFrom(function_data->data); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadI32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadI32Data* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto indicator = function_data->indicator; - - int32_t value{}; - auto status = library->ReadI32(session, indicator, &value); - function_data->data.set_value(value); - if (status >= 0) { - packedData.PackFrom(function_data->data); - } - - if (status < 0) { - std::cout << "MonikerReadI32 error: " << status << std::endl; - } - return ::grpc::Status::OK; + MonikerReadI32Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = function_data->data.mutable_response(); + auto session = function_data->session; + auto indicator = function_data->indicator; + +int32_t value {}; + auto status = library->ReadI32(session, indicator, &value); + + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_value(value); + */ + if (status >= 0) + { + response->set_status(status); + response->set_value(value); + packedData.PackFrom(function_data->data); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadI64(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadI64Data* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto indicator = function_data->indicator; - - int64_t value{}; - auto status = library->ReadI64(session, indicator, &value); - function_data->data.set_value(value); - if (status >= 0) { - packedData.PackFrom(function_data->data); - } - - if (status < 0) { - std::cout << "MonikerReadI64 error: " << status << std::endl; - } - return ::grpc::Status::OK; + MonikerReadI64Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = function_data->data.mutable_response(); + auto session = function_data->session; + auto indicator = function_data->indicator; + +int64_t value {}; + auto status = library->ReadI64(session, indicator, &value); + + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_value(value); + */ + if (status >= 0) + { + response->set_status(status); + response->set_value(value); + packedData.PackFrom(function_data->data); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadI8(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadI8Data* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto indicator = function_data->indicator; - - int8_t value{}; - auto status = library->ReadI8(session, indicator, &value); - function_data->data.set_value(value); - if (status >= 0) { - packedData.PackFrom(function_data->data); - } - - if (status < 0) { - std::cout << "MonikerReadI8 error: " << status << std::endl; - } - return ::grpc::Status::OK; + MonikerReadI8Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = function_data->data.mutable_response(); + auto session = function_data->session; + auto indicator = function_data->indicator; + +int8_t value {}; + auto status = library->ReadI8(session, indicator, &value); + + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_value(value); + */ + if (status >= 0) + { + response->set_status(status); + response->set_value(value); + packedData.PackFrom(function_data->data); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadSgl(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadSglData* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto indicator = function_data->indicator; - - float value{}; - auto status = library->ReadSgl(session, indicator, &value); - function_data->data.set_value(value); - if (status >= 0) { - packedData.PackFrom(function_data->data); - } - - if (status < 0) { - std::cout << "MonikerReadSgl error: " << status << std::endl; - } - return ::grpc::Status::OK; + MonikerReadSglData* function_data = static_cast(data); + auto library = function_data->library; + auto response = function_data->data.mutable_response(); + auto session = function_data->session; + auto indicator = function_data->indicator; + +float value {}; + auto status = library->ReadSgl(session, indicator, &value); + + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_value(value); + */ + if (status >= 0) + { + response->set_status(status); + response->set_value(value); + packedData.PackFrom(function_data->data); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadU16(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadU16Data* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto indicator = function_data->indicator; - - uint16_t value{}; - auto status = library->ReadU16(session, indicator, &value); - function_data->data.set_value(value); - if (status >= 0) { - packedData.PackFrom(function_data->data); - } - - if (status < 0) { - std::cout << "MonikerReadU16 error: " << status << std::endl; - } - return ::grpc::Status::OK; + MonikerReadU16Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = function_data->data.mutable_response(); + auto session = function_data->session; + auto indicator = function_data->indicator; + +uint16_t value {}; + auto status = library->ReadU16(session, indicator, &value); + + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_value(value); + */ + if (status >= 0) + { + response->set_status(status); + response->set_value(value); + packedData.PackFrom(function_data->data); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadU32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadU32Data* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto indicator = function_data->indicator; - - uint32_t value{}; - auto status = library->ReadU32(session, indicator, &value); - function_data->data.set_value(value); - if (status >= 0) { - packedData.PackFrom(function_data->data); - } - - if (status < 0) { - std::cout << "MonikerReadU32 error: " << status << std::endl; - } - return ::grpc::Status::OK; + MonikerReadU32Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = function_data->data.mutable_response(); + auto session = function_data->session; + auto indicator = function_data->indicator; + +uint32_t value {}; + auto status = library->ReadU32(session, indicator, &value); + + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_value(value); + */ + if (status >= 0) + { + response->set_status(status); + response->set_value(value); + packedData.PackFrom(function_data->data); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadU64(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadU64Data* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto indicator = function_data->indicator; - - uint64_t value{}; - auto status = library->ReadU64(session, indicator, &value); - function_data->data.set_value(value); - if (status >= 0) { - packedData.PackFrom(function_data->data); - } - - if (status < 0) { - std::cout << "MonikerReadU64 error: " << status << std::endl; - } - return ::grpc::Status::OK; + MonikerReadU64Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = function_data->data.mutable_response(); + auto session = function_data->session; + auto indicator = function_data->indicator; + +uint64_t value {}; + auto status = library->ReadU64(session, indicator, &value); + + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_value(value); + */ + if (status >= 0) + { + response->set_status(status); + response->set_value(value); + packedData.PackFrom(function_data->data); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadU8(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadU8Data* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto indicator = function_data->indicator; - - uint8_t value{}; - auto status = library->ReadU8(session, indicator, &value); - function_data->data.set_value(value); - if (status >= 0) { - packedData.PackFrom(function_data->data); - } - - if (status < 0) { - std::cout << "MonikerReadU8 error: " << status << std::endl; - } - return ::grpc::Status::OK; + MonikerReadU8Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = function_data->data.mutable_response(); + auto session = function_data->session; + auto indicator = function_data->indicator; + +uint8_t value {}; + auto status = library->ReadU8(session, indicator, &value); + + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_value(value); + */ + if (status >= 0) + { + response->set_status(status); + response->set_value(value); + packedData.PackFrom(function_data->data); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteArrayBool(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteArrayBoolData* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto control = function_data->control; - - ArrayBoolData arraybooldata_message; - packedData.UnpackTo(&arraybooldata_message); - - auto data_array = arraybooldata_message.value(); - std::vector array(data_array.begin(), data_array.end()); - auto size = data_array.size(); - - auto status = library->WriteArrayBool(session, control, array.data(), size); - if (status < 0) { - std::cout << "MonikerWriteArrayBool error: " << status << std::endl; - } - return ::grpc::Status::OK; + MonikerWriteArrayBoolData* function_data = static_cast(data); + auto library = function_data->library; + auto response = function_data->data.mutable_response(); + auto session = function_data->session; + auto control = function_data->control; + + ArrayBoolData arraybooldata_message; + packedData.UnpackTo(&arraybooldata_message); + + auto data_array = arraybooldata_message.value(); + std::vector array(data_array.begin(), data_array.end()); + auto size = data_array.size(); + + auto status = library->WriteArrayBool(session, control, array.data(), size); + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + */ + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteArrayDbl(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteArrayDblData* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto control = function_data->control; - - ArrayDoubleData arraydoubledata_message; - packedData.UnpackTo(&arraydoubledata_message); - - auto data_array = arraydoubledata_message.value(); - auto array = const_cast(arraydoubledata_message.value().data()); - auto size = data_array.size(); - - auto status = library->WriteArrayDbl(session, control, array, size); - if (status < 0) { - std::cout << "MonikerWriteArrayDbl error: " << status << std::endl; - } - return ::grpc::Status::OK; + MonikerWriteArrayDblData* function_data = static_cast(data); + auto library = function_data->library; + auto response = function_data->data.mutable_response(); + auto session = function_data->session; + auto control = function_data->control; + + ArrayDoubleData arraydoubledata_message; + packedData.UnpackTo(&arraydoubledata_message); + + auto data_array = arraydoubledata_message.value(); + auto array = const_cast(arraydoubledata_message.value().data()); + auto size = data_array.size(); + + auto status = library->WriteArrayDbl(session, control, array, size); + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + */ + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteArrayI16(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteArrayI16Data* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto control = function_data->control; - - ArrayI32Data arrayi32data_message; - packedData.UnpackTo(&arrayi32data_message); - - auto data_array = arrayi32data_message.value(); - auto array = std::vector(); - auto size = data_array.size(); - array.reserve(size); - std::transform( + MonikerWriteArrayI16Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = function_data->data.mutable_response(); + auto session = function_data->session; + auto control = function_data->control; + + ArrayI32Data arrayi32data_message; + packedData.UnpackTo(&arrayi32data_message); + + auto data_array = arrayi32data_message.value(); + auto array = std::vector(); + auto size = data_array.size(); + array.reserve(size); + std::transform( data_array.begin(), data_array.end(), std::back_inserter(array), @@ -959,70 +1217,85 @@ ::grpc::Status MonikerWriteArrayI16(void* data, google::protobuf::Arena& arena, return static_cast(x); }); - auto status = library->WriteArrayI16(session, control, array.data(), size); - if (status < 0) { - std::cout << "MonikerWriteArrayI16 error: " << status << std::endl; - } - return ::grpc::Status::OK; + auto status = library->WriteArrayI16(session, control, array.data(), size); + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + */ + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteArrayI32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteArrayI32Data* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto control = function_data->control; - - ArrayI32Data arrayi32data_message; - packedData.UnpackTo(&arrayi32data_message); - - auto data_array = arrayi32data_message.value(); - auto array = const_cast(arrayi32data_message.value().data()); - auto size = data_array.size(); - - auto status = library->WriteArrayI32(session, control, array, size); - if (status < 0) { - std::cout << "MonikerWriteArrayI32 error: " << status << std::endl; - } - return ::grpc::Status::OK; + MonikerWriteArrayI32Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = function_data->data.mutable_response(); + auto session = function_data->session; + auto control = function_data->control; + + ArrayI32Data arrayi32data_message; + packedData.UnpackTo(&arrayi32data_message); + + auto data_array = arrayi32data_message.value(); + auto array = const_cast(arrayi32data_message.value().data()); + auto size = data_array.size(); + + auto status = library->WriteArrayI32(session, control, array, size); + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + */ + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteArrayI64(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteArrayI64Data* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto control = function_data->control; - - ArrayI64Data arrayi64data_message; - packedData.UnpackTo(&arrayi64data_message); - - auto data_array = arrayi64data_message.value(); - auto array = const_cast(arrayi64data_message.value().data()); - auto size = data_array.size(); - - auto status = library->WriteArrayI64(session, control, array, size); - if (status < 0) { - std::cout << "MonikerWriteArrayI64 error: " << status << std::endl; - } - return ::grpc::Status::OK; + MonikerWriteArrayI64Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = function_data->data.mutable_response(); + auto session = function_data->session; + auto control = function_data->control; + + ArrayI64Data arrayi64data_message; + packedData.UnpackTo(&arrayi64data_message); + + auto data_array = arrayi64data_message.value(); + auto array = const_cast(arrayi64data_message.value().data()); + auto size = data_array.size(); + + auto status = library->WriteArrayI64(session, control, array, size); + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + */ + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteArrayI8(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteArrayI8Data* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto control = function_data->control; - - ArrayI32Data arrayi32data_message; - packedData.UnpackTo(&arrayi32data_message); - - auto data_array = arrayi32data_message.value(); - auto array = std::vector(); - auto size = data_array.size(); - array.reserve(size); - std::transform( + MonikerWriteArrayI8Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = function_data->data.mutable_response(); + auto session = function_data->session; + auto control = function_data->control; + + ArrayI32Data arrayi32data_message; + packedData.UnpackTo(&arrayi32data_message); + + auto data_array = arrayi32data_message.value(); + auto array = std::vector(); + auto size = data_array.size(); + array.reserve(size); + std::transform( data_array.begin(), data_array.end(), std::back_inserter(array), @@ -1034,49 +1307,59 @@ ::grpc::Status MonikerWriteArrayI8(void* data, google::protobuf::Arena& arena, g return static_cast(x); }); - auto status = library->WriteArrayI8(session, control, array.data(), size); - if (status < 0) { - std::cout << "MonikerWriteArrayI8 error: " << status << std::endl; - } - return ::grpc::Status::OK; + auto status = library->WriteArrayI8(session, control, array.data(), size); + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + */ + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteArraySgl(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteArraySglData* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto control = function_data->control; - - ArrayFloatData arrayfloatdata_message; - packedData.UnpackTo(&arrayfloatdata_message); - - auto data_array = arrayfloatdata_message.value(); - auto array = const_cast(arrayfloatdata_message.value().data()); - auto size = data_array.size(); - - auto status = library->WriteArraySgl(session, control, array, size); - if (status < 0) { - std::cout << "MonikerWriteArraySgl error: " << status << std::endl; - } - return ::grpc::Status::OK; + MonikerWriteArraySglData* function_data = static_cast(data); + auto library = function_data->library; + auto response = function_data->data.mutable_response(); + auto session = function_data->session; + auto control = function_data->control; + + ArrayFloatData arrayfloatdata_message; + packedData.UnpackTo(&arrayfloatdata_message); + + auto data_array = arrayfloatdata_message.value(); + auto array = const_cast(arrayfloatdata_message.value().data()); + auto size = data_array.size(); + + auto status = library->WriteArraySgl(session, control, array, size); + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + */ + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteArrayU16(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteArrayU16Data* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto control = function_data->control; - - ArrayU32Data arrayu32data_message; - packedData.UnpackTo(&arrayu32data_message); - - auto data_array = arrayu32data_message.value(); - auto array = std::vector(); - auto size = data_array.size(); - array.reserve(size); - std::transform( + MonikerWriteArrayU16Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = function_data->data.mutable_response(); + auto session = function_data->session; + auto control = function_data->control; + + ArrayU32Data arrayu32data_message; + packedData.UnpackTo(&arrayu32data_message); + + auto data_array = arrayu32data_message.value(); + auto array = std::vector(); + auto size = data_array.size(); + array.reserve(size); + std::transform( data_array.begin(), data_array.end(), std::back_inserter(array), @@ -1088,70 +1371,85 @@ ::grpc::Status MonikerWriteArrayU16(void* data, google::protobuf::Arena& arena, return static_cast(x); }); - auto status = library->WriteArrayU16(session, control, array.data(), size); - if (status < 0) { - std::cout << "MonikerWriteArrayU16 error: " << status << std::endl; - } - return ::grpc::Status::OK; + auto status = library->WriteArrayU16(session, control, array.data(), size); + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + */ + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteArrayU32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteArrayU32Data* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto control = function_data->control; - - ArrayU32Data arrayu32data_message; - packedData.UnpackTo(&arrayu32data_message); - - auto data_array = arrayu32data_message.value(); - auto array = const_cast(arrayu32data_message.value().data()); - auto size = data_array.size(); - - auto status = library->WriteArrayU32(session, control, array, size); - if (status < 0) { - std::cout << "MonikerWriteArrayU32 error: " << status << std::endl; - } - return ::grpc::Status::OK; + MonikerWriteArrayU32Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = function_data->data.mutable_response(); + auto session = function_data->session; + auto control = function_data->control; + + ArrayU32Data arrayu32data_message; + packedData.UnpackTo(&arrayu32data_message); + + auto data_array = arrayu32data_message.value(); + auto array = const_cast(arrayu32data_message.value().data()); + auto size = data_array.size(); + + auto status = library->WriteArrayU32(session, control, array, size); + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + */ + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteArrayU64(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteArrayU64Data* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto control = function_data->control; - - ArrayU64Data arrayu64data_message; - packedData.UnpackTo(&arrayu64data_message); - - auto data_array = arrayu64data_message.value(); - auto array = const_cast(arrayu64data_message.value().data()); - auto size = data_array.size(); - - auto status = library->WriteArrayU64(session, control, array, size); - if (status < 0) { - std::cout << "MonikerWriteArrayU64 error: " << status << std::endl; - } - return ::grpc::Status::OK; + MonikerWriteArrayU64Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = function_data->data.mutable_response(); + auto session = function_data->session; + auto control = function_data->control; + + ArrayU64Data arrayu64data_message; + packedData.UnpackTo(&arrayu64data_message); + + auto data_array = arrayu64data_message.value(); + auto array = const_cast(arrayu64data_message.value().data()); + auto size = data_array.size(); + + auto status = library->WriteArrayU64(session, control, array, size); + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + */ + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteArrayU8(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteArrayU8Data* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto control = function_data->control; - - ArrayU32Data arrayu32data_message; - packedData.UnpackTo(&arrayu32data_message); - - auto data_array = arrayu32data_message.value(); - auto array = std::vector(); - auto size = data_array.size(); - array.reserve(size); - std::transform( + MonikerWriteArrayU8Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = function_data->data.mutable_response(); + auto session = function_data->session; + auto control = function_data->control; + + ArrayU32Data arrayu32data_message; + packedData.UnpackTo(&arrayu32data_message); + + auto data_array = arrayu32data_message.value(); + auto array = std::vector(); + auto size = data_array.size(); + array.reserve(size); + std::transform( data_array.begin(), data_array.end(), std::back_inserter(array), @@ -1163,4317 +1461,4379 @@ ::grpc::Status MonikerWriteArrayU8(void* data, google::protobuf::Arena& arena, g return static_cast(x); }); - auto status = library->WriteArrayU8(session, control, array.data(), size); - if (status < 0) { - std::cout << "MonikerWriteArrayU8 error: " << status << std::endl; - } - return ::grpc::Status::OK; + auto status = library->WriteArrayU8(session, control, array.data(), size); + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + */ + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteBool(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteBoolData* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto control = function_data->control; - - BoolData booldata_message; - packedData.UnpackTo(&booldata_message); - auto value = booldata_message.value(); - - auto status = library->WriteBool(session, control, value); - if (status < 0) { - std::cout << "MonikerWriteBool error: " << status << std::endl; - } - return ::grpc::Status::OK; + MonikerWriteBoolData* function_data = static_cast(data); + auto library = function_data->library; + auto response = function_data->data.mutable_response(); + auto session = function_data->session; + auto control = function_data->control; + + BoolData booldata_message; + packedData.UnpackTo(&booldata_message); + auto value = booldata_message.value(); + + auto status = library->WriteBool(session, control, value); + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + */ + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteDbl(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteDblData* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto control = function_data->control; - - DoubleData doubledata_message; - packedData.UnpackTo(&doubledata_message); - auto value = doubledata_message.value(); - - auto status = library->WriteDbl(session, control, value); - if (status < 0) { - std::cout << "MonikerWriteDbl error: " << status << std::endl; - } - return ::grpc::Status::OK; + MonikerWriteDblData* function_data = static_cast(data); + auto library = function_data->library; + auto response = function_data->data.mutable_response(); + auto session = function_data->session; + auto control = function_data->control; + + DoubleData doubledata_message; + packedData.UnpackTo(&doubledata_message); + auto value = doubledata_message.value(); + + auto status = library->WriteDbl(session, control, value); + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + */ + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteI16(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteI16Data* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto control = function_data->control; - - I32Data i32data_message; - packedData.UnpackTo(&i32data_message); - auto value = i32data_message.value(); - if (value < std::numeric_limits::min() || value > std::numeric_limits::max()) { - std::string message("value " + std::to_string(value) + " doesn't fit in datatype int16_t"); - throw nidevice_grpc::ValueOutOfRangeException(message); - } + MonikerWriteI16Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = function_data->data.mutable_response(); + auto session = function_data->session; + auto control = function_data->control; + + I32Data i32data_message; + packedData.UnpackTo(&i32data_message); + auto value = i32data_message.value(); + if (value < std::numeric_limits::min() || value > std::numeric_limits::max()) { + std::string message("value " + std::to_string(value) + " doesn't fit in datatype int16_t"); + throw nidevice_grpc::ValueOutOfRangeException(message); + } - auto status = library->WriteI16(session, control, value); - if (status < 0) { - std::cout << "MonikerWriteI16 error: " << status << std::endl; - } - return ::grpc::Status::OK; + auto status = library->WriteI16(session, control, value); + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + */ + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteI32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteI32Data* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto control = function_data->control; - - I32Data i32data_message; - packedData.UnpackTo(&i32data_message); - auto value = i32data_message.value(); - - auto status = library->WriteI32(session, control, value); - if (status < 0) { - std::cout << "MonikerWriteI32 error: " << status << std::endl; - } - return ::grpc::Status::OK; + MonikerWriteI32Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = function_data->data.mutable_response(); + auto session = function_data->session; + auto control = function_data->control; + + I32Data i32data_message; + packedData.UnpackTo(&i32data_message); + auto value = i32data_message.value(); + + auto status = library->WriteI32(session, control, value); + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + */ + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteI64(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteI64Data* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto control = function_data->control; - - I64Data i64data_message; - packedData.UnpackTo(&i64data_message); - auto value = i64data_message.value(); - - auto status = library->WriteI64(session, control, value); - if (status < 0) { - std::cout << "MonikerWriteI64 error: " << status << std::endl; - } - return ::grpc::Status::OK; + MonikerWriteI64Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = function_data->data.mutable_response(); + auto session = function_data->session; + auto control = function_data->control; + + I64Data i64data_message; + packedData.UnpackTo(&i64data_message); + auto value = i64data_message.value(); + + auto status = library->WriteI64(session, control, value); + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + */ + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteI8(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteI8Data* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto control = function_data->control; - - I32Data i32data_message; - packedData.UnpackTo(&i32data_message); - auto value = i32data_message.value(); - if (value < std::numeric_limits::min() || value > std::numeric_limits::max()) { - std::string message("value " + std::to_string(value) + " doesn't fit in datatype int8_t"); - throw nidevice_grpc::ValueOutOfRangeException(message); - } + MonikerWriteI8Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = function_data->data.mutable_response(); + auto session = function_data->session; + auto control = function_data->control; + + I32Data i32data_message; + packedData.UnpackTo(&i32data_message); + auto value = i32data_message.value(); + if (value < std::numeric_limits::min() || value > std::numeric_limits::max()) { + std::string message("value " + std::to_string(value) + " doesn't fit in datatype int8_t"); + throw nidevice_grpc::ValueOutOfRangeException(message); + } - auto status = library->WriteI8(session, control, value); - if (status < 0) { - std::cout << "MonikerWriteI8 error: " << status << std::endl; - } - return ::grpc::Status::OK; + auto status = library->WriteI8(session, control, value); + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + */ + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteSgl(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteSglData* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto control = function_data->control; - - FloatData floatdata_message; - packedData.UnpackTo(&floatdata_message); - auto value = floatdata_message.value(); - - auto status = library->WriteSgl(session, control, value); - if (status < 0) { - std::cout << "MonikerWriteSgl error: " << status << std::endl; - } - return ::grpc::Status::OK; + MonikerWriteSglData* function_data = static_cast(data); + auto library = function_data->library; + auto response = function_data->data.mutable_response(); + auto session = function_data->session; + auto control = function_data->control; + + FloatData floatdata_message; + packedData.UnpackTo(&floatdata_message); + auto value = floatdata_message.value(); + + auto status = library->WriteSgl(session, control, value); + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + */ + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteU16(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteU16Data* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto control = function_data->control; - - U32Data u32data_message; - packedData.UnpackTo(&u32data_message); - auto value = u32data_message.value(); - if (value < std::numeric_limits::min() || value > std::numeric_limits::max()) { - std::string message("value " + std::to_string(value) + " doesn't fit in datatype uint16_t"); - throw nidevice_grpc::ValueOutOfRangeException(message); - } + MonikerWriteU16Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = function_data->data.mutable_response(); + auto session = function_data->session; + auto control = function_data->control; + + U32Data u32data_message; + packedData.UnpackTo(&u32data_message); + auto value = u32data_message.value(); + if (value < std::numeric_limits::min() || value > std::numeric_limits::max()) { + std::string message("value " + std::to_string(value) + " doesn't fit in datatype uint16_t"); + throw nidevice_grpc::ValueOutOfRangeException(message); + } - auto status = library->WriteU16(session, control, value); - if (status < 0) { - std::cout << "MonikerWriteU16 error: " << status << std::endl; - } - return ::grpc::Status::OK; + auto status = library->WriteU16(session, control, value); + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + */ + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteU32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteU32Data* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto control = function_data->control; - - U32Data u32data_message; - packedData.UnpackTo(&u32data_message); - auto value = u32data_message.value(); - - auto status = library->WriteU32(session, control, value); - if (status < 0) { - std::cout << "MonikerWriteU32 error: " << status << std::endl; - } - return ::grpc::Status::OK; + MonikerWriteU32Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = function_data->data.mutable_response(); + auto session = function_data->session; + auto control = function_data->control; + + U32Data u32data_message; + packedData.UnpackTo(&u32data_message); + auto value = u32data_message.value(); + + auto status = library->WriteU32(session, control, value); + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + */ + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteU64(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteU64Data* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto control = function_data->control; - - U64Data u64data_message; - packedData.UnpackTo(&u64data_message); - auto value = u64data_message.value(); - - auto status = library->WriteU64(session, control, value); - if (status < 0) { - std::cout << "MonikerWriteU64 error: " << status << std::endl; - } - return ::grpc::Status::OK; + MonikerWriteU64Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = function_data->data.mutable_response(); + auto session = function_data->session; + auto control = function_data->control; + + U64Data u64data_message; + packedData.UnpackTo(&u64data_message); + auto value = u64data_message.value(); + + auto status = library->WriteU64(session, control, value); + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + */ + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteU8Data* function_data = static_cast(data); - auto library = function_data->library; - auto session = function_data->session; - auto control = function_data->control; - - U32Data u32data_message; - packedData.UnpackTo(&u32data_message); - auto value = u32data_message.value(); - if (value < std::numeric_limits::min() || value > std::numeric_limits::max()) { - std::string message("value " + std::to_string(value) + " doesn't fit in datatype uint8_t"); - throw nidevice_grpc::ValueOutOfRangeException(message); - } - - auto status = library->WriteU8(session, control, value); - if (status < 0) { - std::cout << "MonikerWriteU8 error: " << status << std::endl; - } - return ::grpc::Status::OK; -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::Abort(::grpc::ServerContext* context, const AbortRequest* request, AbortResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - auto status = library_->Abort(session); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + MonikerWriteU8Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = function_data->data.mutable_response(); + auto session = function_data->session; + auto control = function_data->control; + + U32Data u32data_message; + packedData.UnpackTo(&u32data_message); + auto value = u32data_message.value(); + if (value < std::numeric_limits::min() || value > std::numeric_limits::max()) { + std::string message("value " + std::to_string(value) + " doesn't fit in datatype uint8_t"); + throw nidevice_grpc::ValueOutOfRangeException(message); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::AcknowledgeIrqs(::grpc::ServerContext* context, const AcknowledgeIrqsRequest* request, AcknowledgeIrqsResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t irqs = request->irqs(); - auto status = library_->AcknowledgeIrqs(session, irqs); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); + auto status = library->WriteU8(session, control, value); + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + */ return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::Close(::grpc::ServerContext* context, const CloseRequest* request, CloseResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::Abort(::grpc::ServerContext* context, const AbortRequest* request, AbortResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + auto status = library_->Abort(session); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t attribute; - switch (request->attribute_enum_case()) { - case nifpga_grpc::CloseRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - break; + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::AcknowledgeIrqs(::grpc::ServerContext* context, const AcknowledgeIrqsRequest* request, AcknowledgeIrqsResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t irqs = request->irqs(); + auto status = library_->AcknowledgeIrqs(session, irqs); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); } - case nifpga_grpc::CloseRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - break; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::Close(::grpc::ServerContext* context, const CloseRequest* request, CloseResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t attribute; + switch (request->attribute_enum_case()) { + case nifpga_grpc::CloseRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + break; + } + case nifpga_grpc::CloseRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + break; + } + case nifpga_grpc::CloseRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nifpga_grpc::CloseRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + session_repository_->remove_session(session_grpc_session.name()); + auto status = library_->Close(session, attribute); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); } + response->set_status(status); + return ::grpc::Status::OK; } - - session_repository_->remove_session(session_grpc_session.name()); - auto status = library_->Close(session, attribute); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::CommitFifoConfiguration(::grpc::ServerContext* context, const CommitFifoConfigurationRequest* request, CommitFifoConfigurationResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - auto status = library_->CommitFifoConfiguration(session, fifo); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::CommitFifoConfiguration(::grpc::ServerContext* context, const CommitFifoConfigurationRequest* request, CommitFifoConfigurationResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + auto status = library_->CommitFifoConfiguration(session, fifo); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ConfigureFifo(::grpc::ServerContext* context, const ConfigureFifoRequest* request, ConfigureFifoResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - size_t depth = request->depth(); - auto status = library_->ConfigureFifo(session, fifo, depth); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ConfigureFifo(::grpc::ServerContext* context, const ConfigureFifoRequest* request, ConfigureFifoResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + size_t depth = request->depth(); + auto status = library_->ConfigureFifo(session, fifo, depth); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ConfigureFifo2(::grpc::ServerContext* context, const ConfigureFifo2Request* request, ConfigureFifo2Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - size_t requested_depth = request->requested_depth(); - size_t actual_depth{}; - auto status = library_->ConfigureFifo2(session, fifo, requested_depth, &actual_depth); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_actual_depth(actual_depth); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ConfigureFifo2(::grpc::ServerContext* context, const ConfigureFifo2Request* request, ConfigureFifo2Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + size_t requested_depth = request->requested_depth(); + size_t actual_depth {}; + auto status = library_->ConfigureFifo2(session, fifo, requested_depth, &actual_depth); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_actual_depth(actual_depth); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::Download(::grpc::ServerContext* context, const DownloadRequest* request, DownloadResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - auto status = library_->Download(session); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::Download(::grpc::ServerContext* context, const DownloadRequest* request, DownloadResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + auto status = library_->Download(session); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::FindFifo(::grpc::ServerContext* context, const FindFifoRequest* request, FindFifoResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - auto fifo_name_mbcs = convert_from_grpc(request->fifo_name()); - char* fifo_name = (char*)fifo_name_mbcs.c_str(); - uint32_t fifo_number{}; - auto status = library_->FindFifo(session, fifo_name, &fifo_number); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_fifo_number(fifo_number); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::FindFifo(::grpc::ServerContext* context, const FindFifoRequest* request, FindFifoResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + auto fifo_name_mbcs = convert_from_grpc(request->fifo_name()); + char* fifo_name = (char*)fifo_name_mbcs.c_str(); + uint32_t fifo_number {}; + auto status = library_->FindFifo(session, fifo_name, &fifo_number); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_fifo_number(fifo_number); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::FindRegister(::grpc::ServerContext* context, const FindRegisterRequest* request, FindRegisterResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - auto register_name_mbcs = convert_from_grpc(request->register_name()); - char* register_name = (char*)register_name_mbcs.c_str(); - uint32_t register_offset{}; - auto status = library_->FindRegister(session, register_name, ®ister_offset); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_register_offset(register_offset); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::FindRegister(::grpc::ServerContext* context, const FindRegisterRequest* request, FindRegisterResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + auto register_name_mbcs = convert_from_grpc(request->register_name()); + char* register_name = (char*)register_name_mbcs.c_str(); + uint32_t register_offset {}; + auto status = library_->FindRegister(session, register_name, ®ister_offset); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_register_offset(register_offset); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::GetBitfileSignature(::grpc::ServerContext* context, const GetBitfileSignatureRequest* request, GetBitfileSignatureResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t signature{}; - size_t signature_size{}; - auto status = library_->GetBitfileSignature(session, &signature, &signature_size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_signature(signature); - response->set_signature_size(signature_size); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::GetBitfileSignature(::grpc::ServerContext* context, const GetBitfileSignatureRequest* request, GetBitfileSignatureResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t signature {}; + size_t signature_size {}; + auto status = library_->GetBitfileSignature(session, &signature, &signature_size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_signature(signature); + response->set_signature_size(signature_size); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::GetFifoPropertyI32(::grpc::ServerContext* context, const GetFifoPropertyI32Request* request, GetFifoPropertyI32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - NiFpga_FifoProperty property; - switch (request->property_enum_case()) { - case nifpga_grpc::GetFifoPropertyI32Request::PropertyEnumCase::kProperty: { - property = static_cast(request->property()); - break; - } - case nifpga_grpc::GetFifoPropertyI32Request::PropertyEnumCase::kPropertyRaw: { - property = static_cast(request->property_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::GetFifoPropertyI32(::grpc::ServerContext* context, const GetFifoPropertyI32Request* request, GetFifoPropertyI32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + NiFpga_FifoProperty property; + switch (request->property_enum_case()) { + case nifpga_grpc::GetFifoPropertyI32Request::PropertyEnumCase::kProperty: { + property = static_cast(request->property()); + break; + } + case nifpga_grpc::GetFifoPropertyI32Request::PropertyEnumCase::kPropertyRaw: { + property = static_cast(request->property_raw()); + break; + } + case nifpga_grpc::GetFifoPropertyI32Request::PropertyEnumCase::PROPERTY_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for property was not specified or out of range"); + break; + } } - case nifpga_grpc::GetFifoPropertyI32Request::PropertyEnumCase::PROPERTY_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for property was not specified or out of range"); - break; + + int32_t value {}; + auto status = library_->GetFifoPropertyI32(session, fifo, property, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; } - - int32_t value{}; - auto status = library_->GetFifoPropertyI32(session, fifo, property, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::GetFifoPropertyI64(::grpc::ServerContext* context, const GetFifoPropertyI64Request* request, GetFifoPropertyI64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - NiFpga_FifoProperty property; - switch (request->property_enum_case()) { - case nifpga_grpc::GetFifoPropertyI64Request::PropertyEnumCase::kProperty: { - property = static_cast(request->property()); - break; - } - case nifpga_grpc::GetFifoPropertyI64Request::PropertyEnumCase::kPropertyRaw: { - property = static_cast(request->property_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::GetFifoPropertyI64(::grpc::ServerContext* context, const GetFifoPropertyI64Request* request, GetFifoPropertyI64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + NiFpga_FifoProperty property; + switch (request->property_enum_case()) { + case nifpga_grpc::GetFifoPropertyI64Request::PropertyEnumCase::kProperty: { + property = static_cast(request->property()); + break; + } + case nifpga_grpc::GetFifoPropertyI64Request::PropertyEnumCase::kPropertyRaw: { + property = static_cast(request->property_raw()); + break; + } + case nifpga_grpc::GetFifoPropertyI64Request::PropertyEnumCase::PROPERTY_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for property was not specified or out of range"); + break; + } } - case nifpga_grpc::GetFifoPropertyI64Request::PropertyEnumCase::PROPERTY_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for property was not specified or out of range"); - break; + + int64_t value {}; + auto status = library_->GetFifoPropertyI64(session, fifo, property, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; } - - int64_t value{}; - auto status = library_->GetFifoPropertyI64(session, fifo, property, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::GetFifoPropertyU32(::grpc::ServerContext* context, const GetFifoPropertyU32Request* request, GetFifoPropertyU32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - NiFpga_FifoProperty property; - switch (request->property_enum_case()) { - case nifpga_grpc::GetFifoPropertyU32Request::PropertyEnumCase::kProperty: { - property = static_cast(request->property()); - break; - } - case nifpga_grpc::GetFifoPropertyU32Request::PropertyEnumCase::kPropertyRaw: { - property = static_cast(request->property_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::GetFifoPropertyU32(::grpc::ServerContext* context, const GetFifoPropertyU32Request* request, GetFifoPropertyU32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + NiFpga_FifoProperty property; + switch (request->property_enum_case()) { + case nifpga_grpc::GetFifoPropertyU32Request::PropertyEnumCase::kProperty: { + property = static_cast(request->property()); + break; + } + case nifpga_grpc::GetFifoPropertyU32Request::PropertyEnumCase::kPropertyRaw: { + property = static_cast(request->property_raw()); + break; + } + case nifpga_grpc::GetFifoPropertyU32Request::PropertyEnumCase::PROPERTY_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for property was not specified or out of range"); + break; + } } - case nifpga_grpc::GetFifoPropertyU32Request::PropertyEnumCase::PROPERTY_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for property was not specified or out of range"); - break; + + uint32_t value {}; + auto status = library_->GetFifoPropertyU32(session, fifo, property, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; } - - uint32_t value{}; - auto status = library_->GetFifoPropertyU32(session, fifo, property, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::GetFifoPropertyU64(::grpc::ServerContext* context, const GetFifoPropertyU64Request* request, GetFifoPropertyU64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - NiFpga_FifoProperty property; - switch (request->property_enum_case()) { - case nifpga_grpc::GetFifoPropertyU64Request::PropertyEnumCase::kProperty: { - property = static_cast(request->property()); - break; - } - case nifpga_grpc::GetFifoPropertyU64Request::PropertyEnumCase::kPropertyRaw: { - property = static_cast(request->property_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::GetFifoPropertyU64(::grpc::ServerContext* context, const GetFifoPropertyU64Request* request, GetFifoPropertyU64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + NiFpga_FifoProperty property; + switch (request->property_enum_case()) { + case nifpga_grpc::GetFifoPropertyU64Request::PropertyEnumCase::kProperty: { + property = static_cast(request->property()); + break; + } + case nifpga_grpc::GetFifoPropertyU64Request::PropertyEnumCase::kPropertyRaw: { + property = static_cast(request->property_raw()); + break; + } + case nifpga_grpc::GetFifoPropertyU64Request::PropertyEnumCase::PROPERTY_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for property was not specified or out of range"); + break; + } } - case nifpga_grpc::GetFifoPropertyU64Request::PropertyEnumCase::PROPERTY_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for property was not specified or out of range"); - break; + + uint64_t value {}; + auto status = library_->GetFifoPropertyU64(session, fifo, property, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; } - - uint64_t value{}; - auto status = library_->GetFifoPropertyU64(session, fifo, property, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::GetFpgaViState(::grpc::ServerContext* context, const GetFpgaViStateRequest* request, GetFpgaViStateResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t state{}; - auto status = library_->GetFpgaViState(session, &state); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_state(static_cast(state)); - response->set_state_raw(state); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::GetFpgaViState(::grpc::ServerContext* context, const GetFpgaViStateRequest* request, GetFpgaViStateResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t state {}; + auto status = library_->GetFpgaViState(session, &state); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_state(static_cast(state)); + response->set_state_raw(state); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::Open(::grpc::ServerContext* context, const OpenRequest* request, OpenResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto bitfile_mbcs = convert_from_grpc(request->bitfile()); - char* bitfile = (char*)bitfile_mbcs.c_str(); - auto signature_mbcs = convert_from_grpc(request->signature()); - char* signature = (char*)signature_mbcs.c_str(); - auto resource_mbcs = convert_from_grpc(request->resource()); - char* resource = (char*)resource_mbcs.c_str(); - uint32_t attribute; - switch (request->attribute_enum_case()) { - case nifpga_grpc::OpenRequest::AttributeEnumCase::kAttributeMapped: { - auto attribute_imap_it = openattribute_input_map_.find(request->attribute_mapped()); - if (attribute_imap_it == openattribute_input_map_.end()) { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute_mapped was not specified or out of range."); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::Open(::grpc::ServerContext* context, const OpenRequest* request, OpenResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto bitfile_mbcs = convert_from_grpc(request->bitfile()); + char* bitfile = (char*)bitfile_mbcs.c_str(); + auto signature_mbcs = convert_from_grpc(request->signature()); + char* signature = (char*)signature_mbcs.c_str(); + auto resource_mbcs = convert_from_grpc(request->resource()); + char* resource = (char*)resource_mbcs.c_str(); + uint32_t attribute; + switch (request->attribute_enum_case()) { + case nifpga_grpc::OpenRequest::AttributeEnumCase::kAttributeMapped: { + auto attribute_imap_it = openattribute_input_map_.find(request->attribute_mapped()); + if (attribute_imap_it == openattribute_input_map_.end()) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute_mapped was not specified or out of range."); + } + attribute = static_cast(attribute_imap_it->second); + break; } - attribute = static_cast(attribute_imap_it->second); - break; - } - case nifpga_grpc::OpenRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - break; - } - case nifpga_grpc::OpenRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - auto initialization_behavior = request->initialization_behavior(); - - bool new_session_initialized{}; - auto init_lambda = [&]() { - NiFpga_Session session; - auto status = library_->Open(bitfile, signature, resource, attribute, &session); - return std::make_tuple(status, session); - }; - std::string grpc_device_session_name = request->session_name(); - // Capture the library shared_ptr by value. Do not capture `this` or any references. - LibrarySharedPtr library = library_; - auto cleanup_lambda = [library](NiFpga_Session id) { library->Close(id, 0); }; - int status = session_repository_->add_session(grpc_device_session_name, init_lambda, cleanup_lambda, initialization_behavior, &new_session_initialized); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, 0); - } - response->set_status(status); - response->mutable_session()->set_name(grpc_device_session_name); - response->set_new_session_initialized(new_session_initialized); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + case nifpga_grpc::OpenRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + break; + } + case nifpga_grpc::OpenRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReadArrayBool(::grpc::ServerContext* context, const ReadArrayBoolRequest* request, ReadArrayBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - size_t size = request->size(); - std::vector array(size, NiFpga_Bool()); - auto status = library_->ReadArrayBool(session, indicator, array.data(), size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + auto initialization_behavior = request->initialization_behavior(); + + bool new_session_initialized {}; + auto init_lambda = [&] () { + NiFpga_Session session; + auto status = library_->Open(bitfile, signature, resource, attribute, &session); + return std::make_tuple(status, session); + }; + std::string grpc_device_session_name = request->session_name(); + // Capture the library shared_ptr by value. Do not capture `this` or any references. + LibrarySharedPtr library = library_; + auto cleanup_lambda = [library] (NiFpga_Session id) { library->Close(id, 0); }; + int status = session_repository_->add_session(grpc_device_session_name, init_lambda, cleanup_lambda, initialization_behavior, &new_session_initialized); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, 0); + } + response->set_status(status); + response->mutable_session()->set_name(grpc_device_session_name); + response->set_new_session_initialized(new_session_initialized); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - convert_to_grpc(array, response->mutable_array()); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginReadArrayBool(::grpc::ServerContext* context, const BeginReadArrayBoolRequest* request, BeginReadArrayBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - size_t size = request->size(); - - auto data = std::make_unique(); - data->session = session; - data->indicator = indicator; - data->size = size; - data->library = std::shared_ptr(library_); - - data->data.mutable_value()->Reserve(request->size()); - data->data.mutable_value()->Resize(request->size(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayBool", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReadArrayBool(::grpc::ServerContext* context, const ReadArrayBoolRequest* request, ReadArrayBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + size_t size = request->size(); + std::vector array(size, NiFpga_Bool()); + auto status = library_->ReadArrayBool(session, indicator, array.data(), size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + convert_to_grpc(array, response->mutable_array()); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginReadArrayBool(::grpc::ServerContext* context, const BeginReadArrayBoolRequest* request, BeginReadArrayBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + size_t size = request->size(); + + auto data = std::make_unique(); + data->session = session; + data->indicator = indicator; + data->size = size; + data->library = std::shared_ptr(library_); + + data->data.mutable_response()->mutable_array()->Reserve(request->size()); + data->data.mutable_response()->mutable_array()->Resize(request->size(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayBool", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReadArrayDbl(::grpc::ServerContext* context, const ReadArrayDblRequest* request, ReadArrayDblResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - size_t size = request->size(); - response->mutable_array()->Resize(size, 0); - double* array = response->mutable_array()->mutable_data(); - auto status = library_->ReadArrayDbl(session, indicator, array, size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginReadArrayDbl(::grpc::ServerContext* context, const BeginReadArrayDblRequest* request, BeginReadArrayDblResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - size_t size = request->size(); - - auto data = std::make_unique(); - data->session = session; - data->indicator = indicator; - data->size = size; - data->library = std::shared_ptr(library_); - - data->data.mutable_value()->Reserve(request->size()); - data->data.mutable_value()->Resize(request->size(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayDbl", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReadArrayI16(::grpc::ServerContext* context, const ReadArrayI16Request* request, ReadArrayI16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - size_t size = request->size(); - std::vector array(size); - auto status = library_->ReadArrayI16(session, indicator, array.data(), size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReadArrayDbl(::grpc::ServerContext* context, const ReadArrayDblRequest* request, ReadArrayDblResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - response->set_status(status); - response->mutable_array()->Clear(); - response->mutable_array()->Reserve(size); - std::transform( - array.begin(), - array.begin() + size, - google::protobuf::RepeatedFieldBackInserter(response->mutable_array()), - [&](auto x) { - return x; - }); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginReadArrayI16(::grpc::ServerContext* context, const BeginReadArrayI16Request* request, BeginReadArrayI16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - size_t size = request->size(); - - auto data = std::make_unique(); - data->session = session; - data->indicator = indicator; - data->size = size; - data->library = std::shared_ptr(library_); - - data->data.mutable_value()->Reserve(request->size()); - data->data.mutable_value()->Resize(request->size(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayI16", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReadArrayI32(::grpc::ServerContext* context, const ReadArrayI32Request* request, ReadArrayI32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - size_t size = request->size(); - response->mutable_array()->Resize(size, 0); - int32_t* array = response->mutable_array()->mutable_data(); - auto status = library_->ReadArrayI32(session, indicator, array, size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginReadArrayI32(::grpc::ServerContext* context, const BeginReadArrayI32Request* request, BeginReadArrayI32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - size_t size = request->size(); - - auto data = std::make_unique(); - data->session = session; - data->indicator = indicator; - data->size = size; - data->library = std::shared_ptr(library_); - - data->data.mutable_value()->Reserve(request->size()); - data->data.mutable_value()->Resize(request->size(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayI32", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReadArrayI64(::grpc::ServerContext* context, const ReadArrayI64Request* request, ReadArrayI64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - size_t size = request->size(); - response->mutable_array()->Resize(size, 0); - int64_t* array = response->mutable_array()->mutable_data(); - auto status = library_->ReadArrayI64(session, indicator, array, size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginReadArrayI64(::grpc::ServerContext* context, const BeginReadArrayI64Request* request, BeginReadArrayI64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - size_t size = request->size(); - - auto data = std::make_unique(); - data->session = session; - data->indicator = indicator; - data->size = size; - data->library = std::shared_ptr(library_); - - data->data.mutable_value()->Reserve(request->size()); - data->data.mutable_value()->Resize(request->size(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayI64", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReadArrayI8(::grpc::ServerContext* context, const ReadArrayI8Request* request, ReadArrayI8Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - size_t size = request->size(); - std::vector array(size); - auto status = library_->ReadArrayI8(session, indicator, array.data(), size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + size_t size = request->size(); + response->mutable_array()->Resize(size, 0); + double* array = response->mutable_array()->mutable_data(); + auto status = library_->ReadArrayDbl(session, indicator, array, size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - response->mutable_array()->Clear(); - response->mutable_array()->Reserve(size); - std::transform( - array.begin(), - array.begin() + size, - google::protobuf::RepeatedFieldBackInserter(response->mutable_array()), - [&](auto x) { - return x; - }); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginReadArrayI8(::grpc::ServerContext* context, const BeginReadArrayI8Request* request, BeginReadArrayI8Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - size_t size = request->size(); - - auto data = std::make_unique(); - data->session = session; - data->indicator = indicator; - data->size = size; - data->library = std::shared_ptr(library_); - - data->data.mutable_value()->Reserve(request->size()); - data->data.mutable_value()->Resize(request->size(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayI8", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReadArraySgl(::grpc::ServerContext* context, const ReadArraySglRequest* request, ReadArraySglResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - size_t size = request->size(); - response->mutable_array()->Resize(size, 0); - float* array = response->mutable_array()->mutable_data(); - auto status = library_->ReadArraySgl(session, indicator, array, size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginReadArraySgl(::grpc::ServerContext* context, const BeginReadArraySglRequest* request, BeginReadArraySglResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - size_t size = request->size(); - - auto data = std::make_unique(); - data->session = session; - data->indicator = indicator; - data->size = size; - data->library = std::shared_ptr(library_); - - data->data.mutable_value()->Reserve(request->size()); - data->data.mutable_value()->Resize(request->size(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArraySgl", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReadArrayU16(::grpc::ServerContext* context, const ReadArrayU16Request* request, ReadArrayU16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - size_t size = request->size(); - std::vector array(size); - auto status = library_->ReadArrayU16(session, indicator, array.data(), size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginReadArrayDbl(::grpc::ServerContext* context, const BeginReadArrayDblRequest* request, BeginReadArrayDblResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + size_t size = request->size(); + + auto data = std::make_unique(); + data->session = session; + data->indicator = indicator; + data->size = size; + data->library = std::shared_ptr(library_); + + data->data.mutable_response()->mutable_array()->Reserve(request->size()); + data->data.mutable_response()->mutable_array()->Resize(request->size(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayDbl", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - response->mutable_array()->Clear(); - response->mutable_array()->Reserve(size); - std::transform( - array.begin(), - array.begin() + size, - google::protobuf::RepeatedFieldBackInserter(response->mutable_array()), - [&](auto x) { - return x; - }); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginReadArrayU16(::grpc::ServerContext* context, const BeginReadArrayU16Request* request, BeginReadArrayU16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - size_t size = request->size(); - - auto data = std::make_unique(); - data->session = session; - data->indicator = indicator; - data->size = size; - data->library = std::shared_ptr(library_); - - data->data.mutable_value()->Reserve(request->size()); - data->data.mutable_value()->Resize(request->size(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayU16", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReadArrayI16(::grpc::ServerContext* context, const ReadArrayI16Request* request, ReadArrayI16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + size_t size = request->size(); + std::vector array(size); + auto status = library_->ReadArrayI16(session, indicator, array.data(), size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->mutable_array()->Clear(); + response->mutable_array()->Reserve(size); + std::transform( + array.begin(), + array.begin() + size, + google::protobuf::RepeatedFieldBackInserter(response->mutable_array()), + [&](auto x) { + return x; + }); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReadArrayU32(::grpc::ServerContext* context, const ReadArrayU32Request* request, ReadArrayU32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - size_t size = request->size(); - response->mutable_array()->Resize(size, 0); - uint32_t* array = response->mutable_array()->mutable_data(); - auto status = library_->ReadArrayU32(session, indicator, array, size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginReadArrayI16(::grpc::ServerContext* context, const BeginReadArrayI16Request* request, BeginReadArrayI16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + size_t size = request->size(); + + auto data = std::make_unique(); + data->session = session; + data->indicator = indicator; + data->size = size; + data->library = std::shared_ptr(library_); + + data->data.mutable_response()->mutable_array()->Reserve(request->size()); + data->data.mutable_response()->mutable_array()->Resize(request->size(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayI16", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginReadArrayU32(::grpc::ServerContext* context, const BeginReadArrayU32Request* request, BeginReadArrayU32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - size_t size = request->size(); - - auto data = std::make_unique(); - data->session = session; - data->indicator = indicator; - data->size = size; - data->library = std::shared_ptr(library_); - - data->data.mutable_value()->Reserve(request->size()); - data->data.mutable_value()->Resize(request->size(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayU32", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReadArrayI32(::grpc::ServerContext* context, const ReadArrayI32Request* request, ReadArrayI32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + size_t size = request->size(); + response->mutable_array()->Resize(size, 0); + int32_t* array = response->mutable_array()->mutable_data(); + auto status = library_->ReadArrayI32(session, indicator, array, size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReadArrayU64(::grpc::ServerContext* context, const ReadArrayU64Request* request, ReadArrayU64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - size_t size = request->size(); - response->mutable_array()->Resize(size, 0); - uint64_t* array = response->mutable_array()->mutable_data(); - auto status = library_->ReadArrayU64(session, indicator, array, size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginReadArrayI32(::grpc::ServerContext* context, const BeginReadArrayI32Request* request, BeginReadArrayI32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + size_t size = request->size(); + + auto data = std::make_unique(); + data->session = session; + data->indicator = indicator; + data->size = size; + data->library = std::shared_ptr(library_); + + data->data.mutable_response()->mutable_array()->Reserve(request->size()); + data->data.mutable_response()->mutable_array()->Resize(request->size(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayI32", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginReadArrayU64(::grpc::ServerContext* context, const BeginReadArrayU64Request* request, BeginReadArrayU64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - size_t size = request->size(); - - auto data = std::make_unique(); - data->session = session; - data->indicator = indicator; - data->size = size; - data->library = std::shared_ptr(library_); - - data->data.mutable_value()->Reserve(request->size()); - data->data.mutable_value()->Resize(request->size(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayU64", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReadArrayI64(::grpc::ServerContext* context, const ReadArrayI64Request* request, ReadArrayI64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + size_t size = request->size(); + response->mutable_array()->Resize(size, 0); + int64_t* array = response->mutable_array()->mutable_data(); + auto status = library_->ReadArrayI64(session, indicator, array, size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReadArrayU8(::grpc::ServerContext* context, const ReadArrayU8Request* request, ReadArrayU8Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - size_t size = request->size(); - std::vector array(size); - auto status = library_->ReadArrayU8(session, indicator, array.data(), size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginReadArrayI64(::grpc::ServerContext* context, const BeginReadArrayI64Request* request, BeginReadArrayI64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + size_t size = request->size(); + + auto data = std::make_unique(); + data->session = session; + data->indicator = indicator; + data->size = size; + data->library = std::shared_ptr(library_); + + data->data.mutable_response()->mutable_array()->Reserve(request->size()); + data->data.mutable_response()->mutable_array()->Resize(request->size(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayI64", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - response->mutable_array()->Clear(); - response->mutable_array()->Reserve(size); - std::transform( - array.begin(), - array.begin() + size, - google::protobuf::RepeatedFieldBackInserter(response->mutable_array()), - [&](auto x) { - return x; - }); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginReadArrayU8(::grpc::ServerContext* context, const BeginReadArrayU8Request* request, BeginReadArrayU8Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - size_t size = request->size(); - - auto data = std::make_unique(); - data->session = session; - data->indicator = indicator; - data->size = size; - data->library = std::shared_ptr(library_); - - data->data.mutable_value()->Reserve(request->size()); - data->data.mutable_value()->Resize(request->size(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayU8", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReadArrayI8(::grpc::ServerContext* context, const ReadArrayI8Request* request, ReadArrayI8Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + size_t size = request->size(); + std::vector array(size); + auto status = library_->ReadArrayI8(session, indicator, array.data(), size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->mutable_array()->Clear(); + response->mutable_array()->Reserve(size); + std::transform( + array.begin(), + array.begin() + size, + google::protobuf::RepeatedFieldBackInserter(response->mutable_array()), + [&](auto x) { + return x; + }); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReadBool(::grpc::ServerContext* context, const ReadBoolRequest* request, ReadBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - NiFpga_Bool value{}; - auto status = library_->ReadBool(session, indicator, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginReadArrayI8(::grpc::ServerContext* context, const BeginReadArrayI8Request* request, BeginReadArrayI8Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + size_t size = request->size(); + + auto data = std::make_unique(); + data->session = session; + data->indicator = indicator; + data->size = size; + data->library = std::shared_ptr(library_); + + data->data.mutable_response()->mutable_array()->Reserve(request->size()); + data->data.mutable_response()->mutable_array()->Resize(request->size(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayI8", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginReadBool(::grpc::ServerContext* context, const BeginReadBoolRequest* request, BeginReadBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - - auto data = std::make_unique(); - data->session = session; - data->indicator = indicator; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadBool", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReadArraySgl(::grpc::ServerContext* context, const ReadArraySglRequest* request, ReadArraySglResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + size_t size = request->size(); + response->mutable_array()->Resize(size, 0); + float* array = response->mutable_array()->mutable_data(); + auto status = library_->ReadArraySgl(session, indicator, array, size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReadDbl(::grpc::ServerContext* context, const ReadDblRequest* request, ReadDblResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - double value{}; - auto status = library_->ReadDbl(session, indicator, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginReadArraySgl(::grpc::ServerContext* context, const BeginReadArraySglRequest* request, BeginReadArraySglResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + size_t size = request->size(); + + auto data = std::make_unique(); + data->session = session; + data->indicator = indicator; + data->size = size; + data->library = std::shared_ptr(library_); + + data->data.mutable_response()->mutable_array()->Reserve(request->size()); + data->data.mutable_response()->mutable_array()->Resize(request->size(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArraySgl", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginReadDbl(::grpc::ServerContext* context, const BeginReadDblRequest* request, BeginReadDblResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - - auto data = std::make_unique(); - data->session = session; - data->indicator = indicator; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadDbl", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReadArrayU16(::grpc::ServerContext* context, const ReadArrayU16Request* request, ReadArrayU16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + size_t size = request->size(); + std::vector array(size); + auto status = library_->ReadArrayU16(session, indicator, array.data(), size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->mutable_array()->Clear(); + response->mutable_array()->Reserve(size); + std::transform( + array.begin(), + array.begin() + size, + google::protobuf::RepeatedFieldBackInserter(response->mutable_array()), + [&](auto x) { + return x; + }); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReadFifoBool(::grpc::ServerContext* context, const ReadFifoBoolRequest* request, ReadFifoBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - size_t number_of_elements = request->number_of_elements(); - uint32_t timeout = request->timeout(); - std::vector data(number_of_elements, NiFpga_Bool()); - size_t elements_remaining{}; - auto status = library_->ReadFifoBool(session, fifo, data.data(), number_of_elements, timeout, &elements_remaining); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - convert_to_grpc(data, response->mutable_data()); - response->set_elements_remaining(elements_remaining); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginReadArrayU16(::grpc::ServerContext* context, const BeginReadArrayU16Request* request, BeginReadArrayU16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + size_t size = request->size(); + + auto data = std::make_unique(); + data->session = session; + data->indicator = indicator; + data->size = size; + data->library = std::shared_ptr(library_); + + data->data.mutable_response()->mutable_array()->Reserve(request->size()); + data->data.mutable_response()->mutable_array()->Resize(request->size(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayU16", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReadFifoDbl(::grpc::ServerContext* context, const ReadFifoDblRequest* request, ReadFifoDblResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - size_t number_of_elements = request->number_of_elements(); - uint32_t timeout = request->timeout(); - response->mutable_data()->Resize(number_of_elements, 0); - double* data = response->mutable_data()->mutable_data(); - size_t elements_remaining{}; - auto status = library_->ReadFifoDbl(session, fifo, data, number_of_elements, timeout, &elements_remaining); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_elements_remaining(elements_remaining); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReadArrayU32(::grpc::ServerContext* context, const ReadArrayU32Request* request, ReadArrayU32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + size_t size = request->size(); + response->mutable_array()->Resize(size, 0); + uint32_t* array = response->mutable_array()->mutable_data(); + auto status = library_->ReadArrayU32(session, indicator, array, size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReadFifoI16(::grpc::ServerContext* context, const ReadFifoI16Request* request, ReadFifoI16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - size_t number_of_elements = request->number_of_elements(); - uint32_t timeout = request->timeout(); - std::vector data(number_of_elements); - size_t elements_remaining{}; - auto status = library_->ReadFifoI16(session, fifo, data.data(), number_of_elements, timeout, &elements_remaining); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->mutable_data()->Clear(); - response->mutable_data()->Reserve(number_of_elements); - std::transform( - data.begin(), - data.begin() + number_of_elements, - google::protobuf::RepeatedFieldBackInserter(response->mutable_data()), - [&](auto x) { - return x; - }); - response->set_elements_remaining(elements_remaining); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginReadArrayU32(::grpc::ServerContext* context, const BeginReadArrayU32Request* request, BeginReadArrayU32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + size_t size = request->size(); + + auto data = std::make_unique(); + data->session = session; + data->indicator = indicator; + data->size = size; + data->library = std::shared_ptr(library_); + + data->data.mutable_response()->mutable_array()->Reserve(request->size()); + data->data.mutable_response()->mutable_array()->Resize(request->size(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayU32", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReadFifoI32(::grpc::ServerContext* context, const ReadFifoI32Request* request, ReadFifoI32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - size_t number_of_elements = request->number_of_elements(); - uint32_t timeout = request->timeout(); - response->mutable_data()->Resize(number_of_elements, 0); - int32_t* data = response->mutable_data()->mutable_data(); - size_t elements_remaining{}; - auto status = library_->ReadFifoI32(session, fifo, data, number_of_elements, timeout, &elements_remaining); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_elements_remaining(elements_remaining); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReadArrayU64(::grpc::ServerContext* context, const ReadArrayU64Request* request, ReadArrayU64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + size_t size = request->size(); + response->mutable_array()->Resize(size, 0); + uint64_t* array = response->mutable_array()->mutable_data(); + auto status = library_->ReadArrayU64(session, indicator, array, size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReadFifoI64(::grpc::ServerContext* context, const ReadFifoI64Request* request, ReadFifoI64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - size_t number_of_elements = request->number_of_elements(); - uint32_t timeout = request->timeout(); - response->mutable_data()->Resize(number_of_elements, 0); - int64_t* data = response->mutable_data()->mutable_data(); - size_t elements_remaining{}; - auto status = library_->ReadFifoI64(session, fifo, data, number_of_elements, timeout, &elements_remaining); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_elements_remaining(elements_remaining); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginReadArrayU64(::grpc::ServerContext* context, const BeginReadArrayU64Request* request, BeginReadArrayU64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + size_t size = request->size(); + + auto data = std::make_unique(); + data->session = session; + data->indicator = indicator; + data->size = size; + data->library = std::shared_ptr(library_); + + data->data.mutable_response()->mutable_array()->Reserve(request->size()); + data->data.mutable_response()->mutable_array()->Resize(request->size(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayU64", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReadFifoI8(::grpc::ServerContext* context, const ReadFifoI8Request* request, ReadFifoI8Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - size_t number_of_elements = request->number_of_elements(); - uint32_t timeout = request->timeout(); - std::vector data(number_of_elements); - size_t elements_remaining{}; - auto status = library_->ReadFifoI8(session, fifo, data.data(), number_of_elements, timeout, &elements_remaining); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->mutable_data()->Clear(); - response->mutable_data()->Reserve(number_of_elements); - std::transform( - data.begin(), - data.begin() + number_of_elements, - google::protobuf::RepeatedFieldBackInserter(response->mutable_data()), - [&](auto x) { - return x; - }); - response->set_elements_remaining(elements_remaining); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReadArrayU8(::grpc::ServerContext* context, const ReadArrayU8Request* request, ReadArrayU8Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + size_t size = request->size(); + std::vector array(size); + auto status = library_->ReadArrayU8(session, indicator, array.data(), size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->mutable_array()->Clear(); + response->mutable_array()->Reserve(size); + std::transform( + array.begin(), + array.begin() + size, + google::protobuf::RepeatedFieldBackInserter(response->mutable_array()), + [&](auto x) { + return x; + }); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReadFifoSgl(::grpc::ServerContext* context, const ReadFifoSglRequest* request, ReadFifoSglResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - size_t number_of_elements = request->number_of_elements(); - uint32_t timeout = request->timeout(); - response->mutable_data()->Resize(number_of_elements, 0); - float* data = response->mutable_data()->mutable_data(); - size_t elements_remaining{}; - auto status = library_->ReadFifoSgl(session, fifo, data, number_of_elements, timeout, &elements_remaining); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_elements_remaining(elements_remaining); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginReadArrayU8(::grpc::ServerContext* context, const BeginReadArrayU8Request* request, BeginReadArrayU8Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + size_t size = request->size(); + + auto data = std::make_unique(); + data->session = session; + data->indicator = indicator; + data->size = size; + data->library = std::shared_ptr(library_); + + data->data.mutable_response()->mutable_array()->Reserve(request->size()); + data->data.mutable_response()->mutable_array()->Resize(request->size(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayU8", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReadFifoU16(::grpc::ServerContext* context, const ReadFifoU16Request* request, ReadFifoU16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - size_t number_of_elements = request->number_of_elements(); - uint32_t timeout = request->timeout(); - std::vector data(number_of_elements); - size_t elements_remaining{}; - auto status = library_->ReadFifoU16(session, fifo, data.data(), number_of_elements, timeout, &elements_remaining); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->mutable_data()->Clear(); - response->mutable_data()->Reserve(number_of_elements); - std::transform( - data.begin(), - data.begin() + number_of_elements, - google::protobuf::RepeatedFieldBackInserter(response->mutable_data()), - [&](auto x) { - return x; - }); - response->set_elements_remaining(elements_remaining); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReadBool(::grpc::ServerContext* context, const ReadBoolRequest* request, ReadBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + NiFpga_Bool value {}; + auto status = library_->ReadBool(session, indicator, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReadFifoU32(::grpc::ServerContext* context, const ReadFifoU32Request* request, ReadFifoU32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - size_t number_of_elements = request->number_of_elements(); - uint32_t timeout = request->timeout(); - response->mutable_data()->Resize(number_of_elements, 0); - uint32_t* data = response->mutable_data()->mutable_data(); - size_t elements_remaining{}; - auto status = library_->ReadFifoU32(session, fifo, data, number_of_elements, timeout, &elements_remaining); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_elements_remaining(elements_remaining); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginReadBool(::grpc::ServerContext* context, const BeginReadBoolRequest* request, BeginReadBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + + auto data = std::make_unique(); + data->session = session; + data->indicator = indicator; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadBool", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReadFifoU64(::grpc::ServerContext* context, const ReadFifoU64Request* request, ReadFifoU64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - size_t number_of_elements = request->number_of_elements(); - uint32_t timeout = request->timeout(); - response->mutable_data()->Resize(number_of_elements, 0); - uint64_t* data = response->mutable_data()->mutable_data(); - size_t elements_remaining{}; - auto status = library_->ReadFifoU64(session, fifo, data, number_of_elements, timeout, &elements_remaining); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_elements_remaining(elements_remaining); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReadDbl(::grpc::ServerContext* context, const ReadDblRequest* request, ReadDblResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + double value {}; + auto status = library_->ReadDbl(session, indicator, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReadFifoU8(::grpc::ServerContext* context, const ReadFifoU8Request* request, ReadFifoU8Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - size_t number_of_elements = request->number_of_elements(); - uint32_t timeout = request->timeout(); - std::vector data(number_of_elements); - size_t elements_remaining{}; - auto status = library_->ReadFifoU8(session, fifo, data.data(), number_of_elements, timeout, &elements_remaining); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->mutable_data()->Clear(); - response->mutable_data()->Reserve(number_of_elements); - std::transform( - data.begin(), - data.begin() + number_of_elements, - google::protobuf::RepeatedFieldBackInserter(response->mutable_data()), - [&](auto x) { - return x; - }); - response->set_elements_remaining(elements_remaining); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginReadDbl(::grpc::ServerContext* context, const BeginReadDblRequest* request, BeginReadDblResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + + auto data = std::make_unique(); + data->session = session; + data->indicator = indicator; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadDbl", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReadI16(::grpc::ServerContext* context, const ReadI16Request* request, ReadI16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - int16_t value{}; - auto status = library_->ReadI16(session, indicator, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReadFifoBool(::grpc::ServerContext* context, const ReadFifoBoolRequest* request, ReadFifoBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + size_t number_of_elements = request->number_of_elements(); + uint32_t timeout = request->timeout(); + std::vector data(number_of_elements, NiFpga_Bool()); + size_t elements_remaining {}; + auto status = library_->ReadFifoBool(session, fifo, data.data(), number_of_elements, timeout, &elements_remaining); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + convert_to_grpc(data, response->mutable_data()); + response->set_elements_remaining(elements_remaining); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginReadI16(::grpc::ServerContext* context, const BeginReadI16Request* request, BeginReadI16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - - auto data = std::make_unique(); - data->session = session; - data->indicator = indicator; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadI16", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReadFifoDbl(::grpc::ServerContext* context, const ReadFifoDblRequest* request, ReadFifoDblResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + size_t number_of_elements = request->number_of_elements(); + uint32_t timeout = request->timeout(); + response->mutable_data()->Resize(number_of_elements, 0); + double* data = response->mutable_data()->mutable_data(); + size_t elements_remaining {}; + auto status = library_->ReadFifoDbl(session, fifo, data, number_of_elements, timeout, &elements_remaining); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_elements_remaining(elements_remaining); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReadI32(::grpc::ServerContext* context, const ReadI32Request* request, ReadI32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - int32_t value{}; - auto status = library_->ReadI32(session, indicator, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReadFifoI16(::grpc::ServerContext* context, const ReadFifoI16Request* request, ReadFifoI16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + size_t number_of_elements = request->number_of_elements(); + uint32_t timeout = request->timeout(); + std::vector data(number_of_elements); + size_t elements_remaining {}; + auto status = library_->ReadFifoI16(session, fifo, data.data(), number_of_elements, timeout, &elements_remaining); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->mutable_data()->Clear(); + response->mutable_data()->Reserve(number_of_elements); + std::transform( + data.begin(), + data.begin() + number_of_elements, + google::protobuf::RepeatedFieldBackInserter(response->mutable_data()), + [&](auto x) { + return x; + }); + response->set_elements_remaining(elements_remaining); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginReadI32(::grpc::ServerContext* context, const BeginReadI32Request* request, BeginReadI32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - - auto data = std::make_unique(); - data->session = session; - data->indicator = indicator; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadI32", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReadFifoI32(::grpc::ServerContext* context, const ReadFifoI32Request* request, ReadFifoI32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + size_t number_of_elements = request->number_of_elements(); + uint32_t timeout = request->timeout(); + response->mutable_data()->Resize(number_of_elements, 0); + int32_t* data = response->mutable_data()->mutable_data(); + size_t elements_remaining {}; + auto status = library_->ReadFifoI32(session, fifo, data, number_of_elements, timeout, &elements_remaining); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_elements_remaining(elements_remaining); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReadI64(::grpc::ServerContext* context, const ReadI64Request* request, ReadI64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - int64_t value{}; - auto status = library_->ReadI64(session, indicator, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReadFifoI64(::grpc::ServerContext* context, const ReadFifoI64Request* request, ReadFifoI64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + size_t number_of_elements = request->number_of_elements(); + uint32_t timeout = request->timeout(); + response->mutable_data()->Resize(number_of_elements, 0); + int64_t* data = response->mutable_data()->mutable_data(); + size_t elements_remaining {}; + auto status = library_->ReadFifoI64(session, fifo, data, number_of_elements, timeout, &elements_remaining); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_elements_remaining(elements_remaining); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginReadI64(::grpc::ServerContext* context, const BeginReadI64Request* request, BeginReadI64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - - auto data = std::make_unique(); - data->session = session; - data->indicator = indicator; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadI64", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReadFifoI8(::grpc::ServerContext* context, const ReadFifoI8Request* request, ReadFifoI8Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + size_t number_of_elements = request->number_of_elements(); + uint32_t timeout = request->timeout(); + std::vector data(number_of_elements); + size_t elements_remaining {}; + auto status = library_->ReadFifoI8(session, fifo, data.data(), number_of_elements, timeout, &elements_remaining); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->mutable_data()->Clear(); + response->mutable_data()->Reserve(number_of_elements); + std::transform( + data.begin(), + data.begin() + number_of_elements, + google::protobuf::RepeatedFieldBackInserter(response->mutable_data()), + [&](auto x) { + return x; + }); + response->set_elements_remaining(elements_remaining); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReadI8(::grpc::ServerContext* context, const ReadI8Request* request, ReadI8Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - int8_t value{}; - auto status = library_->ReadI8(session, indicator, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReadFifoSgl(::grpc::ServerContext* context, const ReadFifoSglRequest* request, ReadFifoSglResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + size_t number_of_elements = request->number_of_elements(); + uint32_t timeout = request->timeout(); + response->mutable_data()->Resize(number_of_elements, 0); + float* data = response->mutable_data()->mutable_data(); + size_t elements_remaining {}; + auto status = library_->ReadFifoSgl(session, fifo, data, number_of_elements, timeout, &elements_remaining); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_elements_remaining(elements_remaining); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginReadI8(::grpc::ServerContext* context, const BeginReadI8Request* request, BeginReadI8Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - - auto data = std::make_unique(); - data->session = session; - data->indicator = indicator; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadI8", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReadFifoU16(::grpc::ServerContext* context, const ReadFifoU16Request* request, ReadFifoU16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + size_t number_of_elements = request->number_of_elements(); + uint32_t timeout = request->timeout(); + std::vector data(number_of_elements); + size_t elements_remaining {}; + auto status = library_->ReadFifoU16(session, fifo, data.data(), number_of_elements, timeout, &elements_remaining); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->mutable_data()->Clear(); + response->mutable_data()->Reserve(number_of_elements); + std::transform( + data.begin(), + data.begin() + number_of_elements, + google::protobuf::RepeatedFieldBackInserter(response->mutable_data()), + [&](auto x) { + return x; + }); + response->set_elements_remaining(elements_remaining); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReadSgl(::grpc::ServerContext* context, const ReadSglRequest* request, ReadSglResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - float value{}; - auto status = library_->ReadSgl(session, indicator, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReadFifoU32(::grpc::ServerContext* context, const ReadFifoU32Request* request, ReadFifoU32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + size_t number_of_elements = request->number_of_elements(); + uint32_t timeout = request->timeout(); + response->mutable_data()->Resize(number_of_elements, 0); + uint32_t* data = response->mutable_data()->mutable_data(); + size_t elements_remaining {}; + auto status = library_->ReadFifoU32(session, fifo, data, number_of_elements, timeout, &elements_remaining); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_elements_remaining(elements_remaining); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginReadSgl(::grpc::ServerContext* context, const BeginReadSglRequest* request, BeginReadSglResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - - auto data = std::make_unique(); - data->session = session; - data->indicator = indicator; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadSgl", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReadFifoU64(::grpc::ServerContext* context, const ReadFifoU64Request* request, ReadFifoU64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + size_t number_of_elements = request->number_of_elements(); + uint32_t timeout = request->timeout(); + response->mutable_data()->Resize(number_of_elements, 0); + uint64_t* data = response->mutable_data()->mutable_data(); + size_t elements_remaining {}; + auto status = library_->ReadFifoU64(session, fifo, data, number_of_elements, timeout, &elements_remaining); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_elements_remaining(elements_remaining); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReadU16(::grpc::ServerContext* context, const ReadU16Request* request, ReadU16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - uint16_t value{}; - auto status = library_->ReadU16(session, indicator, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReadFifoU8(::grpc::ServerContext* context, const ReadFifoU8Request* request, ReadFifoU8Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + size_t number_of_elements = request->number_of_elements(); + uint32_t timeout = request->timeout(); + std::vector data(number_of_elements); + size_t elements_remaining {}; + auto status = library_->ReadFifoU8(session, fifo, data.data(), number_of_elements, timeout, &elements_remaining); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->mutable_data()->Clear(); + response->mutable_data()->Reserve(number_of_elements); + std::transform( + data.begin(), + data.begin() + number_of_elements, + google::protobuf::RepeatedFieldBackInserter(response->mutable_data()), + [&](auto x) { + return x; + }); + response->set_elements_remaining(elements_remaining); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginReadU16(::grpc::ServerContext* context, const BeginReadU16Request* request, BeginReadU16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - - auto data = std::make_unique(); - data->session = session; - data->indicator = indicator; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadU16", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReadI16(::grpc::ServerContext* context, const ReadI16Request* request, ReadI16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + int16_t value {}; + auto status = library_->ReadI16(session, indicator, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReadU32(::grpc::ServerContext* context, const ReadU32Request* request, ReadU32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - uint32_t value{}; - auto status = library_->ReadU32(session, indicator, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginReadI16(::grpc::ServerContext* context, const BeginReadI16Request* request, BeginReadI16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + + auto data = std::make_unique(); + data->session = session; + data->indicator = indicator; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadI16", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReadI32(::grpc::ServerContext* context, const ReadI32Request* request, ReadI32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + int32_t value {}; + auto status = library_->ReadI32(session, indicator, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginReadU32(::grpc::ServerContext* context, const BeginReadU32Request* request, BeginReadU32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - - auto data = std::make_unique(); - data->session = session; - data->indicator = indicator; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadU32", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginReadI32(::grpc::ServerContext* context, const BeginReadI32Request* request, BeginReadI32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + + auto data = std::make_unique(); + data->session = session; + data->indicator = indicator; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadI32", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReadI64(::grpc::ServerContext* context, const ReadI64Request* request, ReadI64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + int64_t value {}; + auto status = library_->ReadI64(session, indicator, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReadU64(::grpc::ServerContext* context, const ReadU64Request* request, ReadU64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - uint64_t value{}; - auto status = library_->ReadU64(session, indicator, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginReadI64(::grpc::ServerContext* context, const BeginReadI64Request* request, BeginReadI64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + + auto data = std::make_unique(); + data->session = session; + data->indicator = indicator; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadI64", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReadI8(::grpc::ServerContext* context, const ReadI8Request* request, ReadI8Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + int8_t value {}; + auto status = library_->ReadI8(session, indicator, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginReadU64(::grpc::ServerContext* context, const BeginReadU64Request* request, BeginReadU64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - - auto data = std::make_unique(); - data->session = session; - data->indicator = indicator; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadU64", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginReadI8(::grpc::ServerContext* context, const BeginReadI8Request* request, BeginReadI8Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + + auto data = std::make_unique(); + data->session = session; + data->indicator = indicator; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadI8", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReadSgl(::grpc::ServerContext* context, const ReadSglRequest* request, ReadSglResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + float value {}; + auto status = library_->ReadSgl(session, indicator, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReadU8(::grpc::ServerContext* context, const ReadU8Request* request, ReadU8Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - uint8_t value{}; - auto status = library_->ReadU8(session, indicator, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginReadSgl(::grpc::ServerContext* context, const BeginReadSglRequest* request, BeginReadSglResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + + auto data = std::make_unique(); + data->session = session; + data->indicator = indicator; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadSgl", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReadU16(::grpc::ServerContext* context, const ReadU16Request* request, ReadU16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + uint16_t value {}; + auto status = library_->ReadU16(session, indicator, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginReadU8(::grpc::ServerContext* context, const BeginReadU8Request* request, BeginReadU8Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - - auto data = std::make_unique(); - data->session = session; - data->indicator = indicator; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadU8", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginReadU16(::grpc::ServerContext* context, const BeginReadU16Request* request, BeginReadU16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + + auto data = std::make_unique(); + data->session = session; + data->indicator = indicator; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadU16", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReadU32(::grpc::ServerContext* context, const ReadU32Request* request, ReadU32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + uint32_t value {}; + auto status = library_->ReadU32(session, indicator, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReleaseFifoElements(::grpc::ServerContext* context, const ReleaseFifoElementsRequest* request, ReleaseFifoElementsResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - size_t elements = request->elements(); - auto status = library_->ReleaseFifoElements(session, fifo, elements); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginReadU32(::grpc::ServerContext* context, const BeginReadU32Request* request, BeginReadU32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + + auto data = std::make_unique(); + data->session = session; + data->indicator = indicator; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadU32", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReadU64(::grpc::ServerContext* context, const ReadU64Request* request, ReadU64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + uint64_t value {}; + auto status = library_->ReadU64(session, indicator, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::Reset(::grpc::ServerContext* context, const ResetRequest* request, ResetResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginReadU64(::grpc::ServerContext* context, const BeginReadU64Request* request, BeginReadU64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + + auto data = std::make_unique(); + data->session = session; + data->indicator = indicator; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadU64", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - auto status = library_->Reset(session); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReadU8(::grpc::ServerContext* context, const ReadU8Request* request, ReadU8Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + uint8_t value {}; + auto status = library_->ReadU8(session, indicator, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginReadU8(::grpc::ServerContext* context, const BeginReadU8Request* request, BeginReadU8Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + + auto data = std::make_unique(); + data->session = session; + data->indicator = indicator; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadU8", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::Run(::grpc::ServerContext* context, const RunRequest* request, RunResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReleaseFifoElements(::grpc::ServerContext* context, const ReleaseFifoElementsRequest* request, ReleaseFifoElementsResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + size_t elements = request->elements(); + auto status = library_->ReleaseFifoElements(session, fifo, elements); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t attribute; - switch (request->attribute_enum_case()) { - case nifpga_grpc::RunRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - break; + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::Reset(::grpc::ServerContext* context, const ResetRequest* request, ResetResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + auto status = library_->Reset(session); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); } - case nifpga_grpc::RunRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - break; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::Run(::grpc::ServerContext* context, const RunRequest* request, RunResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t attribute; + switch (request->attribute_enum_case()) { + case nifpga_grpc::RunRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + break; + } + case nifpga_grpc::RunRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + break; + } + case nifpga_grpc::RunRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nifpga_grpc::RunRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + auto status = library_->Run(session, attribute); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); } + response->set_status(status); + return ::grpc::Status::OK; } - - auto status = library_->Run(session, attribute); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::SetFifoPropertyI32(::grpc::ServerContext* context, const SetFifoPropertyI32Request* request, SetFifoPropertyI32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - NiFpga_FifoProperty property; - switch (request->property_enum_case()) { - case nifpga_grpc::SetFifoPropertyI32Request::PropertyEnumCase::kProperty: { - property = static_cast(request->property()); - break; - } - case nifpga_grpc::SetFifoPropertyI32Request::PropertyEnumCase::kPropertyRaw: { - property = static_cast(request->property_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::SetFifoPropertyI32(::grpc::ServerContext* context, const SetFifoPropertyI32Request* request, SetFifoPropertyI32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + NiFpga_FifoProperty property; + switch (request->property_enum_case()) { + case nifpga_grpc::SetFifoPropertyI32Request::PropertyEnumCase::kProperty: { + property = static_cast(request->property()); + break; + } + case nifpga_grpc::SetFifoPropertyI32Request::PropertyEnumCase::kPropertyRaw: { + property = static_cast(request->property_raw()); + break; + } + case nifpga_grpc::SetFifoPropertyI32Request::PropertyEnumCase::PROPERTY_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for property was not specified or out of range"); + break; + } } - case nifpga_grpc::SetFifoPropertyI32Request::PropertyEnumCase::PROPERTY_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for property was not specified or out of range"); - break; + + int32_t value = request->value(); + auto status = library_->SetFifoPropertyI32(session, fifo, property, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); } + response->set_status(status); + return ::grpc::Status::OK; } - - int32_t value = request->value(); - auto status = library_->SetFifoPropertyI32(session, fifo, property, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::SetFifoPropertyI64(::grpc::ServerContext* context, const SetFifoPropertyI64Request* request, SetFifoPropertyI64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - NiFpga_FifoProperty property; - switch (request->property_enum_case()) { - case nifpga_grpc::SetFifoPropertyI64Request::PropertyEnumCase::kProperty: { - property = static_cast(request->property()); - break; - } - case nifpga_grpc::SetFifoPropertyI64Request::PropertyEnumCase::kPropertyRaw: { - property = static_cast(request->property_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::SetFifoPropertyI64(::grpc::ServerContext* context, const SetFifoPropertyI64Request* request, SetFifoPropertyI64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + NiFpga_FifoProperty property; + switch (request->property_enum_case()) { + case nifpga_grpc::SetFifoPropertyI64Request::PropertyEnumCase::kProperty: { + property = static_cast(request->property()); + break; + } + case nifpga_grpc::SetFifoPropertyI64Request::PropertyEnumCase::kPropertyRaw: { + property = static_cast(request->property_raw()); + break; + } + case nifpga_grpc::SetFifoPropertyI64Request::PropertyEnumCase::PROPERTY_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for property was not specified or out of range"); + break; + } } - case nifpga_grpc::SetFifoPropertyI64Request::PropertyEnumCase::PROPERTY_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for property was not specified or out of range"); - break; + + int64_t value = request->value(); + auto status = library_->SetFifoPropertyI64(session, fifo, property, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); } + response->set_status(status); + return ::grpc::Status::OK; } - - int64_t value = request->value(); - auto status = library_->SetFifoPropertyI64(session, fifo, property, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::SetFifoPropertyU32(::grpc::ServerContext* context, const SetFifoPropertyU32Request* request, SetFifoPropertyU32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - NiFpga_FifoProperty property; - switch (request->property_enum_case()) { - case nifpga_grpc::SetFifoPropertyU32Request::PropertyEnumCase::kProperty: { - property = static_cast(request->property()); - break; - } - case nifpga_grpc::SetFifoPropertyU32Request::PropertyEnumCase::kPropertyRaw: { - property = static_cast(request->property_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::SetFifoPropertyU32(::grpc::ServerContext* context, const SetFifoPropertyU32Request* request, SetFifoPropertyU32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + NiFpga_FifoProperty property; + switch (request->property_enum_case()) { + case nifpga_grpc::SetFifoPropertyU32Request::PropertyEnumCase::kProperty: { + property = static_cast(request->property()); + break; + } + case nifpga_grpc::SetFifoPropertyU32Request::PropertyEnumCase::kPropertyRaw: { + property = static_cast(request->property_raw()); + break; + } + case nifpga_grpc::SetFifoPropertyU32Request::PropertyEnumCase::PROPERTY_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for property was not specified or out of range"); + break; + } } - case nifpga_grpc::SetFifoPropertyU32Request::PropertyEnumCase::PROPERTY_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for property was not specified or out of range"); - break; + + uint32_t value = request->value(); + auto status = library_->SetFifoPropertyU32(session, fifo, property, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); } + response->set_status(status); + return ::grpc::Status::OK; } - - uint32_t value = request->value(); - auto status = library_->SetFifoPropertyU32(session, fifo, property, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::SetFifoPropertyU64(::grpc::ServerContext* context, const SetFifoPropertyU64Request* request, SetFifoPropertyU64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - NiFpga_FifoProperty property; - switch (request->property_enum_case()) { - case nifpga_grpc::SetFifoPropertyU64Request::PropertyEnumCase::kProperty: { - property = static_cast(request->property()); - break; - } - case nifpga_grpc::SetFifoPropertyU64Request::PropertyEnumCase::kPropertyRaw: { - property = static_cast(request->property_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::SetFifoPropertyU64(::grpc::ServerContext* context, const SetFifoPropertyU64Request* request, SetFifoPropertyU64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + NiFpga_FifoProperty property; + switch (request->property_enum_case()) { + case nifpga_grpc::SetFifoPropertyU64Request::PropertyEnumCase::kProperty: { + property = static_cast(request->property()); + break; + } + case nifpga_grpc::SetFifoPropertyU64Request::PropertyEnumCase::kPropertyRaw: { + property = static_cast(request->property_raw()); + break; + } + case nifpga_grpc::SetFifoPropertyU64Request::PropertyEnumCase::PROPERTY_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for property was not specified or out of range"); + break; + } } - case nifpga_grpc::SetFifoPropertyU64Request::PropertyEnumCase::PROPERTY_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for property was not specified or out of range"); - break; + + uint64_t value = request->value(); + auto status = library_->SetFifoPropertyU64(session, fifo, property, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); } + response->set_status(status); + return ::grpc::Status::OK; } - - uint64_t value = request->value(); - auto status = library_->SetFifoPropertyU64(session, fifo, property, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::StartFifo(::grpc::ServerContext* context, const StartFifoRequest* request, StartFifoResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - auto status = library_->StartFifo(session, fifo); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::StartFifo(::grpc::ServerContext* context, const StartFifoRequest* request, StartFifoResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + auto status = library_->StartFifo(session, fifo); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::StopFifo(::grpc::ServerContext* context, const StopFifoRequest* request, StopFifoResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - auto status = library_->StopFifo(session, fifo); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::StopFifo(::grpc::ServerContext* context, const StopFifoRequest* request, StopFifoResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + auto status = library_->StopFifo(session, fifo); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::UnreserveFifo(::grpc::ServerContext* context, const UnreserveFifoRequest* request, UnreserveFifoResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - auto status = library_->UnreserveFifo(session, fifo); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::UnreserveFifo(::grpc::ServerContext* context, const UnreserveFifoRequest* request, UnreserveFifoResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + auto status = library_->UnreserveFifo(session, fifo); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WaitOnIrqs(::grpc::ServerContext* context, const WaitOnIrqsRequest* request, WaitOnIrqsResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t irqs = request->irqs(); - uint32_t timeout = request->timeout(); - NiFpga_IrqContext irq_context{}; - uint32_t irqs_asserted{}; - NiFpga_Bool timed_out{}; - auto status = library_->WaitOnIrqs(session, &irq_context, irqs, timeout, &irqs_asserted, &timed_out); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_irqs_asserted(irqs_asserted); - response->set_timed_out(timed_out); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WaitOnIrqs(::grpc::ServerContext* context, const WaitOnIrqsRequest* request, WaitOnIrqsResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t irqs = request->irqs(); + uint32_t timeout = request->timeout(); + NiFpga_IrqContext irq_context {}; + uint32_t irqs_asserted {}; + NiFpga_Bool timed_out {}; + auto status = library_->WaitOnIrqs(session, &irq_context, irqs, timeout, &irqs_asserted, &timed_out); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_irqs_asserted(irqs_asserted); + response->set_timed_out(timed_out); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WriteArrayBool(::grpc::ServerContext* context, const WriteArrayBoolRequest* request, WriteArrayBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - auto array = convert_from_grpc(request->array()); - size_t size = static_cast(request->array().size()); - auto status = library_->WriteArrayBool(session, control, array.data(), size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WriteArrayBool(::grpc::ServerContext* context, const WriteArrayBoolRequest* request, WriteArrayBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + auto array = convert_from_grpc(request->array()); + size_t size = static_cast(request->array().size()); + auto status = library_->WriteArrayBool(session, control, array.data(), size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginWriteArrayBool(::grpc::ServerContext* context, const BeginWriteArrayBoolRequest* request, BeginWriteArrayBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - - auto data = std::make_unique(); - data->session = session; - data->control = control; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayBool", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginWriteArrayBool(::grpc::ServerContext* context, const BeginWriteArrayBoolRequest* request, BeginWriteArrayBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + + auto data = std::make_unique(); + data->session = session; + data->control = control; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayBool", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WriteArrayDbl(::grpc::ServerContext* context, const WriteArrayDblRequest* request, WriteArrayDblResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - auto array = const_cast(request->array().data()); - size_t size = static_cast(request->array().size()); - auto status = library_->WriteArrayDbl(session, control, array, size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WriteArrayDbl(::grpc::ServerContext* context, const WriteArrayDblRequest* request, WriteArrayDblResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + auto array = const_cast(request->array().data()); + size_t size = static_cast(request->array().size()); + auto status = library_->WriteArrayDbl(session, control, array, size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginWriteArrayDbl(::grpc::ServerContext* context, const BeginWriteArrayDblRequest* request, BeginWriteArrayDblResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - - auto data = std::make_unique(); - data->session = session; - data->control = control; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayDbl", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginWriteArrayDbl(::grpc::ServerContext* context, const BeginWriteArrayDblRequest* request, BeginWriteArrayDblResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + + auto data = std::make_unique(); + data->session = session; + data->control = control; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayDbl", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WriteArrayI16(::grpc::ServerContext* context, const WriteArrayI16Request* request, WriteArrayI16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - auto array_raw = request->array(); - auto array = std::vector(); - array.reserve(array_raw.size()); - std::transform( + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WriteArrayI16(::grpc::ServerContext* context, const WriteArrayI16Request* request, WriteArrayI16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + auto array_raw = request->array(); + auto array = std::vector(); + array.reserve(array_raw.size()); + std::transform( array_raw.begin(), array_raw.end(), std::back_inserter(array), [](auto x) { - if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { - std::string message("value "); - message.append(std::to_string(x)); - message.append(" doesn't fit in datatype "); - message.append("int16_t"); - throw nidevice_grpc::ValueOutOfRangeException(message); - } - return static_cast(x); + if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { + std::string message("value "); + message.append(std::to_string(x)); + message.append(" doesn't fit in datatype "); + message.append("int16_t"); + throw nidevice_grpc::ValueOutOfRangeException(message); + } + return static_cast(x); }); - size_t size = static_cast(request->array().size()); - auto status = library_->WriteArrayI16(session, control, array.data(), size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + size_t size = static_cast(request->array().size()); + auto status = library_->WriteArrayI16(session, control, array.data(), size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginWriteArrayI16(::grpc::ServerContext* context, const BeginWriteArrayI16Request* request, BeginWriteArrayI16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - - auto data = std::make_unique(); - data->session = session; - data->control = control; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayI16", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginWriteArrayI16(::grpc::ServerContext* context, const BeginWriteArrayI16Request* request, BeginWriteArrayI16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + + auto data = std::make_unique(); + data->session = session; + data->control = control; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayI16", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WriteArrayI32(::grpc::ServerContext* context, const WriteArrayI32Request* request, WriteArrayI32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - auto array = const_cast(request->array().data()); - size_t size = static_cast(request->array().size()); - auto status = library_->WriteArrayI32(session, control, array, size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WriteArrayI32(::grpc::ServerContext* context, const WriteArrayI32Request* request, WriteArrayI32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + auto array = const_cast(request->array().data()); + size_t size = static_cast(request->array().size()); + auto status = library_->WriteArrayI32(session, control, array, size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginWriteArrayI32(::grpc::ServerContext* context, const BeginWriteArrayI32Request* request, BeginWriteArrayI32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - - auto data = std::make_unique(); - data->session = session; - data->control = control; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayI32", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginWriteArrayI32(::grpc::ServerContext* context, const BeginWriteArrayI32Request* request, BeginWriteArrayI32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + + auto data = std::make_unique(); + data->session = session; + data->control = control; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayI32", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WriteArrayI64(::grpc::ServerContext* context, const WriteArrayI64Request* request, WriteArrayI64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - auto array = const_cast(request->array().data()); - size_t size = static_cast(request->array().size()); - auto status = library_->WriteArrayI64(session, control, array, size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WriteArrayI64(::grpc::ServerContext* context, const WriteArrayI64Request* request, WriteArrayI64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + auto array = const_cast(request->array().data()); + size_t size = static_cast(request->array().size()); + auto status = library_->WriteArrayI64(session, control, array, size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginWriteArrayI64(::grpc::ServerContext* context, const BeginWriteArrayI64Request* request, BeginWriteArrayI64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - - auto data = std::make_unique(); - data->session = session; - data->control = control; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayI64", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginWriteArrayI64(::grpc::ServerContext* context, const BeginWriteArrayI64Request* request, BeginWriteArrayI64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + + auto data = std::make_unique(); + data->session = session; + data->control = control; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayI64", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WriteArrayI8(::grpc::ServerContext* context, const WriteArrayI8Request* request, WriteArrayI8Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - auto array_raw = request->array(); - auto array = std::vector(); - array.reserve(array_raw.size()); - std::transform( + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WriteArrayI8(::grpc::ServerContext* context, const WriteArrayI8Request* request, WriteArrayI8Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + auto array_raw = request->array(); + auto array = std::vector(); + array.reserve(array_raw.size()); + std::transform( array_raw.begin(), array_raw.end(), std::back_inserter(array), [](auto x) { - if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { - std::string message("value "); - message.append(std::to_string(x)); - message.append(" doesn't fit in datatype "); - message.append("int8_t"); - throw nidevice_grpc::ValueOutOfRangeException(message); - } - return static_cast(x); + if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { + std::string message("value "); + message.append(std::to_string(x)); + message.append(" doesn't fit in datatype "); + message.append("int8_t"); + throw nidevice_grpc::ValueOutOfRangeException(message); + } + return static_cast(x); }); - size_t size = static_cast(request->array().size()); - auto status = library_->WriteArrayI8(session, control, array.data(), size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + size_t size = static_cast(request->array().size()); + auto status = library_->WriteArrayI8(session, control, array.data(), size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginWriteArrayI8(::grpc::ServerContext* context, const BeginWriteArrayI8Request* request, BeginWriteArrayI8Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - - auto data = std::make_unique(); - data->session = session; - data->control = control; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayI8", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginWriteArrayI8(::grpc::ServerContext* context, const BeginWriteArrayI8Request* request, BeginWriteArrayI8Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + + auto data = std::make_unique(); + data->session = session; + data->control = control; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayI8", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WriteArraySgl(::grpc::ServerContext* context, const WriteArraySglRequest* request, WriteArraySglResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - auto array = const_cast(request->array().data()); - size_t size = static_cast(request->array().size()); - auto status = library_->WriteArraySgl(session, control, array, size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WriteArraySgl(::grpc::ServerContext* context, const WriteArraySglRequest* request, WriteArraySglResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + auto array = const_cast(request->array().data()); + size_t size = static_cast(request->array().size()); + auto status = library_->WriteArraySgl(session, control, array, size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginWriteArraySgl(::grpc::ServerContext* context, const BeginWriteArraySglRequest* request, BeginWriteArraySglResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - - auto data = std::make_unique(); - data->session = session; - data->control = control; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArraySgl", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginWriteArraySgl(::grpc::ServerContext* context, const BeginWriteArraySglRequest* request, BeginWriteArraySglResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + + auto data = std::make_unique(); + data->session = session; + data->control = control; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArraySgl", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WriteArrayU16(::grpc::ServerContext* context, const WriteArrayU16Request* request, WriteArrayU16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - auto array_raw = request->array(); - auto array = std::vector(); - array.reserve(array_raw.size()); - std::transform( + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WriteArrayU16(::grpc::ServerContext* context, const WriteArrayU16Request* request, WriteArrayU16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + auto array_raw = request->array(); + auto array = std::vector(); + array.reserve(array_raw.size()); + std::transform( array_raw.begin(), array_raw.end(), std::back_inserter(array), [](auto x) { - if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { - std::string message("value "); - message.append(std::to_string(x)); - message.append(" doesn't fit in datatype "); - message.append("uint16_t"); - throw nidevice_grpc::ValueOutOfRangeException(message); - } - return static_cast(x); + if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { + std::string message("value "); + message.append(std::to_string(x)); + message.append(" doesn't fit in datatype "); + message.append("uint16_t"); + throw nidevice_grpc::ValueOutOfRangeException(message); + } + return static_cast(x); }); - size_t size = static_cast(request->array().size()); - auto status = library_->WriteArrayU16(session, control, array.data(), size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + size_t size = static_cast(request->array().size()); + auto status = library_->WriteArrayU16(session, control, array.data(), size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginWriteArrayU16(::grpc::ServerContext* context, const BeginWriteArrayU16Request* request, BeginWriteArrayU16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - - auto data = std::make_unique(); - data->session = session; - data->control = control; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayU16", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginWriteArrayU16(::grpc::ServerContext* context, const BeginWriteArrayU16Request* request, BeginWriteArrayU16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + + auto data = std::make_unique(); + data->session = session; + data->control = control; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayU16", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WriteArrayU32(::grpc::ServerContext* context, const WriteArrayU32Request* request, WriteArrayU32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - auto array = const_cast(request->array().data()); - size_t size = static_cast(request->array().size()); - auto status = library_->WriteArrayU32(session, control, array, size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WriteArrayU32(::grpc::ServerContext* context, const WriteArrayU32Request* request, WriteArrayU32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + auto array = const_cast(request->array().data()); + size_t size = static_cast(request->array().size()); + auto status = library_->WriteArrayU32(session, control, array, size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginWriteArrayU32(::grpc::ServerContext* context, const BeginWriteArrayU32Request* request, BeginWriteArrayU32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - - auto data = std::make_unique(); - data->session = session; - data->control = control; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayU32", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginWriteArrayU32(::grpc::ServerContext* context, const BeginWriteArrayU32Request* request, BeginWriteArrayU32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + + auto data = std::make_unique(); + data->session = session; + data->control = control; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayU32", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WriteArrayU64(::grpc::ServerContext* context, const WriteArrayU64Request* request, WriteArrayU64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - auto array = const_cast(request->array().data()); - size_t size = static_cast(request->array().size()); - auto status = library_->WriteArrayU64(session, control, array, size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WriteArrayU64(::grpc::ServerContext* context, const WriteArrayU64Request* request, WriteArrayU64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + auto array = const_cast(request->array().data()); + size_t size = static_cast(request->array().size()); + auto status = library_->WriteArrayU64(session, control, array, size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginWriteArrayU64(::grpc::ServerContext* context, const BeginWriteArrayU64Request* request, BeginWriteArrayU64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - - auto data = std::make_unique(); - data->session = session; - data->control = control; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayU64", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginWriteArrayU64(::grpc::ServerContext* context, const BeginWriteArrayU64Request* request, BeginWriteArrayU64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + + auto data = std::make_unique(); + data->session = session; + data->control = control; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayU64", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WriteArrayU8(::grpc::ServerContext* context, const WriteArrayU8Request* request, WriteArrayU8Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - auto array_raw = request->array(); - auto array = std::vector(); - array.reserve(array_raw.size()); - std::transform( + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WriteArrayU8(::grpc::ServerContext* context, const WriteArrayU8Request* request, WriteArrayU8Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + auto array_raw = request->array(); + auto array = std::vector(); + array.reserve(array_raw.size()); + std::transform( array_raw.begin(), array_raw.end(), std::back_inserter(array), [](auto x) { - if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { - std::string message("value "); - message.append(std::to_string(x)); - message.append(" doesn't fit in datatype "); - message.append("uint8_t"); - throw nidevice_grpc::ValueOutOfRangeException(message); - } - return static_cast(x); + if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { + std::string message("value "); + message.append(std::to_string(x)); + message.append(" doesn't fit in datatype "); + message.append("uint8_t"); + throw nidevice_grpc::ValueOutOfRangeException(message); + } + return static_cast(x); }); - size_t size = static_cast(request->array().size()); - auto status = library_->WriteArrayU8(session, control, array.data(), size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + size_t size = static_cast(request->array().size()); + auto status = library_->WriteArrayU8(session, control, array.data(), size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginWriteArrayU8(::grpc::ServerContext* context, const BeginWriteArrayU8Request* request, BeginWriteArrayU8Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - - auto data = std::make_unique(); - data->session = session; - data->control = control; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayU8", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginWriteArrayU8(::grpc::ServerContext* context, const BeginWriteArrayU8Request* request, BeginWriteArrayU8Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + + auto data = std::make_unique(); + data->session = session; + data->control = control; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayU8", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WriteBool(::grpc::ServerContext* context, const WriteBoolRequest* request, WriteBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - NiFpga_Bool value = request->value(); - auto status = library_->WriteBool(session, control, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WriteBool(::grpc::ServerContext* context, const WriteBoolRequest* request, WriteBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + NiFpga_Bool value = request->value(); + auto status = library_->WriteBool(session, control, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginWriteBool(::grpc::ServerContext* context, const BeginWriteBoolRequest* request, BeginWriteBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - - auto data = std::make_unique(); - data->session = session; - data->control = control; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteBool", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginWriteBool(::grpc::ServerContext* context, const BeginWriteBoolRequest* request, BeginWriteBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + + auto data = std::make_unique(); + data->session = session; + data->control = control; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteBool", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WriteDbl(::grpc::ServerContext* context, const WriteDblRequest* request, WriteDblResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - double value = request->value(); - auto status = library_->WriteDbl(session, control, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WriteDbl(::grpc::ServerContext* context, const WriteDblRequest* request, WriteDblResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + double value = request->value(); + auto status = library_->WriteDbl(session, control, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginWriteDbl(::grpc::ServerContext* context, const BeginWriteDblRequest* request, BeginWriteDblResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - - auto data = std::make_unique(); - data->session = session; - data->control = control; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteDbl", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginWriteDbl(::grpc::ServerContext* context, const BeginWriteDblRequest* request, BeginWriteDblResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + + auto data = std::make_unique(); + data->session = session; + data->control = control; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteDbl", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WriteFifoBool(::grpc::ServerContext* context, const WriteFifoBoolRequest* request, WriteFifoBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - auto data = convert_from_grpc(request->data()); - size_t number_of_elements = static_cast(request->data().size()); - uint32_t timeout = request->timeout(); - size_t empty_elements_remaining{}; - auto status = library_->WriteFifoBool(session, fifo, data.data(), number_of_elements, timeout, &empty_elements_remaining); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_empty_elements_remaining(empty_elements_remaining); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WriteFifoBool(::grpc::ServerContext* context, const WriteFifoBoolRequest* request, WriteFifoBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + auto data = convert_from_grpc(request->data()); + size_t number_of_elements = static_cast(request->data().size()); + uint32_t timeout = request->timeout(); + size_t empty_elements_remaining {}; + auto status = library_->WriteFifoBool(session, fifo, data.data(), number_of_elements, timeout, &empty_elements_remaining); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_empty_elements_remaining(empty_elements_remaining); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WriteFifoDbl(::grpc::ServerContext* context, const WriteFifoDblRequest* request, WriteFifoDblResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - auto data = const_cast(request->data().data()); - size_t number_of_elements = static_cast(request->data().size()); - uint32_t timeout = request->timeout(); - size_t empty_elements_remaining{}; - auto status = library_->WriteFifoDbl(session, fifo, data, number_of_elements, timeout, &empty_elements_remaining); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_empty_elements_remaining(empty_elements_remaining); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WriteFifoDbl(::grpc::ServerContext* context, const WriteFifoDblRequest* request, WriteFifoDblResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + auto data = const_cast(request->data().data()); + size_t number_of_elements = static_cast(request->data().size()); + uint32_t timeout = request->timeout(); + size_t empty_elements_remaining {}; + auto status = library_->WriteFifoDbl(session, fifo, data, number_of_elements, timeout, &empty_elements_remaining); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_empty_elements_remaining(empty_elements_remaining); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WriteFifoI16(::grpc::ServerContext* context, const WriteFifoI16Request* request, WriteFifoI16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - auto data_raw = request->data(); - auto data = std::vector(); - data.reserve(data_raw.size()); - std::transform( + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WriteFifoI16(::grpc::ServerContext* context, const WriteFifoI16Request* request, WriteFifoI16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + auto data_raw = request->data(); + auto data = std::vector(); + data.reserve(data_raw.size()); + std::transform( data_raw.begin(), data_raw.end(), std::back_inserter(data), [](auto x) { - if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { - std::string message("value "); - message.append(std::to_string(x)); - message.append(" doesn't fit in datatype "); - message.append("int16_t"); - throw nidevice_grpc::ValueOutOfRangeException(message); - } - return static_cast(x); + if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { + std::string message("value "); + message.append(std::to_string(x)); + message.append(" doesn't fit in datatype "); + message.append("int16_t"); + throw nidevice_grpc::ValueOutOfRangeException(message); + } + return static_cast(x); }); - size_t number_of_elements = static_cast(request->data().size()); - uint32_t timeout = request->timeout(); - size_t empty_elements_remaining{}; - auto status = library_->WriteFifoI16(session, fifo, data.data(), number_of_elements, timeout, &empty_elements_remaining); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + size_t number_of_elements = static_cast(request->data().size()); + uint32_t timeout = request->timeout(); + size_t empty_elements_remaining {}; + auto status = library_->WriteFifoI16(session, fifo, data.data(), number_of_elements, timeout, &empty_elements_remaining); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_empty_elements_remaining(empty_elements_remaining); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - response->set_empty_elements_remaining(empty_elements_remaining); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WriteFifoI32(::grpc::ServerContext* context, const WriteFifoI32Request* request, WriteFifoI32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - auto data = const_cast(request->data().data()); - size_t number_of_elements = static_cast(request->data().size()); - uint32_t timeout = request->timeout(); - size_t empty_elements_remaining{}; - auto status = library_->WriteFifoI32(session, fifo, data, number_of_elements, timeout, &empty_elements_remaining); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_empty_elements_remaining(empty_elements_remaining); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WriteFifoI32(::grpc::ServerContext* context, const WriteFifoI32Request* request, WriteFifoI32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + auto data = const_cast(request->data().data()); + size_t number_of_elements = static_cast(request->data().size()); + uint32_t timeout = request->timeout(); + size_t empty_elements_remaining {}; + auto status = library_->WriteFifoI32(session, fifo, data, number_of_elements, timeout, &empty_elements_remaining); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_empty_elements_remaining(empty_elements_remaining); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WriteFifoI64(::grpc::ServerContext* context, const WriteFifoI64Request* request, WriteFifoI64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - auto data = const_cast(request->data().data()); - size_t number_of_elements = static_cast(request->data().size()); - uint32_t timeout = request->timeout(); - size_t empty_elements_remaining{}; - auto status = library_->WriteFifoI64(session, fifo, data, number_of_elements, timeout, &empty_elements_remaining); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_empty_elements_remaining(empty_elements_remaining); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WriteFifoI64(::grpc::ServerContext* context, const WriteFifoI64Request* request, WriteFifoI64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + auto data = const_cast(request->data().data()); + size_t number_of_elements = static_cast(request->data().size()); + uint32_t timeout = request->timeout(); + size_t empty_elements_remaining {}; + auto status = library_->WriteFifoI64(session, fifo, data, number_of_elements, timeout, &empty_elements_remaining); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_empty_elements_remaining(empty_elements_remaining); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WriteFifoI8(::grpc::ServerContext* context, const WriteFifoI8Request* request, WriteFifoI8Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - auto data_raw = request->data(); - auto data = std::vector(); - data.reserve(data_raw.size()); - std::transform( + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WriteFifoI8(::grpc::ServerContext* context, const WriteFifoI8Request* request, WriteFifoI8Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + auto data_raw = request->data(); + auto data = std::vector(); + data.reserve(data_raw.size()); + std::transform( data_raw.begin(), data_raw.end(), std::back_inserter(data), [](auto x) { - if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { - std::string message("value "); - message.append(std::to_string(x)); - message.append(" doesn't fit in datatype "); - message.append("int8_t"); - throw nidevice_grpc::ValueOutOfRangeException(message); - } - return static_cast(x); + if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { + std::string message("value "); + message.append(std::to_string(x)); + message.append(" doesn't fit in datatype "); + message.append("int8_t"); + throw nidevice_grpc::ValueOutOfRangeException(message); + } + return static_cast(x); }); - size_t number_of_elements = static_cast(request->data().size()); - uint32_t timeout = request->timeout(); - size_t empty_elements_remaining{}; - auto status = library_->WriteFifoI8(session, fifo, data.data(), number_of_elements, timeout, &empty_elements_remaining); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + size_t number_of_elements = static_cast(request->data().size()); + uint32_t timeout = request->timeout(); + size_t empty_elements_remaining {}; + auto status = library_->WriteFifoI8(session, fifo, data.data(), number_of_elements, timeout, &empty_elements_remaining); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_empty_elements_remaining(empty_elements_remaining); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - response->set_empty_elements_remaining(empty_elements_remaining); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WriteFifoSgl(::grpc::ServerContext* context, const WriteFifoSglRequest* request, WriteFifoSglResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - auto data = const_cast(request->data().data()); - size_t number_of_elements = static_cast(request->data().size()); - uint32_t timeout = request->timeout(); - size_t empty_elements_remaining{}; - auto status = library_->WriteFifoSgl(session, fifo, data, number_of_elements, timeout, &empty_elements_remaining); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_empty_elements_remaining(empty_elements_remaining); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WriteFifoSgl(::grpc::ServerContext* context, const WriteFifoSglRequest* request, WriteFifoSglResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + auto data = const_cast(request->data().data()); + size_t number_of_elements = static_cast(request->data().size()); + uint32_t timeout = request->timeout(); + size_t empty_elements_remaining {}; + auto status = library_->WriteFifoSgl(session, fifo, data, number_of_elements, timeout, &empty_elements_remaining); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_empty_elements_remaining(empty_elements_remaining); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WriteFifoU16(::grpc::ServerContext* context, const WriteFifoU16Request* request, WriteFifoU16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - auto data_raw = request->data(); - auto data = std::vector(); - data.reserve(data_raw.size()); - std::transform( + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WriteFifoU16(::grpc::ServerContext* context, const WriteFifoU16Request* request, WriteFifoU16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + auto data_raw = request->data(); + auto data = std::vector(); + data.reserve(data_raw.size()); + std::transform( data_raw.begin(), data_raw.end(), std::back_inserter(data), [](auto x) { - if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { - std::string message("value "); - message.append(std::to_string(x)); - message.append(" doesn't fit in datatype "); - message.append("uint16_t"); - throw nidevice_grpc::ValueOutOfRangeException(message); - } - return static_cast(x); + if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { + std::string message("value "); + message.append(std::to_string(x)); + message.append(" doesn't fit in datatype "); + message.append("uint16_t"); + throw nidevice_grpc::ValueOutOfRangeException(message); + } + return static_cast(x); }); - size_t number_of_elements = static_cast(request->data().size()); - uint32_t timeout = request->timeout(); - size_t empty_elements_remaining{}; - auto status = library_->WriteFifoU16(session, fifo, data.data(), number_of_elements, timeout, &empty_elements_remaining); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + size_t number_of_elements = static_cast(request->data().size()); + uint32_t timeout = request->timeout(); + size_t empty_elements_remaining {}; + auto status = library_->WriteFifoU16(session, fifo, data.data(), number_of_elements, timeout, &empty_elements_remaining); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_empty_elements_remaining(empty_elements_remaining); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - response->set_empty_elements_remaining(empty_elements_remaining); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WriteFifoU32(::grpc::ServerContext* context, const WriteFifoU32Request* request, WriteFifoU32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - auto data = const_cast(request->data().data()); - size_t number_of_elements = static_cast(request->data().size()); - uint32_t timeout = request->timeout(); - size_t empty_elements_remaining{}; - auto status = library_->WriteFifoU32(session, fifo, data, number_of_elements, timeout, &empty_elements_remaining); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_empty_elements_remaining(empty_elements_remaining); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WriteFifoU32(::grpc::ServerContext* context, const WriteFifoU32Request* request, WriteFifoU32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + auto data = const_cast(request->data().data()); + size_t number_of_elements = static_cast(request->data().size()); + uint32_t timeout = request->timeout(); + size_t empty_elements_remaining {}; + auto status = library_->WriteFifoU32(session, fifo, data, number_of_elements, timeout, &empty_elements_remaining); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_empty_elements_remaining(empty_elements_remaining); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WriteFifoU64(::grpc::ServerContext* context, const WriteFifoU64Request* request, WriteFifoU64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - auto data = const_cast(request->data().data()); - size_t number_of_elements = static_cast(request->data().size()); - uint32_t timeout = request->timeout(); - size_t empty_elements_remaining{}; - auto status = library_->WriteFifoU64(session, fifo, data, number_of_elements, timeout, &empty_elements_remaining); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_empty_elements_remaining(empty_elements_remaining); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WriteFifoU64(::grpc::ServerContext* context, const WriteFifoU64Request* request, WriteFifoU64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + auto data = const_cast(request->data().data()); + size_t number_of_elements = static_cast(request->data().size()); + uint32_t timeout = request->timeout(); + size_t empty_elements_remaining {}; + auto status = library_->WriteFifoU64(session, fifo, data, number_of_elements, timeout, &empty_elements_remaining); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_empty_elements_remaining(empty_elements_remaining); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WriteFifoU8(::grpc::ServerContext* context, const WriteFifoU8Request* request, WriteFifoU8Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - auto data_raw = request->data(); - auto data = std::vector(); - data.reserve(data_raw.size()); - std::transform( + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WriteFifoU8(::grpc::ServerContext* context, const WriteFifoU8Request* request, WriteFifoU8Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + auto data_raw = request->data(); + auto data = std::vector(); + data.reserve(data_raw.size()); + std::transform( data_raw.begin(), data_raw.end(), std::back_inserter(data), [](auto x) { - if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { - std::string message("value "); - message.append(std::to_string(x)); - message.append(" doesn't fit in datatype "); - message.append("uint8_t"); - throw nidevice_grpc::ValueOutOfRangeException(message); - } - return static_cast(x); + if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { + std::string message("value "); + message.append(std::to_string(x)); + message.append(" doesn't fit in datatype "); + message.append("uint8_t"); + throw nidevice_grpc::ValueOutOfRangeException(message); + } + return static_cast(x); }); - size_t number_of_elements = static_cast(request->data().size()); - uint32_t timeout = request->timeout(); - size_t empty_elements_remaining{}; - auto status = library_->WriteFifoU8(session, fifo, data.data(), number_of_elements, timeout, &empty_elements_remaining); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + size_t number_of_elements = static_cast(request->data().size()); + uint32_t timeout = request->timeout(); + size_t empty_elements_remaining {}; + auto status = library_->WriteFifoU8(session, fifo, data.data(), number_of_elements, timeout, &empty_elements_remaining); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_empty_elements_remaining(empty_elements_remaining); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - response->set_empty_elements_remaining(empty_elements_remaining); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WriteI16(::grpc::ServerContext* context, const WriteI16Request* request, WriteI16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - auto value_raw = request->value(); - if (value_raw < std::numeric_limits::min() || value_raw > std::numeric_limits::max()) { - std::string message("value "); - message.append(std::to_string(value_raw)); - message.append(" doesn't fit in datatype "); - message.append("int16_t"); - throw nidevice_grpc::ValueOutOfRangeException(message); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WriteI16(::grpc::ServerContext* context, const WriteI16Request* request, WriteI16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - auto value = static_cast(value_raw); + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + auto value_raw = request->value(); + if (value_raw < std::numeric_limits::min() || value_raw > std::numeric_limits::max()) { + std::string message("value "); + message.append(std::to_string(value_raw)); + message.append(" doesn't fit in datatype "); + message.append("int16_t"); + throw nidevice_grpc::ValueOutOfRangeException(message); + } + auto value = static_cast(value_raw); - auto status = library_->WriteI16(session, control, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + auto status = library_->WriteI16(session, control, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginWriteI16(::grpc::ServerContext* context, const BeginWriteI16Request* request, BeginWriteI16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - - auto data = std::make_unique(); - data->session = session; - data->control = control; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteI16", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginWriteI16(::grpc::ServerContext* context, const BeginWriteI16Request* request, BeginWriteI16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + + auto data = std::make_unique(); + data->session = session; + data->control = control; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteI16", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WriteI32(::grpc::ServerContext* context, const WriteI32Request* request, WriteI32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - int32_t value = request->value(); - auto status = library_->WriteI32(session, control, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WriteI32(::grpc::ServerContext* context, const WriteI32Request* request, WriteI32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + int32_t value = request->value(); + auto status = library_->WriteI32(session, control, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginWriteI32(::grpc::ServerContext* context, const BeginWriteI32Request* request, BeginWriteI32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - - auto data = std::make_unique(); - data->session = session; - data->control = control; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteI32", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginWriteI32(::grpc::ServerContext* context, const BeginWriteI32Request* request, BeginWriteI32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + + auto data = std::make_unique(); + data->session = session; + data->control = control; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteI32", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WriteI64(::grpc::ServerContext* context, const WriteI64Request* request, WriteI64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - int64_t value = request->value(); - auto status = library_->WriteI64(session, control, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WriteI64(::grpc::ServerContext* context, const WriteI64Request* request, WriteI64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + int64_t value = request->value(); + auto status = library_->WriteI64(session, control, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginWriteI64(::grpc::ServerContext* context, const BeginWriteI64Request* request, BeginWriteI64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - - auto data = std::make_unique(); - data->session = session; - data->control = control; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteI64", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginWriteI64(::grpc::ServerContext* context, const BeginWriteI64Request* request, BeginWriteI64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + + auto data = std::make_unique(); + data->session = session; + data->control = control; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteI64", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WriteI8(::grpc::ServerContext* context, const WriteI8Request* request, WriteI8Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - auto value_raw = request->value(); - if (value_raw < std::numeric_limits::min() || value_raw > std::numeric_limits::max()) { - std::string message("value "); - message.append(std::to_string(value_raw)); - message.append(" doesn't fit in datatype "); - message.append("int8_t"); - throw nidevice_grpc::ValueOutOfRangeException(message); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WriteI8(::grpc::ServerContext* context, const WriteI8Request* request, WriteI8Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - auto value = static_cast(value_raw); + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + auto value_raw = request->value(); + if (value_raw < std::numeric_limits::min() || value_raw > std::numeric_limits::max()) { + std::string message("value "); + message.append(std::to_string(value_raw)); + message.append(" doesn't fit in datatype "); + message.append("int8_t"); + throw nidevice_grpc::ValueOutOfRangeException(message); + } + auto value = static_cast(value_raw); - auto status = library_->WriteI8(session, control, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + auto status = library_->WriteI8(session, control, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginWriteI8(::grpc::ServerContext* context, const BeginWriteI8Request* request, BeginWriteI8Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - - auto data = std::make_unique(); - data->session = session; - data->control = control; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteI8", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginWriteI8(::grpc::ServerContext* context, const BeginWriteI8Request* request, BeginWriteI8Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + + auto data = std::make_unique(); + data->session = session; + data->control = control; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteI8", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WriteSgl(::grpc::ServerContext* context, const WriteSglRequest* request, WriteSglResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - float value = request->value(); - auto status = library_->WriteSgl(session, control, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WriteSgl(::grpc::ServerContext* context, const WriteSglRequest* request, WriteSglResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + float value = request->value(); + auto status = library_->WriteSgl(session, control, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginWriteSgl(::grpc::ServerContext* context, const BeginWriteSglRequest* request, BeginWriteSglResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - - auto data = std::make_unique(); - data->session = session; - data->control = control; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteSgl", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginWriteSgl(::grpc::ServerContext* context, const BeginWriteSglRequest* request, BeginWriteSglResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + + auto data = std::make_unique(); + data->session = session; + data->control = control; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteSgl", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WriteU16(::grpc::ServerContext* context, const WriteU16Request* request, WriteU16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - auto value_raw = request->value(); - if (value_raw < std::numeric_limits::min() || value_raw > std::numeric_limits::max()) { - std::string message("value "); - message.append(std::to_string(value_raw)); - message.append(" doesn't fit in datatype "); - message.append("uint16_t"); - throw nidevice_grpc::ValueOutOfRangeException(message); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WriteU16(::grpc::ServerContext* context, const WriteU16Request* request, WriteU16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - auto value = static_cast(value_raw); + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + auto value_raw = request->value(); + if (value_raw < std::numeric_limits::min() || value_raw > std::numeric_limits::max()) { + std::string message("value "); + message.append(std::to_string(value_raw)); + message.append(" doesn't fit in datatype "); + message.append("uint16_t"); + throw nidevice_grpc::ValueOutOfRangeException(message); + } + auto value = static_cast(value_raw); - auto status = library_->WriteU16(session, control, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + auto status = library_->WriteU16(session, control, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginWriteU16(::grpc::ServerContext* context, const BeginWriteU16Request* request, BeginWriteU16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - - auto data = std::make_unique(); - data->session = session; - data->control = control; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteU16", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginWriteU16(::grpc::ServerContext* context, const BeginWriteU16Request* request, BeginWriteU16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + + auto data = std::make_unique(); + data->session = session; + data->control = control; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteU16", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WriteU32(::grpc::ServerContext* context, const WriteU32Request* request, WriteU32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - uint32_t value = request->value(); - auto status = library_->WriteU32(session, control, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WriteU32(::grpc::ServerContext* context, const WriteU32Request* request, WriteU32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + uint32_t value = request->value(); + auto status = library_->WriteU32(session, control, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginWriteU32(::grpc::ServerContext* context, const BeginWriteU32Request* request, BeginWriteU32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - - auto data = std::make_unique(); - data->session = session; - data->control = control; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteU32", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginWriteU32(::grpc::ServerContext* context, const BeginWriteU32Request* request, BeginWriteU32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + + auto data = std::make_unique(); + data->session = session; + data->control = control; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteU32", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WriteU64(::grpc::ServerContext* context, const WriteU64Request* request, WriteU64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - uint64_t value = request->value(); - auto status = library_->WriteU64(session, control, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WriteU64(::grpc::ServerContext* context, const WriteU64Request* request, WriteU64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + uint64_t value = request->value(); + auto status = library_->WriteU64(session, control, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginWriteU64(::grpc::ServerContext* context, const BeginWriteU64Request* request, BeginWriteU64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - - auto data = std::make_unique(); - data->session = session; - data->control = control; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteU64", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginWriteU64(::grpc::ServerContext* context, const BeginWriteU64Request* request, BeginWriteU64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + + auto data = std::make_unique(); + data->session = session; + data->control = control; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteU64", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WriteU8(::grpc::ServerContext* context, const WriteU8Request* request, WriteU8Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - auto value_raw = request->value(); - if (value_raw < std::numeric_limits::min() || value_raw > std::numeric_limits::max()) { - std::string message("value "); - message.append(std::to_string(value_raw)); - message.append(" doesn't fit in datatype "); - message.append("uint8_t"); - throw nidevice_grpc::ValueOutOfRangeException(message); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WriteU8(::grpc::ServerContext* context, const WriteU8Request* request, WriteU8Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - auto value = static_cast(value_raw); + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + auto value_raw = request->value(); + if (value_raw < std::numeric_limits::min() || value_raw > std::numeric_limits::max()) { + std::string message("value "); + message.append(std::to_string(value_raw)); + message.append(" doesn't fit in datatype "); + message.append("uint8_t"); + throw nidevice_grpc::ValueOutOfRangeException(message); + } + auto value = static_cast(value_raw); - auto status = library_->WriteU8(session, control, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + auto status = library_->WriteU8(session, control, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginWriteU8(::grpc::ServerContext* context, const BeginWriteU8Request* request, BeginWriteU8Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - - auto data = std::make_unique(); - data->session = session; - data->control = control; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteU8", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginWriteU8(::grpc::ServerContext* context, const BeginWriteU8Request* request, BeginWriteU8Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + + auto data = std::make_unique(); + data->session = session; + data->control = control; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteU8", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -NiFpgaFeatureToggles::NiFpgaFeatureToggles( + + NiFpgaFeatureToggles::NiFpgaFeatureToggles( const nidevice_grpc::FeatureToggles& feature_toggles) : is_enabled( - feature_toggles.is_feature_enabled("nifpga", CodeReadiness::kRelease)) -{ -} -} // namespace nifpga_grpc + feature_toggles.is_feature_enabled("nifpga", CodeReadiness::kRelease)) + { + } +} // namespace nifpga_grpc + From 5b013cccd1e78b9eaf0fcc8559fc4cafe9842b8a Mon Sep 17 00:00:00 2001 From: Rohan Doshi Date: Tue, 19 Nov 2024 14:49:50 +0530 Subject: [PATCH 04/25] return failure error code from moniker APIs --- generated/nidaqmx/nidaqmx.proto | 279 ++++++ generated/nidaqmx/nidaqmx_service.cpp | 853 ++++++++++++------ generated/nifpga/nifpga_service.cpp | 386 +++++--- source/codegen/templates/service_helpers.mako | 10 +- 4 files changed, 1123 insertions(+), 405 deletions(-) diff --git a/generated/nidaqmx/nidaqmx.proto b/generated/nidaqmx/nidaqmx.proto index 7e726dc5b..86b46cead 100644 --- a/generated/nidaqmx/nidaqmx.proto +++ b/generated/nidaqmx/nidaqmx.proto @@ -8518,6 +8518,16 @@ message BeginReadAnalogF64Response { ni.data_monikers.Moniker moniker = 2; } +message ReadAnalogF64StreamingData { + ReadAnalogF64StreamingDataResponse response = 2; +} + +message ReadAnalogF64StreamingDataResponse { + int32 status = 1; + repeated double read_array = 2; + int32 samps_per_chan_read = 3; +} + message ReadAnalogScalarF64Request { nidevice_grpc.Session task = 1; double timeout = 2; @@ -8538,6 +8548,15 @@ message BeginReadAnalogScalarF64Response { ni.data_monikers.Moniker moniker = 2; } +message ReadAnalogScalarF64StreamingData { + ReadAnalogScalarF64StreamingDataResponse response = 2; +} + +message ReadAnalogScalarF64StreamingDataResponse { + int32 status = 1; + double value = 2; +} + message ReadBinaryI16Request { nidevice_grpc.Session task = 1; int32 num_samps_per_chan = 2; @@ -8571,6 +8590,16 @@ message BeginReadBinaryI16Response { ni.data_monikers.Moniker moniker = 2; } +message ReadBinaryI16StreamingData { + ReadBinaryI16StreamingDataResponse response = 2; +} + +message ReadBinaryI16StreamingDataResponse { + int32 status = 1; + repeated int32 read_array = 2; + int32 samps_per_chan_read = 3; +} + message ReadBinaryI32Request { nidevice_grpc.Session task = 1; int32 num_samps_per_chan = 2; @@ -8604,6 +8633,16 @@ message BeginReadBinaryI32Response { ni.data_monikers.Moniker moniker = 2; } +message ReadBinaryI32StreamingData { + ReadBinaryI32StreamingDataResponse response = 2; +} + +message ReadBinaryI32StreamingDataResponse { + int32 status = 1; + repeated int32 read_array = 2; + int32 samps_per_chan_read = 3; +} + message ReadBinaryU16Request { nidevice_grpc.Session task = 1; int32 num_samps_per_chan = 2; @@ -8637,6 +8676,16 @@ message BeginReadBinaryU16Response { ni.data_monikers.Moniker moniker = 2; } +message ReadBinaryU16StreamingData { + ReadBinaryU16StreamingDataResponse response = 2; +} + +message ReadBinaryU16StreamingDataResponse { + int32 status = 1; + repeated uint32 read_array = 2; + int32 samps_per_chan_read = 3; +} + message ReadBinaryU32Request { nidevice_grpc.Session task = 1; int32 num_samps_per_chan = 2; @@ -8670,6 +8719,16 @@ message BeginReadBinaryU32Response { ni.data_monikers.Moniker moniker = 2; } +message ReadBinaryU32StreamingData { + ReadBinaryU32StreamingDataResponse response = 2; +} + +message ReadBinaryU32StreamingDataResponse { + int32 status = 1; + repeated uint32 read_array = 2; + int32 samps_per_chan_read = 3; +} + message ReadCounterF64Request { nidevice_grpc.Session task = 1; int32 num_samps_per_chan = 2; @@ -8695,6 +8754,16 @@ message BeginReadCounterF64Response { ni.data_monikers.Moniker moniker = 2; } +message ReadCounterF64StreamingData { + ReadCounterF64StreamingDataResponse response = 2; +} + +message ReadCounterF64StreamingDataResponse { + int32 status = 1; + repeated double read_array = 2; + int32 samps_per_chan_read = 3; +} + message ReadCounterF64ExRequest { nidevice_grpc.Session task = 1; int32 num_samps_per_chan = 2; @@ -8728,6 +8797,16 @@ message BeginReadCounterF64ExResponse { ni.data_monikers.Moniker moniker = 2; } +message ReadCounterF64ExStreamingData { + ReadCounterF64ExStreamingDataResponse response = 2; +} + +message ReadCounterF64ExStreamingDataResponse { + int32 status = 1; + repeated double read_array = 2; + int32 samps_per_chan_read = 3; +} + message ReadCounterScalarF64Request { nidevice_grpc.Session task = 1; double timeout = 2; @@ -8748,6 +8827,15 @@ message BeginReadCounterScalarF64Response { ni.data_monikers.Moniker moniker = 2; } +message ReadCounterScalarF64StreamingData { + ReadCounterScalarF64StreamingDataResponse response = 2; +} + +message ReadCounterScalarF64StreamingDataResponse { + int32 status = 1; + double value = 2; +} + message ReadCounterScalarU32Request { nidevice_grpc.Session task = 1; double timeout = 2; @@ -8768,6 +8856,15 @@ message BeginReadCounterScalarU32Response { ni.data_monikers.Moniker moniker = 2; } +message ReadCounterScalarU32StreamingData { + ReadCounterScalarU32StreamingDataResponse response = 2; +} + +message ReadCounterScalarU32StreamingDataResponse { + int32 status = 1; + uint32 value = 2; +} + message ReadCounterU32Request { nidevice_grpc.Session task = 1; int32 num_samps_per_chan = 2; @@ -8793,6 +8890,16 @@ message BeginReadCounterU32Response { ni.data_monikers.Moniker moniker = 2; } +message ReadCounterU32StreamingData { + ReadCounterU32StreamingDataResponse response = 2; +} + +message ReadCounterU32StreamingDataResponse { + int32 status = 1; + repeated uint32 read_array = 2; + int32 samps_per_chan_read = 3; +} + message ReadCounterU32ExRequest { nidevice_grpc.Session task = 1; int32 num_samps_per_chan = 2; @@ -8826,6 +8933,16 @@ message BeginReadCounterU32ExResponse { ni.data_monikers.Moniker moniker = 2; } +message ReadCounterU32ExStreamingData { + ReadCounterU32ExStreamingDataResponse response = 2; +} + +message ReadCounterU32ExStreamingDataResponse { + int32 status = 1; + repeated uint32 read_array = 2; + int32 samps_per_chan_read = 3; +} + message ReadCtrFreqRequest { nidevice_grpc.Session task = 1; int32 num_samps_per_chan = 2; @@ -8951,6 +9068,15 @@ message BeginReadDigitalScalarU32Response { ni.data_monikers.Moniker moniker = 2; } +message ReadDigitalScalarU32StreamingData { + ReadDigitalScalarU32StreamingDataResponse response = 2; +} + +message ReadDigitalScalarU32StreamingDataResponse { + int32 status = 1; + uint32 value = 2; +} + message ReadDigitalU16Request { nidevice_grpc.Session task = 1; int32 num_samps_per_chan = 2; @@ -8984,6 +9110,16 @@ message BeginReadDigitalU16Response { ni.data_monikers.Moniker moniker = 2; } +message ReadDigitalU16StreamingData { + ReadDigitalU16StreamingDataResponse response = 2; +} + +message ReadDigitalU16StreamingDataResponse { + int32 status = 1; + repeated uint32 read_array = 2; + int32 samps_per_chan_read = 3; +} + message ReadDigitalU32Request { nidevice_grpc.Session task = 1; int32 num_samps_per_chan = 2; @@ -9017,6 +9153,16 @@ message BeginReadDigitalU32Response { ni.data_monikers.Moniker moniker = 2; } +message ReadDigitalU32StreamingData { + ReadDigitalU32StreamingDataResponse response = 2; +} + +message ReadDigitalU32StreamingDataResponse { + int32 status = 1; + repeated uint32 read_array = 2; + int32 samps_per_chan_read = 3; +} + message ReadDigitalU8Request { nidevice_grpc.Session task = 1; int32 num_samps_per_chan = 2; @@ -10405,6 +10551,15 @@ message BeginWaitForNextSampleClockResponse { ni.data_monikers.Moniker moniker = 2; } +message WaitForNextSampleClockStreamingData { + WaitForNextSampleClockStreamingDataResponse response = 2; +} + +message WaitForNextSampleClockStreamingDataResponse { + int32 status = 1; + bool is_late = 2; +} + message WaitForValidTimestampRequest { nidevice_grpc.Session task = 1; oneof timestamp_event_enum { @@ -10461,6 +10616,20 @@ message BeginWriteAnalogF64Response { ni.data_monikers.Moniker moniker = 2; } +message WriteAnalogF64StreamingData { + WriteAnalogF64StreamingDataRequest request = 1; + WriteAnalogF64StreamingDataResponse response = 2; +} + +message WriteAnalogF64StreamingDataRequest { + repeated double write_array = 1; +} + +message WriteAnalogF64StreamingDataResponse { + int32 status = 1; + int32 samps_per_chan_written = 2; +} + message WriteAnalogScalarF64Request { nidevice_grpc.Session task = 1; bool auto_start = 2; @@ -10483,6 +10652,19 @@ message BeginWriteAnalogScalarF64Response { ni.data_monikers.Moniker moniker = 2; } +message WriteAnalogScalarF64StreamingData { + WriteAnalogScalarF64StreamingDataRequest request = 1; + WriteAnalogScalarF64StreamingDataResponse response = 2; +} + +message WriteAnalogScalarF64StreamingDataRequest { + double value = 1; +} + +message WriteAnalogScalarF64StreamingDataResponse { + int32 status = 1; +} + message WriteBinaryI16Request { nidevice_grpc.Session task = 1; int32 num_samps_per_chan = 2; @@ -10516,6 +10698,20 @@ message BeginWriteBinaryI16Response { ni.data_monikers.Moniker moniker = 2; } +message WriteBinaryI16StreamingData { + WriteBinaryI16StreamingDataRequest request = 1; + WriteBinaryI16StreamingDataResponse response = 2; +} + +message WriteBinaryI16StreamingDataRequest { + repeated int32 write_array = 1; +} + +message WriteBinaryI16StreamingDataResponse { + int32 status = 1; + int32 samps_per_chan_written = 2; +} + message WriteBinaryI32Request { nidevice_grpc.Session task = 1; int32 num_samps_per_chan = 2; @@ -10549,6 +10745,20 @@ message BeginWriteBinaryI32Response { ni.data_monikers.Moniker moniker = 2; } +message WriteBinaryI32StreamingData { + WriteBinaryI32StreamingDataRequest request = 1; + WriteBinaryI32StreamingDataResponse response = 2; +} + +message WriteBinaryI32StreamingDataRequest { + repeated int32 write_array = 1; +} + +message WriteBinaryI32StreamingDataResponse { + int32 status = 1; + int32 samps_per_chan_written = 2; +} + message WriteBinaryU16Request { nidevice_grpc.Session task = 1; int32 num_samps_per_chan = 2; @@ -10582,6 +10792,20 @@ message BeginWriteBinaryU16Response { ni.data_monikers.Moniker moniker = 2; } +message WriteBinaryU16StreamingData { + WriteBinaryU16StreamingDataRequest request = 1; + WriteBinaryU16StreamingDataResponse response = 2; +} + +message WriteBinaryU16StreamingDataRequest { + repeated uint32 write_array = 1; +} + +message WriteBinaryU16StreamingDataResponse { + int32 status = 1; + int32 samps_per_chan_written = 2; +} + message WriteBinaryU32Request { nidevice_grpc.Session task = 1; int32 num_samps_per_chan = 2; @@ -10615,6 +10839,20 @@ message BeginWriteBinaryU32Response { ni.data_monikers.Moniker moniker = 2; } +message WriteBinaryU32StreamingData { + WriteBinaryU32StreamingDataRequest request = 1; + WriteBinaryU32StreamingDataResponse response = 2; +} + +message WriteBinaryU32StreamingDataRequest { + repeated uint32 write_array = 1; +} + +message WriteBinaryU32StreamingDataResponse { + int32 status = 1; + int32 samps_per_chan_written = 2; +} + message WriteCtrFreqRequest { nidevice_grpc.Session task = 1; int32 num_samps_per_chan = 2; @@ -10744,6 +10982,19 @@ message BeginWriteDigitalScalarU32Response { ni.data_monikers.Moniker moniker = 2; } +message WriteDigitalScalarU32StreamingData { + WriteDigitalScalarU32StreamingDataRequest request = 1; + WriteDigitalScalarU32StreamingDataResponse response = 2; +} + +message WriteDigitalScalarU32StreamingDataRequest { + uint32 value = 1; +} + +message WriteDigitalScalarU32StreamingDataResponse { + int32 status = 1; +} + message WriteDigitalU16Request { nidevice_grpc.Session task = 1; int32 num_samps_per_chan = 2; @@ -10777,6 +11028,20 @@ message BeginWriteDigitalU16Response { ni.data_monikers.Moniker moniker = 2; } +message WriteDigitalU16StreamingData { + WriteDigitalU16StreamingDataRequest request = 1; + WriteDigitalU16StreamingDataResponse response = 2; +} + +message WriteDigitalU16StreamingDataRequest { + repeated uint32 write_array = 1; +} + +message WriteDigitalU16StreamingDataResponse { + int32 status = 1; + int32 samps_per_chan_written = 2; +} + message WriteDigitalU32Request { nidevice_grpc.Session task = 1; int32 num_samps_per_chan = 2; @@ -10810,6 +11075,20 @@ message BeginWriteDigitalU32Response { ni.data_monikers.Moniker moniker = 2; } +message WriteDigitalU32StreamingData { + WriteDigitalU32StreamingDataRequest request = 1; + WriteDigitalU32StreamingDataResponse response = 2; +} + +message WriteDigitalU32StreamingDataRequest { + repeated uint32 write_array = 1; +} + +message WriteDigitalU32StreamingDataResponse { + int32 status = 1; + int32 samps_per_chan_written = 2; +} + message WriteDigitalU8Request { nidevice_grpc.Session task = 1; int32 num_samps_per_chan = 2; diff --git a/generated/nidaqmx/nidaqmx_service.cpp b/generated/nidaqmx/nidaqmx_service.cpp index 1acd25300..6e22e5ac3 100644 --- a/generated/nidaqmx/nidaqmx_service.cpp +++ b/generated/nidaqmx/nidaqmx_service.cpp @@ -33,7 +33,7 @@ namespace nidaqmx_grpc { int32 fill_mode; uInt32 array_size_in_samps; bool32* reserved; - nidaqmx_grpc::ArrayDoubleData data; + nidaqmx_grpc::ReadAnalogF64StreamingData data; std::shared_ptr library; }; @@ -42,7 +42,7 @@ namespace nidaqmx_grpc { TaskHandle task; float64 timeout; bool32* reserved; - nidaqmx_grpc::DoubleData data; + nidaqmx_grpc::ReadAnalogScalarF64StreamingData data; std::shared_ptr library; }; @@ -54,7 +54,7 @@ namespace nidaqmx_grpc { int32 fill_mode; uInt32 array_size_in_samps; bool32* reserved; - nidaqmx_grpc::ArrayI16Data data; + nidaqmx_grpc::ReadBinaryI16StreamingData data; std::shared_ptr library; }; @@ -66,7 +66,7 @@ namespace nidaqmx_grpc { int32 fill_mode; uInt32 array_size_in_samps; bool32* reserved; - nidaqmx_grpc::ArrayI32Data data; + nidaqmx_grpc::ReadBinaryI32StreamingData data; std::shared_ptr library; }; @@ -78,7 +78,7 @@ namespace nidaqmx_grpc { int32 fill_mode; uInt32 array_size_in_samps; bool32* reserved; - nidaqmx_grpc::ArrayU16Data data; + nidaqmx_grpc::ReadBinaryU16StreamingData data; std::shared_ptr library; }; @@ -90,7 +90,7 @@ namespace nidaqmx_grpc { int32 fill_mode; uInt32 array_size_in_samps; bool32* reserved; - nidaqmx_grpc::ArrayU32Data data; + nidaqmx_grpc::ReadBinaryU32StreamingData data; std::shared_ptr library; }; @@ -101,7 +101,7 @@ namespace nidaqmx_grpc { float64 timeout; uInt32 array_size_in_samps; bool32* reserved; - nidaqmx_grpc::ArrayDoubleData data; + nidaqmx_grpc::ReadCounterF64StreamingData data; std::shared_ptr library; }; @@ -113,7 +113,7 @@ namespace nidaqmx_grpc { int32 fill_mode; uInt32 array_size_in_samps; bool32* reserved; - nidaqmx_grpc::ArrayDoubleData data; + nidaqmx_grpc::ReadCounterF64ExStreamingData data; std::shared_ptr library; }; @@ -122,7 +122,7 @@ namespace nidaqmx_grpc { TaskHandle task; float64 timeout; bool32* reserved; - nidaqmx_grpc::DoubleData data; + nidaqmx_grpc::ReadCounterScalarF64StreamingData data; std::shared_ptr library; }; @@ -131,7 +131,7 @@ namespace nidaqmx_grpc { TaskHandle task; float64 timeout; bool32* reserved; - nidaqmx_grpc::U32Data data; + nidaqmx_grpc::ReadCounterScalarU32StreamingData data; std::shared_ptr library; }; @@ -142,7 +142,7 @@ namespace nidaqmx_grpc { float64 timeout; uInt32 array_size_in_samps; bool32* reserved; - nidaqmx_grpc::ArrayU32Data data; + nidaqmx_grpc::ReadCounterU32StreamingData data; std::shared_ptr library; }; @@ -154,7 +154,7 @@ namespace nidaqmx_grpc { int32 fill_mode; uInt32 array_size_in_samps; bool32* reserved; - nidaqmx_grpc::ArrayU32Data data; + nidaqmx_grpc::ReadCounterU32ExStreamingData data; std::shared_ptr library; }; @@ -163,7 +163,7 @@ namespace nidaqmx_grpc { TaskHandle task; float64 timeout; bool32* reserved; - nidaqmx_grpc::U32Data data; + nidaqmx_grpc::ReadDigitalScalarU32StreamingData data; std::shared_ptr library; }; @@ -175,7 +175,7 @@ namespace nidaqmx_grpc { int32 fill_mode; uInt32 array_size_in_samps; bool32* reserved; - nidaqmx_grpc::ArrayU16Data data; + nidaqmx_grpc::ReadDigitalU16StreamingData data; std::shared_ptr library; }; @@ -187,7 +187,7 @@ namespace nidaqmx_grpc { int32 fill_mode; uInt32 array_size_in_samps; bool32* reserved; - nidaqmx_grpc::ArrayU32Data data; + nidaqmx_grpc::ReadDigitalU32StreamingData data; std::shared_ptr library; }; @@ -195,7 +195,7 @@ namespace nidaqmx_grpc { { TaskHandle task; float64 timeout; - nidaqmx_grpc::BoolData data; + nidaqmx_grpc::WaitForNextSampleClockStreamingData data; std::shared_ptr library; }; @@ -207,7 +207,7 @@ namespace nidaqmx_grpc { float64 timeout; int32 data_layout; bool32* reserved; - nidaqmx_grpc::ArrayDoubleData data; + nidaqmx_grpc::WriteAnalogF64StreamingData data; std::shared_ptr library; }; @@ -217,7 +217,7 @@ namespace nidaqmx_grpc { bool32 auto_start; float64 timeout; bool32* reserved; - nidaqmx_grpc::DoubleData data; + nidaqmx_grpc::WriteAnalogScalarF64StreamingData data; std::shared_ptr library; }; @@ -229,7 +229,7 @@ namespace nidaqmx_grpc { float64 timeout; int32 data_layout; bool32* reserved; - nidaqmx_grpc::ArrayI16Data data; + nidaqmx_grpc::WriteBinaryI16StreamingData data; std::shared_ptr library; }; @@ -241,7 +241,7 @@ namespace nidaqmx_grpc { float64 timeout; int32 data_layout; bool32* reserved; - nidaqmx_grpc::ArrayI32Data data; + nidaqmx_grpc::WriteBinaryI32StreamingData data; std::shared_ptr library; }; @@ -253,7 +253,7 @@ namespace nidaqmx_grpc { float64 timeout; int32 data_layout; bool32* reserved; - nidaqmx_grpc::ArrayU16Data data; + nidaqmx_grpc::WriteBinaryU16StreamingData data; std::shared_ptr library; }; @@ -265,7 +265,7 @@ namespace nidaqmx_grpc { float64 timeout; int32 data_layout; bool32* reserved; - nidaqmx_grpc::ArrayU32Data data; + nidaqmx_grpc::WriteBinaryU32StreamingData data; std::shared_ptr library; }; @@ -275,7 +275,7 @@ namespace nidaqmx_grpc { bool32 auto_start; float64 timeout; bool32* reserved; - nidaqmx_grpc::U32Data data; + nidaqmx_grpc::WriteDigitalScalarU32StreamingData data; std::shared_ptr library; }; @@ -287,7 +287,7 @@ namespace nidaqmx_grpc { float64 timeout; int32 data_layout; bool32* reserved; - nidaqmx_grpc::ArrayU16Data data; + nidaqmx_grpc::WriteDigitalU16StreamingData data; std::shared_ptr library; }; @@ -299,7 +299,7 @@ namespace nidaqmx_grpc { float64 timeout; int32 data_layout; bool32* reserved; - nidaqmx_grpc::ArrayU32Data data; + nidaqmx_grpc::WriteDigitalU32StreamingData data; std::shared_ptr library; }; @@ -359,6 +359,7 @@ ::grpc::Status MonikerReadAnalogF64(void* data, google::protobuf::Arena& arena, { MonikerReadAnalogF64Data* function_data = static_cast(data); auto library = function_data->library; + auto response = function_data->data.mutable_response(); auto task = function_data->task; auto num_samps_per_chan = function_data->num_samps_per_chan; auto timeout = function_data->timeout; @@ -366,16 +367,30 @@ ::grpc::Status MonikerReadAnalogF64(void* data, google::protobuf::Arena& arena, auto array_size_in_samps = function_data->array_size_in_samps; auto reserved = function_data->reserved; - int32 samps_per_chan_read = {}; - function_data->data.mutable_value()->Resize(array_size_in_samps, 0); - auto read_array = function_data->data.mutable_value()->mutable_data(); + int32 samps_per_chan_read = {}; + response->mutable_read_array()->Resize(array_size_in_samps, 0); + auto read_array = response->mutable_read_array()->mutable_data(); auto status = library->ReadAnalogF64(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); - if (status >= 0) { + + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + response->set_samps_per_chan_read(samps_per_chan_read); + */ + if (status >= 0) + { + response->set_status(status); + response->set_samps_per_chan_read(samps_per_chan_read); packedData.PackFrom(function_data->data); } - - if (status < 0) { - std::cout << "MonikerReadAnalogF64 error: " << status << std::endl; + else + { + // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); } return ::grpc::Status::OK; } @@ -384,19 +399,32 @@ ::grpc::Status MonikerReadAnalogScalarF64(void* data, google::protobuf::Arena& a { MonikerReadAnalogScalarF64Data* function_data = static_cast(data); auto library = function_data->library; + auto response = function_data->data.mutable_response(); auto task = function_data->task; auto timeout = function_data->timeout; auto reserved = function_data->reserved; - - float64 value {}; + +float64 value {}; auto status = library->ReadAnalogScalarF64(task, timeout, &value, reserved); - function_data->data.set_value(value); - if (status >= 0) { - packedData.PackFrom(function_data->data); - } - if (status < 0) { - std::cout << "MonikerReadAnalogScalarF64 error: " << status << std::endl; + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + response->set_value(value); + */ + if (status >= 0) + { + response->set_status(status); + response->set_value(value); + packedData.PackFrom(function_data->data); + } + else + { + // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); } return ::grpc::Status::OK; } @@ -405,6 +433,7 @@ ::grpc::Status MonikerReadBinaryI16(void* data, google::protobuf::Arena& arena, { MonikerReadBinaryI16Data* function_data = static_cast(data); auto library = function_data->library; + auto response = function_data->data.mutable_response(); auto task = function_data->task; auto num_samps_per_chan = function_data->num_samps_per_chan; auto timeout = function_data->timeout; @@ -412,22 +441,47 @@ ::grpc::Status MonikerReadBinaryI16(void* data, google::protobuf::Arena& arena, auto array_size_in_samps = function_data->array_size_in_samps; auto reserved = function_data->reserved; - int32 samps_per_chan_read = {}; + int32 samps_per_chan_read = {}; std::vector read_array(array_size_in_samps); auto status = library->ReadBinaryI16(task, num_samps_per_chan, timeout, fill_mode, read_array.data(), array_size_in_samps, &samps_per_chan_read, reserved); - if (status >= 0) { - std::transform( - read_array.begin(), - read_array.begin() + array_size_in_samps, - function_data->data.mutable_value()->begin(), - [&](auto x) { - return x; - }); + + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + response->mutable_read_array()->Clear(); + response->mutable_read_array()->Reserve(array_size_in_samps); + std::transform( + read_array.begin(), + read_array.begin() + array_size_in_samps, + google::protobuf::RepeatedFieldBackInserter(response->mutable_read_array()), + [&](auto x) { + return x; + }); + response->set_samps_per_chan_read(samps_per_chan_read); + */ + if (status >= 0) + { + response->set_status(status); + response->mutable_read_array()->Clear(); + response->mutable_read_array()->Reserve(array_size_in_samps); + std::transform( + read_array.begin(), + read_array.begin() + array_size_in_samps, + google::protobuf::RepeatedFieldBackInserter(response->mutable_read_array()), + [&](auto x) { + return x; + }); + response->set_samps_per_chan_read(samps_per_chan_read); packedData.PackFrom(function_data->data); } - - if (status < 0) { - std::cout << "MonikerReadBinaryI16 error: " << status << std::endl; + else + { + // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); } return ::grpc::Status::OK; } @@ -436,6 +490,7 @@ ::grpc::Status MonikerReadBinaryI32(void* data, google::protobuf::Arena& arena, { MonikerReadBinaryI32Data* function_data = static_cast(data); auto library = function_data->library; + auto response = function_data->data.mutable_response(); auto task = function_data->task; auto num_samps_per_chan = function_data->num_samps_per_chan; auto timeout = function_data->timeout; @@ -443,16 +498,30 @@ ::grpc::Status MonikerReadBinaryI32(void* data, google::protobuf::Arena& arena, auto array_size_in_samps = function_data->array_size_in_samps; auto reserved = function_data->reserved; - int32 samps_per_chan_read = {}; - function_data->data.mutable_value()->Resize(array_size_in_samps, 0); - auto read_array = reinterpret_cast(function_data->data.mutable_value()->mutable_data()); + int32 samps_per_chan_read = {}; + response->mutable_read_array()->Resize(array_size_in_samps, 0); + auto read_array = reinterpret_cast(response->mutable_read_array()->mutable_data()); auto status = library->ReadBinaryI32(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); - if (status >= 0) { + + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + response->set_samps_per_chan_read(samps_per_chan_read); + */ + if (status >= 0) + { + response->set_status(status); + response->set_samps_per_chan_read(samps_per_chan_read); packedData.PackFrom(function_data->data); } - - if (status < 0) { - std::cout << "MonikerReadBinaryI32 error: " << status << std::endl; + else + { + // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); } return ::grpc::Status::OK; } @@ -461,6 +530,7 @@ ::grpc::Status MonikerReadBinaryU16(void* data, google::protobuf::Arena& arena, { MonikerReadBinaryU16Data* function_data = static_cast(data); auto library = function_data->library; + auto response = function_data->data.mutable_response(); auto task = function_data->task; auto num_samps_per_chan = function_data->num_samps_per_chan; auto timeout = function_data->timeout; @@ -468,22 +538,47 @@ ::grpc::Status MonikerReadBinaryU16(void* data, google::protobuf::Arena& arena, auto array_size_in_samps = function_data->array_size_in_samps; auto reserved = function_data->reserved; - int32 samps_per_chan_read = {}; + int32 samps_per_chan_read = {}; std::vector read_array(array_size_in_samps); auto status = library->ReadBinaryU16(task, num_samps_per_chan, timeout, fill_mode, read_array.data(), array_size_in_samps, &samps_per_chan_read, reserved); - if (status >= 0) { - std::transform( - read_array.begin(), - read_array.begin() + array_size_in_samps, - function_data->data.mutable_value()->begin(), - [&](auto x) { - return x; - }); + + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + response->mutable_read_array()->Clear(); + response->mutable_read_array()->Reserve(array_size_in_samps); + std::transform( + read_array.begin(), + read_array.begin() + array_size_in_samps, + google::protobuf::RepeatedFieldBackInserter(response->mutable_read_array()), + [&](auto x) { + return x; + }); + response->set_samps_per_chan_read(samps_per_chan_read); + */ + if (status >= 0) + { + response->set_status(status); + response->mutable_read_array()->Clear(); + response->mutable_read_array()->Reserve(array_size_in_samps); + std::transform( + read_array.begin(), + read_array.begin() + array_size_in_samps, + google::protobuf::RepeatedFieldBackInserter(response->mutable_read_array()), + [&](auto x) { + return x; + }); + response->set_samps_per_chan_read(samps_per_chan_read); packedData.PackFrom(function_data->data); } - - if (status < 0) { - std::cout << "MonikerReadBinaryU16 error: " << status << std::endl; + else + { + // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); } return ::grpc::Status::OK; } @@ -492,6 +587,7 @@ ::grpc::Status MonikerReadBinaryU32(void* data, google::protobuf::Arena& arena, { MonikerReadBinaryU32Data* function_data = static_cast(data); auto library = function_data->library; + auto response = function_data->data.mutable_response(); auto task = function_data->task; auto num_samps_per_chan = function_data->num_samps_per_chan; auto timeout = function_data->timeout; @@ -499,16 +595,30 @@ ::grpc::Status MonikerReadBinaryU32(void* data, google::protobuf::Arena& arena, auto array_size_in_samps = function_data->array_size_in_samps; auto reserved = function_data->reserved; - int32 samps_per_chan_read = {}; - function_data->data.mutable_value()->Resize(array_size_in_samps, 0); - auto read_array = reinterpret_cast(function_data->data.mutable_value()->mutable_data()); + int32 samps_per_chan_read = {}; + response->mutable_read_array()->Resize(array_size_in_samps, 0); + auto read_array = reinterpret_cast(response->mutable_read_array()->mutable_data()); auto status = library->ReadBinaryU32(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); - if (status >= 0) { + + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + response->set_samps_per_chan_read(samps_per_chan_read); + */ + if (status >= 0) + { + response->set_status(status); + response->set_samps_per_chan_read(samps_per_chan_read); packedData.PackFrom(function_data->data); } - - if (status < 0) { - std::cout << "MonikerReadBinaryU32 error: " << status << std::endl; + else + { + // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); } return ::grpc::Status::OK; } @@ -517,22 +627,37 @@ ::grpc::Status MonikerReadCounterF64(void* data, google::protobuf::Arena& arena, { MonikerReadCounterF64Data* function_data = static_cast(data); auto library = function_data->library; + auto response = function_data->data.mutable_response(); auto task = function_data->task; auto num_samps_per_chan = function_data->num_samps_per_chan; auto timeout = function_data->timeout; auto array_size_in_samps = function_data->array_size_in_samps; auto reserved = function_data->reserved; - int32 samps_per_chan_read = {}; - function_data->data.mutable_value()->Resize(array_size_in_samps, 0); - auto read_array = function_data->data.mutable_value()->mutable_data(); + int32 samps_per_chan_read = {}; + response->mutable_read_array()->Resize(array_size_in_samps, 0); + auto read_array = response->mutable_read_array()->mutable_data(); auto status = library->ReadCounterF64(task, num_samps_per_chan, timeout, read_array, array_size_in_samps, &samps_per_chan_read, reserved); - if (status >= 0) { + + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + response->set_samps_per_chan_read(samps_per_chan_read); + */ + if (status >= 0) + { + response->set_status(status); + response->set_samps_per_chan_read(samps_per_chan_read); packedData.PackFrom(function_data->data); } - - if (status < 0) { - std::cout << "MonikerReadCounterF64 error: " << status << std::endl; + else + { + // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); } return ::grpc::Status::OK; } @@ -541,6 +666,7 @@ ::grpc::Status MonikerReadCounterF64Ex(void* data, google::protobuf::Arena& aren { MonikerReadCounterF64ExData* function_data = static_cast(data); auto library = function_data->library; + auto response = function_data->data.mutable_response(); auto task = function_data->task; auto num_samps_per_chan = function_data->num_samps_per_chan; auto timeout = function_data->timeout; @@ -548,16 +674,30 @@ ::grpc::Status MonikerReadCounterF64Ex(void* data, google::protobuf::Arena& aren auto array_size_in_samps = function_data->array_size_in_samps; auto reserved = function_data->reserved; - int32 samps_per_chan_read = {}; - function_data->data.mutable_value()->Resize(array_size_in_samps, 0); - auto read_array = function_data->data.mutable_value()->mutable_data(); + int32 samps_per_chan_read = {}; + response->mutable_read_array()->Resize(array_size_in_samps, 0); + auto read_array = response->mutable_read_array()->mutable_data(); auto status = library->ReadCounterF64Ex(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); - if (status >= 0) { + + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + response->set_samps_per_chan_read(samps_per_chan_read); + */ + if (status >= 0) + { + response->set_status(status); + response->set_samps_per_chan_read(samps_per_chan_read); packedData.PackFrom(function_data->data); } - - if (status < 0) { - std::cout << "MonikerReadCounterF64Ex error: " << status << std::endl; + else + { + // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); } return ::grpc::Status::OK; } @@ -566,19 +706,32 @@ ::grpc::Status MonikerReadCounterScalarF64(void* data, google::protobuf::Arena& { MonikerReadCounterScalarF64Data* function_data = static_cast(data); auto library = function_data->library; + auto response = function_data->data.mutable_response(); auto task = function_data->task; auto timeout = function_data->timeout; auto reserved = function_data->reserved; - - float64 value {}; + +float64 value {}; auto status = library->ReadCounterScalarF64(task, timeout, &value, reserved); - function_data->data.set_value(value); - if (status >= 0) { - packedData.PackFrom(function_data->data); - } - if (status < 0) { - std::cout << "MonikerReadCounterScalarF64 error: " << status << std::endl; + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + response->set_value(value); + */ + if (status >= 0) + { + response->set_status(status); + response->set_value(value); + packedData.PackFrom(function_data->data); + } + else + { + // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); } return ::grpc::Status::OK; } @@ -587,19 +740,32 @@ ::grpc::Status MonikerReadCounterScalarU32(void* data, google::protobuf::Arena& { MonikerReadCounterScalarU32Data* function_data = static_cast(data); auto library = function_data->library; + auto response = function_data->data.mutable_response(); auto task = function_data->task; auto timeout = function_data->timeout; auto reserved = function_data->reserved; - - uInt32 value {}; + +uInt32 value {}; auto status = library->ReadCounterScalarU32(task, timeout, &value, reserved); - function_data->data.set_value(value); - if (status >= 0) { - packedData.PackFrom(function_data->data); - } - if (status < 0) { - std::cout << "MonikerReadCounterScalarU32 error: " << status << std::endl; + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + response->set_value(value); + */ + if (status >= 0) + { + response->set_status(status); + response->set_value(value); + packedData.PackFrom(function_data->data); + } + else + { + // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); } return ::grpc::Status::OK; } @@ -608,22 +774,37 @@ ::grpc::Status MonikerReadCounterU32(void* data, google::protobuf::Arena& arena, { MonikerReadCounterU32Data* function_data = static_cast(data); auto library = function_data->library; + auto response = function_data->data.mutable_response(); auto task = function_data->task; auto num_samps_per_chan = function_data->num_samps_per_chan; auto timeout = function_data->timeout; auto array_size_in_samps = function_data->array_size_in_samps; auto reserved = function_data->reserved; - int32 samps_per_chan_read = {}; - function_data->data.mutable_value()->Resize(array_size_in_samps, 0); - auto read_array = reinterpret_cast(function_data->data.mutable_value()->mutable_data()); + int32 samps_per_chan_read = {}; + response->mutable_read_array()->Resize(array_size_in_samps, 0); + auto read_array = reinterpret_cast(response->mutable_read_array()->mutable_data()); auto status = library->ReadCounterU32(task, num_samps_per_chan, timeout, read_array, array_size_in_samps, &samps_per_chan_read, reserved); - if (status >= 0) { + + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + response->set_samps_per_chan_read(samps_per_chan_read); + */ + if (status >= 0) + { + response->set_status(status); + response->set_samps_per_chan_read(samps_per_chan_read); packedData.PackFrom(function_data->data); } - - if (status < 0) { - std::cout << "MonikerReadCounterU32 error: " << status << std::endl; + else + { + // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); } return ::grpc::Status::OK; } @@ -632,6 +813,7 @@ ::grpc::Status MonikerReadCounterU32Ex(void* data, google::protobuf::Arena& aren { MonikerReadCounterU32ExData* function_data = static_cast(data); auto library = function_data->library; + auto response = function_data->data.mutable_response(); auto task = function_data->task; auto num_samps_per_chan = function_data->num_samps_per_chan; auto timeout = function_data->timeout; @@ -639,16 +821,30 @@ ::grpc::Status MonikerReadCounterU32Ex(void* data, google::protobuf::Arena& aren auto array_size_in_samps = function_data->array_size_in_samps; auto reserved = function_data->reserved; - int32 samps_per_chan_read = {}; - function_data->data.mutable_value()->Resize(array_size_in_samps, 0); - auto read_array = reinterpret_cast(function_data->data.mutable_value()->mutable_data()); + int32 samps_per_chan_read = {}; + response->mutable_read_array()->Resize(array_size_in_samps, 0); + auto read_array = reinterpret_cast(response->mutable_read_array()->mutable_data()); auto status = library->ReadCounterU32Ex(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); - if (status >= 0) { + + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + response->set_samps_per_chan_read(samps_per_chan_read); + */ + if (status >= 0) + { + response->set_status(status); + response->set_samps_per_chan_read(samps_per_chan_read); packedData.PackFrom(function_data->data); } - - if (status < 0) { - std::cout << "MonikerReadCounterU32Ex error: " << status << std::endl; + else + { + // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); } return ::grpc::Status::OK; } @@ -657,19 +853,32 @@ ::grpc::Status MonikerReadDigitalScalarU32(void* data, google::protobuf::Arena& { MonikerReadDigitalScalarU32Data* function_data = static_cast(data); auto library = function_data->library; + auto response = function_data->data.mutable_response(); auto task = function_data->task; auto timeout = function_data->timeout; auto reserved = function_data->reserved; - - uInt32 value {}; + +uInt32 value {}; auto status = library->ReadDigitalScalarU32(task, timeout, &value, reserved); - function_data->data.set_value(value); - if (status >= 0) { - packedData.PackFrom(function_data->data); - } - if (status < 0) { - std::cout << "MonikerReadDigitalScalarU32 error: " << status << std::endl; + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + response->set_value(value); + */ + if (status >= 0) + { + response->set_status(status); + response->set_value(value); + packedData.PackFrom(function_data->data); + } + else + { + // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); } return ::grpc::Status::OK; } @@ -678,6 +887,7 @@ ::grpc::Status MonikerReadDigitalU16(void* data, google::protobuf::Arena& arena, { MonikerReadDigitalU16Data* function_data = static_cast(data); auto library = function_data->library; + auto response = function_data->data.mutable_response(); auto task = function_data->task; auto num_samps_per_chan = function_data->num_samps_per_chan; auto timeout = function_data->timeout; @@ -685,22 +895,47 @@ ::grpc::Status MonikerReadDigitalU16(void* data, google::protobuf::Arena& arena, auto array_size_in_samps = function_data->array_size_in_samps; auto reserved = function_data->reserved; - int32 samps_per_chan_read = {}; + int32 samps_per_chan_read = {}; std::vector read_array(array_size_in_samps); auto status = library->ReadDigitalU16(task, num_samps_per_chan, timeout, fill_mode, read_array.data(), array_size_in_samps, &samps_per_chan_read, reserved); - if (status >= 0) { - std::transform( - read_array.begin(), - read_array.begin() + array_size_in_samps, - function_data->data.mutable_value()->begin(), - [&](auto x) { - return x; - }); + + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + response->mutable_read_array()->Clear(); + response->mutable_read_array()->Reserve(array_size_in_samps); + std::transform( + read_array.begin(), + read_array.begin() + array_size_in_samps, + google::protobuf::RepeatedFieldBackInserter(response->mutable_read_array()), + [&](auto x) { + return x; + }); + response->set_samps_per_chan_read(samps_per_chan_read); + */ + if (status >= 0) + { + response->set_status(status); + response->mutable_read_array()->Clear(); + response->mutable_read_array()->Reserve(array_size_in_samps); + std::transform( + read_array.begin(), + read_array.begin() + array_size_in_samps, + google::protobuf::RepeatedFieldBackInserter(response->mutable_read_array()), + [&](auto x) { + return x; + }); + response->set_samps_per_chan_read(samps_per_chan_read); packedData.PackFrom(function_data->data); } - - if (status < 0) { - std::cout << "MonikerReadDigitalU16 error: " << status << std::endl; + else + { + // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); } return ::grpc::Status::OK; } @@ -709,6 +944,7 @@ ::grpc::Status MonikerReadDigitalU32(void* data, google::protobuf::Arena& arena, { MonikerReadDigitalU32Data* function_data = static_cast(data); auto library = function_data->library; + auto response = function_data->data.mutable_response(); auto task = function_data->task; auto num_samps_per_chan = function_data->num_samps_per_chan; auto timeout = function_data->timeout; @@ -716,16 +952,30 @@ ::grpc::Status MonikerReadDigitalU32(void* data, google::protobuf::Arena& arena, auto array_size_in_samps = function_data->array_size_in_samps; auto reserved = function_data->reserved; - int32 samps_per_chan_read = {}; - function_data->data.mutable_value()->Resize(array_size_in_samps, 0); - auto read_array = reinterpret_cast(function_data->data.mutable_value()->mutable_data()); + int32 samps_per_chan_read = {}; + response->mutable_read_array()->Resize(array_size_in_samps, 0); + auto read_array = reinterpret_cast(response->mutable_read_array()->mutable_data()); auto status = library->ReadDigitalU32(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); - if (status >= 0) { + + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + response->set_samps_per_chan_read(samps_per_chan_read); + */ + if (status >= 0) + { + response->set_status(status); + response->set_samps_per_chan_read(samps_per_chan_read); packedData.PackFrom(function_data->data); } - - if (status < 0) { - std::cout << "MonikerReadDigitalU32 error: " << status << std::endl; + else + { + // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); } return ::grpc::Status::OK; } @@ -734,18 +984,31 @@ ::grpc::Status MonikerWaitForNextSampleClock(void* data, google::protobuf::Arena { MonikerWaitForNextSampleClockData* function_data = static_cast(data); auto library = function_data->library; + auto response = function_data->data.mutable_response(); auto task = function_data->task; auto timeout = function_data->timeout; - - bool32 is_late {}; + +bool32 is_late {}; auto status = library->WaitForNextSampleClock(task, timeout, &is_late); - function_data->data.set_value(is_late); - if (status >= 0) { - packedData.PackFrom(function_data->data); - } - if (status < 0) { - std::cout << "MonikerWaitForNextSampleClock error: " << status << std::endl; + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + response->set_is_late(is_late); + */ + if (status >= 0) + { + response->set_status(status); + response->set_is_late(is_late); + packedData.PackFrom(function_data->data); + } + else + { + // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); } return ::grpc::Status::OK; } @@ -754,6 +1017,7 @@ ::grpc::Status MonikerWriteAnalogF64(void* data, google::protobuf::Arena& arena, { MonikerWriteAnalogF64Data* function_data = static_cast(data); auto library = function_data->library; + auto response = function_data->data.mutable_response(); auto task = function_data->task; auto num_samps_per_chan = function_data->num_samps_per_chan; auto auto_start = function_data->auto_start; @@ -761,7 +1025,7 @@ ::grpc::Status MonikerWriteAnalogF64(void* data, google::protobuf::Arena& arena, auto data_layout = function_data->data_layout; auto reserved = function_data->reserved; - int32 samps_per_chan_written = {}; + int32 samps_per_chan_written = {}; ArrayDoubleData arraydoubledata_message; packedData.UnpackTo(&arraydoubledata_message); @@ -770,9 +1034,15 @@ ::grpc::Status MonikerWriteAnalogF64(void* data, google::protobuf::Arena& arena, auto size = data_array.size(); auto status = library->WriteAnalogF64(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array, &samps_per_chan_written, reserved); - if (status < 0) { - std::cout << "MonikerWriteAnalogF64 error: " << status << std::endl; - } + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(samps_per_chan_written)); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + response->set_samps_per_chan_written(samps_per_chan_written); + */ return ::grpc::Status::OK; } @@ -780,19 +1050,24 @@ ::grpc::Status MonikerWriteAnalogScalarF64(void* data, google::protobuf::Arena& { MonikerWriteAnalogScalarF64Data* function_data = static_cast(data); auto library = function_data->library; + auto response = function_data->data.mutable_response(); auto task = function_data->task; auto auto_start = function_data->auto_start; auto timeout = function_data->timeout; auto reserved = function_data->reserved; - + DoubleData doubledata_message; packedData.UnpackTo(&doubledata_message); auto value = doubledata_message.value(); auto status = library->WriteAnalogScalarF64(task, auto_start, timeout, value, reserved); - if (status < 0) { - std::cout << "MonikerWriteAnalogScalarF64 error: " << status << std::endl; - } + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + */ return ::grpc::Status::OK; } @@ -800,6 +1075,7 @@ ::grpc::Status MonikerWriteBinaryI16(void* data, google::protobuf::Arena& arena, { MonikerWriteBinaryI16Data* function_data = static_cast(data); auto library = function_data->library; + auto response = function_data->data.mutable_response(); auto task = function_data->task; auto num_samps_per_chan = function_data->num_samps_per_chan; auto auto_start = function_data->auto_start; @@ -807,7 +1083,7 @@ ::grpc::Status MonikerWriteBinaryI16(void* data, google::protobuf::Arena& arena, auto data_layout = function_data->data_layout; auto reserved = function_data->reserved; - int32 samps_per_chan_written = {}; + int32 samps_per_chan_written = {}; ArrayI16Data arrayi16data_message; packedData.UnpackTo(&arrayi16data_message); @@ -828,9 +1104,15 @@ ::grpc::Status MonikerWriteBinaryI16(void* data, google::protobuf::Arena& arena, }); auto status = library->WriteBinaryI16(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array.data(), &samps_per_chan_written, reserved); - if (status < 0) { - std::cout << "MonikerWriteBinaryI16 error: " << status << std::endl; - } + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(samps_per_chan_written)); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + response->set_samps_per_chan_written(samps_per_chan_written); + */ return ::grpc::Status::OK; } @@ -838,6 +1120,7 @@ ::grpc::Status MonikerWriteBinaryI32(void* data, google::protobuf::Arena& arena, { MonikerWriteBinaryI32Data* function_data = static_cast(data); auto library = function_data->library; + auto response = function_data->data.mutable_response(); auto task = function_data->task; auto num_samps_per_chan = function_data->num_samps_per_chan; auto auto_start = function_data->auto_start; @@ -845,7 +1128,7 @@ ::grpc::Status MonikerWriteBinaryI32(void* data, google::protobuf::Arena& arena, auto data_layout = function_data->data_layout; auto reserved = function_data->reserved; - int32 samps_per_chan_written = {}; + int32 samps_per_chan_written = {}; ArrayI32Data arrayi32data_message; packedData.UnpackTo(&arrayi32data_message); @@ -854,9 +1137,15 @@ ::grpc::Status MonikerWriteBinaryI32(void* data, google::protobuf::Arena& arena, auto size = data_array.size(); auto status = library->WriteBinaryI32(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array, &samps_per_chan_written, reserved); - if (status < 0) { - std::cout << "MonikerWriteBinaryI32 error: " << status << std::endl; - } + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(samps_per_chan_written)); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + response->set_samps_per_chan_written(samps_per_chan_written); + */ return ::grpc::Status::OK; } @@ -864,6 +1153,7 @@ ::grpc::Status MonikerWriteBinaryU16(void* data, google::protobuf::Arena& arena, { MonikerWriteBinaryU16Data* function_data = static_cast(data); auto library = function_data->library; + auto response = function_data->data.mutable_response(); auto task = function_data->task; auto num_samps_per_chan = function_data->num_samps_per_chan; auto auto_start = function_data->auto_start; @@ -871,7 +1161,7 @@ ::grpc::Status MonikerWriteBinaryU16(void* data, google::protobuf::Arena& arena, auto data_layout = function_data->data_layout; auto reserved = function_data->reserved; - int32 samps_per_chan_written = {}; + int32 samps_per_chan_written = {}; ArrayU16Data arrayu16data_message; packedData.UnpackTo(&arrayu16data_message); @@ -892,9 +1182,15 @@ ::grpc::Status MonikerWriteBinaryU16(void* data, google::protobuf::Arena& arena, }); auto status = library->WriteBinaryU16(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array.data(), &samps_per_chan_written, reserved); - if (status < 0) { - std::cout << "MonikerWriteBinaryU16 error: " << status << std::endl; - } + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(samps_per_chan_written)); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + response->set_samps_per_chan_written(samps_per_chan_written); + */ return ::grpc::Status::OK; } @@ -902,6 +1198,7 @@ ::grpc::Status MonikerWriteBinaryU32(void* data, google::protobuf::Arena& arena, { MonikerWriteBinaryU32Data* function_data = static_cast(data); auto library = function_data->library; + auto response = function_data->data.mutable_response(); auto task = function_data->task; auto num_samps_per_chan = function_data->num_samps_per_chan; auto auto_start = function_data->auto_start; @@ -909,7 +1206,7 @@ ::grpc::Status MonikerWriteBinaryU32(void* data, google::protobuf::Arena& arena, auto data_layout = function_data->data_layout; auto reserved = function_data->reserved; - int32 samps_per_chan_written = {}; + int32 samps_per_chan_written = {}; ArrayU32Data arrayu32data_message; packedData.UnpackTo(&arrayu32data_message); @@ -918,9 +1215,15 @@ ::grpc::Status MonikerWriteBinaryU32(void* data, google::protobuf::Arena& arena, auto size = data_array.size(); auto status = library->WriteBinaryU32(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array, &samps_per_chan_written, reserved); - if (status < 0) { - std::cout << "MonikerWriteBinaryU32 error: " << status << std::endl; - } + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(samps_per_chan_written)); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + response->set_samps_per_chan_written(samps_per_chan_written); + */ return ::grpc::Status::OK; } @@ -928,19 +1231,24 @@ ::grpc::Status MonikerWriteDigitalScalarU32(void* data, google::protobuf::Arena& { MonikerWriteDigitalScalarU32Data* function_data = static_cast(data); auto library = function_data->library; + auto response = function_data->data.mutable_response(); auto task = function_data->task; auto auto_start = function_data->auto_start; auto timeout = function_data->timeout; auto reserved = function_data->reserved; - + U32Data u32data_message; packedData.UnpackTo(&u32data_message); auto value = u32data_message.value(); auto status = library->WriteDigitalScalarU32(task, auto_start, timeout, value, reserved); - if (status < 0) { - std::cout << "MonikerWriteDigitalScalarU32 error: " << status << std::endl; - } + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + */ return ::grpc::Status::OK; } @@ -948,6 +1256,7 @@ ::grpc::Status MonikerWriteDigitalU16(void* data, google::protobuf::Arena& arena { MonikerWriteDigitalU16Data* function_data = static_cast(data); auto library = function_data->library; + auto response = function_data->data.mutable_response(); auto task = function_data->task; auto num_samps_per_chan = function_data->num_samps_per_chan; auto auto_start = function_data->auto_start; @@ -955,7 +1264,7 @@ ::grpc::Status MonikerWriteDigitalU16(void* data, google::protobuf::Arena& arena auto data_layout = function_data->data_layout; auto reserved = function_data->reserved; - int32 samps_per_chan_written = {}; + int32 samps_per_chan_written = {}; ArrayU16Data arrayu16data_message; packedData.UnpackTo(&arrayu16data_message); @@ -976,9 +1285,15 @@ ::grpc::Status MonikerWriteDigitalU16(void* data, google::protobuf::Arena& arena }); auto status = library->WriteDigitalU16(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array.data(), &samps_per_chan_written, reserved); - if (status < 0) { - std::cout << "MonikerWriteDigitalU16 error: " << status << std::endl; - } + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(samps_per_chan_written)); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + response->set_samps_per_chan_written(samps_per_chan_written); + */ return ::grpc::Status::OK; } @@ -986,6 +1301,7 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena { MonikerWriteDigitalU32Data* function_data = static_cast(data); auto library = function_data->library; + auto response = function_data->data.mutable_response(); auto task = function_data->task; auto num_samps_per_chan = function_data->num_samps_per_chan; auto auto_start = function_data->auto_start; @@ -993,7 +1309,7 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena auto data_layout = function_data->data_layout; auto reserved = function_data->reserved; - int32 samps_per_chan_written = {}; + int32 samps_per_chan_written = {}; ArrayU32Data arrayu32data_message; packedData.UnpackTo(&arrayu32data_message); @@ -1002,11 +1318,18 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena auto size = data_array.size(); auto status = library->WriteDigitalU32(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array, &samps_per_chan_written, reserved); - if (status < 0) { - std::cout << "MonikerWriteDigitalU32 error: " << status << std::endl; - } + /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. + ::grpc::ServerContext* context = NULL; + context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(samps_per_chan_written)); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + response->set_samps_per_chan_written(samps_per_chan_written); + */ return ::grpc::Status::OK; } + //--------------------------------------------------------------------- //--------------------------------------------------------------------- ::grpc::Status NiDAQmxService::AddCDAQSyncConnection(::grpc::ServerContext* context, const AddCDAQSyncConnectionRequest* request, AddCDAQSyncConnectionResponse* response) @@ -14198,8 +14521,8 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena uInt32 array_size_in_samps = request->array_size_in_samps(); auto reserved = nullptr; - auto data = std::make_unique(); - data->task = task; + auto data = std::make_unique(); + data->task = task; data->num_samps_per_chan = num_samps_per_chan; data->timeout = timeout; data->fill_mode = fill_mode; @@ -14207,8 +14530,8 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena data->reserved = reserved; data->library = std::shared_ptr(library_); - data->data.mutable_value()->Reserve(request->array_size_in_samps()); - data->data.mutable_value()->Resize(request->array_size_in_samps(), 0); + data->data.mutable_response()->mutable_read_array()->Reserve(request->array_size_in_samps()); + data->data.mutable_response()->mutable_read_array()->Resize(request->array_size_in_samps(), 0); auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadAnalogF64", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -14259,8 +14582,8 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena float64 timeout = request->timeout(); auto reserved = nullptr; - auto data = std::make_unique(); - data->task = task; + auto data = std::make_unique(); + data->task = task; data->timeout = timeout; data->reserved = reserved; data->library = std::shared_ptr(library_); @@ -14362,8 +14685,8 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena uInt32 array_size_in_samps = request->array_size_in_samps(); auto reserved = nullptr; - auto data = std::make_unique(); - data->task = task; + auto data = std::make_unique(); + data->task = task; data->num_samps_per_chan = num_samps_per_chan; data->timeout = timeout; data->fill_mode = fill_mode; @@ -14371,8 +14694,8 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena data->reserved = reserved; data->library = std::shared_ptr(library_); - data->data.mutable_value()->Reserve(request->array_size_in_samps()); - data->data.mutable_value()->Resize(request->array_size_in_samps(), 0); + data->data.mutable_response()->mutable_read_array()->Reserve(request->array_size_in_samps()); + data->data.mutable_response()->mutable_read_array()->Resize(request->array_size_in_samps(), 0); auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadBinaryI16", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -14462,8 +14785,8 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena uInt32 array_size_in_samps = request->array_size_in_samps(); auto reserved = nullptr; - auto data = std::make_unique(); - data->task = task; + auto data = std::make_unique(); + data->task = task; data->num_samps_per_chan = num_samps_per_chan; data->timeout = timeout; data->fill_mode = fill_mode; @@ -14471,8 +14794,8 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena data->reserved = reserved; data->library = std::shared_ptr(library_); - data->data.mutable_value()->Reserve(request->array_size_in_samps()); - data->data.mutable_value()->Resize(request->array_size_in_samps(), 0); + data->data.mutable_response()->mutable_read_array()->Reserve(request->array_size_in_samps()); + data->data.mutable_response()->mutable_read_array()->Resize(request->array_size_in_samps(), 0); auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadBinaryI32", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -14570,8 +14893,8 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena uInt32 array_size_in_samps = request->array_size_in_samps(); auto reserved = nullptr; - auto data = std::make_unique(); - data->task = task; + auto data = std::make_unique(); + data->task = task; data->num_samps_per_chan = num_samps_per_chan; data->timeout = timeout; data->fill_mode = fill_mode; @@ -14579,8 +14902,8 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena data->reserved = reserved; data->library = std::shared_ptr(library_); - data->data.mutable_value()->Reserve(request->array_size_in_samps()); - data->data.mutable_value()->Resize(request->array_size_in_samps(), 0); + data->data.mutable_response()->mutable_read_array()->Reserve(request->array_size_in_samps()); + data->data.mutable_response()->mutable_read_array()->Resize(request->array_size_in_samps(), 0); auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadBinaryU16", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -14670,8 +14993,8 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena uInt32 array_size_in_samps = request->array_size_in_samps(); auto reserved = nullptr; - auto data = std::make_unique(); - data->task = task; + auto data = std::make_unique(); + data->task = task; data->num_samps_per_chan = num_samps_per_chan; data->timeout = timeout; data->fill_mode = fill_mode; @@ -14679,8 +15002,8 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena data->reserved = reserved; data->library = std::shared_ptr(library_); - data->data.mutable_value()->Reserve(request->array_size_in_samps()); - data->data.mutable_value()->Resize(request->array_size_in_samps(), 0); + data->data.mutable_response()->mutable_read_array()->Reserve(request->array_size_in_samps()); + data->data.mutable_response()->mutable_read_array()->Resize(request->array_size_in_samps(), 0); auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadBinaryU32", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -14738,16 +15061,16 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena uInt32 array_size_in_samps = request->array_size_in_samps(); auto reserved = nullptr; - auto data = std::make_unique(); - data->task = task; + auto data = std::make_unique(); + data->task = task; data->num_samps_per_chan = num_samps_per_chan; data->timeout = timeout; data->array_size_in_samps = array_size_in_samps; data->reserved = reserved; data->library = std::shared_ptr(library_); - data->data.mutable_value()->Reserve(request->array_size_in_samps()); - data->data.mutable_value()->Resize(request->array_size_in_samps(), 0); + data->data.mutable_response()->mutable_read_array()->Reserve(request->array_size_in_samps()); + data->data.mutable_response()->mutable_read_array()->Resize(request->array_size_in_samps(), 0); auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCounterF64", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -14837,8 +15160,8 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena uInt32 array_size_in_samps = request->array_size_in_samps(); auto reserved = nullptr; - auto data = std::make_unique(); - data->task = task; + auto data = std::make_unique(); + data->task = task; data->num_samps_per_chan = num_samps_per_chan; data->timeout = timeout; data->fill_mode = fill_mode; @@ -14846,8 +15169,8 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena data->reserved = reserved; data->library = std::shared_ptr(library_); - data->data.mutable_value()->Reserve(request->array_size_in_samps()); - data->data.mutable_value()->Resize(request->array_size_in_samps(), 0); + data->data.mutable_response()->mutable_read_array()->Reserve(request->array_size_in_samps()); + data->data.mutable_response()->mutable_read_array()->Resize(request->array_size_in_samps(), 0); auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCounterF64Ex", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -14898,8 +15221,8 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena float64 timeout = request->timeout(); auto reserved = nullptr; - auto data = std::make_unique(); - data->task = task; + auto data = std::make_unique(); + data->task = task; data->timeout = timeout; data->reserved = reserved; data->library = std::shared_ptr(library_); @@ -14954,8 +15277,8 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena float64 timeout = request->timeout(); auto reserved = nullptr; - auto data = std::make_unique(); - data->task = task; + auto data = std::make_unique(); + data->task = task; data->timeout = timeout; data->reserved = reserved; data->library = std::shared_ptr(library_); @@ -15017,16 +15340,16 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena uInt32 array_size_in_samps = request->array_size_in_samps(); auto reserved = nullptr; - auto data = std::make_unique(); - data->task = task; + auto data = std::make_unique(); + data->task = task; data->num_samps_per_chan = num_samps_per_chan; data->timeout = timeout; data->array_size_in_samps = array_size_in_samps; data->reserved = reserved; data->library = std::shared_ptr(library_); - data->data.mutable_value()->Reserve(request->array_size_in_samps()); - data->data.mutable_value()->Resize(request->array_size_in_samps(), 0); + data->data.mutable_response()->mutable_read_array()->Reserve(request->array_size_in_samps()); + data->data.mutable_response()->mutable_read_array()->Resize(request->array_size_in_samps(), 0); auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCounterU32", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -15116,8 +15439,8 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena uInt32 array_size_in_samps = request->array_size_in_samps(); auto reserved = nullptr; - auto data = std::make_unique(); - data->task = task; + auto data = std::make_unique(); + data->task = task; data->num_samps_per_chan = num_samps_per_chan; data->timeout = timeout; data->fill_mode = fill_mode; @@ -15125,8 +15448,8 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena data->reserved = reserved; data->library = std::shared_ptr(library_); - data->data.mutable_value()->Reserve(request->array_size_in_samps()); - data->data.mutable_value()->Resize(request->array_size_in_samps(), 0); + data->data.mutable_response()->mutable_read_array()->Reserve(request->array_size_in_samps()); + data->data.mutable_response()->mutable_read_array()->Resize(request->array_size_in_samps(), 0); auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCounterU32Ex", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -15457,8 +15780,8 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena float64 timeout = request->timeout(); auto reserved = nullptr; - auto data = std::make_unique(); - data->task = task; + auto data = std::make_unique(); + data->task = task; data->timeout = timeout; data->reserved = reserved; data->library = std::shared_ptr(library_); @@ -15560,8 +15883,8 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena uInt32 array_size_in_samps = request->array_size_in_samps(); auto reserved = nullptr; - auto data = std::make_unique(); - data->task = task; + auto data = std::make_unique(); + data->task = task; data->num_samps_per_chan = num_samps_per_chan; data->timeout = timeout; data->fill_mode = fill_mode; @@ -15569,8 +15892,8 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena data->reserved = reserved; data->library = std::shared_ptr(library_); - data->data.mutable_value()->Reserve(request->array_size_in_samps()); - data->data.mutable_value()->Resize(request->array_size_in_samps(), 0); + data->data.mutable_response()->mutable_read_array()->Reserve(request->array_size_in_samps()); + data->data.mutable_response()->mutable_read_array()->Resize(request->array_size_in_samps(), 0); auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadDigitalU16", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -15660,8 +15983,8 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena uInt32 array_size_in_samps = request->array_size_in_samps(); auto reserved = nullptr; - auto data = std::make_unique(); - data->task = task; + auto data = std::make_unique(); + data->task = task; data->num_samps_per_chan = num_samps_per_chan; data->timeout = timeout; data->fill_mode = fill_mode; @@ -15669,8 +15992,8 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena data->reserved = reserved; data->library = std::shared_ptr(library_); - data->data.mutable_value()->Reserve(request->array_size_in_samps()); - data->data.mutable_value()->Resize(request->array_size_in_samps(), 0); + data->data.mutable_response()->mutable_read_array()->Reserve(request->array_size_in_samps()); + data->data.mutable_response()->mutable_read_array()->Resize(request->array_size_in_samps(), 0); auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadDigitalU32", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -20197,8 +20520,8 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena TaskHandle task = session_repository_->access_session(task_grpc_session.name()); float64 timeout = request->timeout(); - auto data = std::make_unique(); - data->task = task; + auto data = std::make_unique(); + data->task = task; data->timeout = timeout; data->library = std::shared_ptr(library_); @@ -20354,8 +20677,8 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena auto reserved = nullptr; - auto data = std::make_unique(); - data->task = task; + auto data = std::make_unique(); + data->task = task; data->num_samps_per_chan = num_samps_per_chan; data->auto_start = auto_start; data->timeout = timeout; @@ -20414,8 +20737,8 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena float64 timeout = request->timeout(); auto reserved = nullptr; - auto data = std::make_unique(); - data->task = task; + auto data = std::make_unique(); + data->task = task; data->auto_start = auto_start; data->timeout = timeout; data->reserved = reserved; @@ -20526,8 +20849,8 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena auto reserved = nullptr; - auto data = std::make_unique(); - data->task = task; + auto data = std::make_unique(); + data->task = task; data->num_samps_per_chan = num_samps_per_chan; data->auto_start = auto_start; data->timeout = timeout; @@ -20623,8 +20946,8 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena auto reserved = nullptr; - auto data = std::make_unique(); - data->task = task; + auto data = std::make_unique(); + data->task = task; data->num_samps_per_chan = num_samps_per_chan; data->auto_start = auto_start; data->timeout = timeout; @@ -20737,8 +21060,8 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena auto reserved = nullptr; - auto data = std::make_unique(); - data->task = task; + auto data = std::make_unique(); + data->task = task; data->num_samps_per_chan = num_samps_per_chan; data->auto_start = auto_start; data->timeout = timeout; @@ -20834,8 +21157,8 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena auto reserved = nullptr; - auto data = std::make_unique(); - data->task = task; + auto data = std::make_unique(); + data->task = task; data->num_samps_per_chan = num_samps_per_chan; data->auto_start = auto_start; data->timeout = timeout; @@ -21162,8 +21485,8 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena float64 timeout = request->timeout(); auto reserved = nullptr; - auto data = std::make_unique(); - data->task = task; + auto data = std::make_unique(); + data->task = task; data->auto_start = auto_start; data->timeout = timeout; data->reserved = reserved; @@ -21274,8 +21597,8 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena auto reserved = nullptr; - auto data = std::make_unique(); - data->task = task; + auto data = std::make_unique(); + data->task = task; data->num_samps_per_chan = num_samps_per_chan; data->auto_start = auto_start; data->timeout = timeout; @@ -21371,8 +21694,8 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena auto reserved = nullptr; - auto data = std::make_unique(); - data->task = task; + auto data = std::make_unique(); + data->task = task; data->num_samps_per_chan = num_samps_per_chan; data->auto_start = auto_start; data->timeout = timeout; diff --git a/generated/nifpga/nifpga_service.cpp b/generated/nifpga/nifpga_service.cpp index 676e8050f..20ee33725 100644 --- a/generated/nifpga/nifpga_service.cpp +++ b/generated/nifpga/nifpga_service.cpp @@ -457,7 +457,7 @@ ::grpc::Status MonikerReadArrayBool(void* data, google::protobuf::Arena& arena, { MonikerReadArrayBoolData* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = function_data->data.mutable_response(); auto session = function_data->session; auto indicator = function_data->indicator; auto size = function_data->size; @@ -479,6 +479,11 @@ ::grpc::Status MonikerReadArrayBool(void* data, google::protobuf::Arena& arena, convert_to_grpc(array, response->mutable_array()); packedData.PackFrom(function_data->data); } + else + { + // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); + } return ::grpc::Status::OK; } @@ -486,12 +491,12 @@ ::grpc::Status MonikerReadArrayDbl(void* data, google::protobuf::Arena& arena, g { MonikerReadArrayDblData* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = function_data->data.mutable_response(); auto session = function_data->session; auto indicator = function_data->indicator; auto size = function_data->size; - function_data->data.mutable_array()->Resize(size, 0); + response->mutable_array()->Resize(size, 0); auto array = response->mutable_array()->mutable_data(); auto status = library->ReadArrayDbl(session, indicator, array, size); @@ -507,6 +512,11 @@ ::grpc::Status MonikerReadArrayDbl(void* data, google::protobuf::Arena& arena, g response->set_status(status); packedData.PackFrom(function_data->data); } + else + { + // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); + } return ::grpc::Status::OK; } @@ -514,7 +524,7 @@ ::grpc::Status MonikerReadArrayI16(void* data, google::protobuf::Arena& arena, g { MonikerReadArrayI16Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = function_data->data.mutable_response(); auto session = function_data->session; auto indicator = function_data->indicator; auto size = function_data->size; @@ -552,6 +562,11 @@ ::grpc::Status MonikerReadArrayI16(void* data, google::protobuf::Arena& arena, g }); packedData.PackFrom(function_data->data); } + else + { + // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); + } return ::grpc::Status::OK; } @@ -559,12 +574,12 @@ ::grpc::Status MonikerReadArrayI32(void* data, google::protobuf::Arena& arena, g { MonikerReadArrayI32Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = function_data->data.mutable_response(); auto session = function_data->session; auto indicator = function_data->indicator; auto size = function_data->size; - function_data->data.mutable_array()->Resize(size, 0); + response->mutable_array()->Resize(size, 0); auto array = response->mutable_array()->mutable_data(); auto status = library->ReadArrayI32(session, indicator, array, size); @@ -580,6 +595,11 @@ ::grpc::Status MonikerReadArrayI32(void* data, google::protobuf::Arena& arena, g response->set_status(status); packedData.PackFrom(function_data->data); } + else + { + // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); + } return ::grpc::Status::OK; } @@ -587,12 +607,12 @@ ::grpc::Status MonikerReadArrayI64(void* data, google::protobuf::Arena& arena, g { MonikerReadArrayI64Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = function_data->data.mutable_response(); auto session = function_data->session; auto indicator = function_data->indicator; auto size = function_data->size; - function_data->data.mutable_array()->Resize(size, 0); + response->mutable_array()->Resize(size, 0); auto array = response->mutable_array()->mutable_data(); auto status = library->ReadArrayI64(session, indicator, array, size); @@ -608,6 +628,11 @@ ::grpc::Status MonikerReadArrayI64(void* data, google::protobuf::Arena& arena, g response->set_status(status); packedData.PackFrom(function_data->data); } + else + { + // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); + } return ::grpc::Status::OK; } @@ -615,7 +640,7 @@ ::grpc::Status MonikerReadArrayI8(void* data, google::protobuf::Arena& arena, go { MonikerReadArrayI8Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = function_data->data.mutable_response(); auto session = function_data->session; auto indicator = function_data->indicator; auto size = function_data->size; @@ -653,6 +678,11 @@ ::grpc::Status MonikerReadArrayI8(void* data, google::protobuf::Arena& arena, go }); packedData.PackFrom(function_data->data); } + else + { + // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); + } return ::grpc::Status::OK; } @@ -660,12 +690,12 @@ ::grpc::Status MonikerReadArraySgl(void* data, google::protobuf::Arena& arena, g { MonikerReadArraySglData* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = function_data->data.mutable_response(); auto session = function_data->session; auto indicator = function_data->indicator; auto size = function_data->size; - function_data->data.mutable_array()->Resize(size, 0); + response->mutable_array()->Resize(size, 0); auto array = response->mutable_array()->mutable_data(); auto status = library->ReadArraySgl(session, indicator, array, size); @@ -681,6 +711,11 @@ ::grpc::Status MonikerReadArraySgl(void* data, google::protobuf::Arena& arena, g response->set_status(status); packedData.PackFrom(function_data->data); } + else + { + // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); + } return ::grpc::Status::OK; } @@ -688,7 +723,7 @@ ::grpc::Status MonikerReadArrayU16(void* data, google::protobuf::Arena& arena, g { MonikerReadArrayU16Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = function_data->data.mutable_response(); auto session = function_data->session; auto indicator = function_data->indicator; auto size = function_data->size; @@ -726,6 +761,11 @@ ::grpc::Status MonikerReadArrayU16(void* data, google::protobuf::Arena& arena, g }); packedData.PackFrom(function_data->data); } + else + { + // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); + } return ::grpc::Status::OK; } @@ -733,12 +773,12 @@ ::grpc::Status MonikerReadArrayU32(void* data, google::protobuf::Arena& arena, g { MonikerReadArrayU32Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = function_data->data.mutable_response(); auto session = function_data->session; auto indicator = function_data->indicator; auto size = function_data->size; - function_data->data.mutable_array()->Resize(size, 0); + response->mutable_array()->Resize(size, 0); auto array = response->mutable_array()->mutable_data(); auto status = library->ReadArrayU32(session, indicator, array, size); @@ -754,6 +794,11 @@ ::grpc::Status MonikerReadArrayU32(void* data, google::protobuf::Arena& arena, g response->set_status(status); packedData.PackFrom(function_data->data); } + else + { + // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); + } return ::grpc::Status::OK; } @@ -761,12 +806,12 @@ ::grpc::Status MonikerReadArrayU64(void* data, google::protobuf::Arena& arena, g { MonikerReadArrayU64Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = function_data->data.mutable_response(); auto session = function_data->session; auto indicator = function_data->indicator; auto size = function_data->size; - function_data->data.mutable_array()->Resize(size, 0); + response->mutable_array()->Resize(size, 0); auto array = response->mutable_array()->mutable_data(); auto status = library->ReadArrayU64(session, indicator, array, size); @@ -782,6 +827,11 @@ ::grpc::Status MonikerReadArrayU64(void* data, google::protobuf::Arena& arena, g response->set_status(status); packedData.PackFrom(function_data->data); } + else + { + // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); + } return ::grpc::Status::OK; } @@ -789,7 +839,7 @@ ::grpc::Status MonikerReadArrayU8(void* data, google::protobuf::Arena& arena, go { MonikerReadArrayU8Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = function_data->data.mutable_response(); auto session = function_data->session; auto indicator = function_data->indicator; auto size = function_data->size; @@ -827,6 +877,11 @@ ::grpc::Status MonikerReadArrayU8(void* data, google::protobuf::Arena& arena, go }); packedData.PackFrom(function_data->data); } + else + { + // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); + } return ::grpc::Status::OK; } @@ -834,7 +889,7 @@ ::grpc::Status MonikerReadBool(void* data, google::protobuf::Arena& arena, googl { MonikerReadBoolData* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = function_data->data.mutable_response(); auto session = function_data->session; auto indicator = function_data->indicator; @@ -855,6 +910,11 @@ NiFpga_Bool value {}; response->set_value(value); packedData.PackFrom(function_data->data); } + else + { + // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); + } return ::grpc::Status::OK; } @@ -862,7 +922,7 @@ ::grpc::Status MonikerReadDbl(void* data, google::protobuf::Arena& arena, google { MonikerReadDblData* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = function_data->data.mutable_response(); auto session = function_data->session; auto indicator = function_data->indicator; @@ -883,6 +943,11 @@ double value {}; response->set_value(value); packedData.PackFrom(function_data->data); } + else + { + // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); + } return ::grpc::Status::OK; } @@ -890,7 +955,7 @@ ::grpc::Status MonikerReadI16(void* data, google::protobuf::Arena& arena, google { MonikerReadI16Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = function_data->data.mutable_response(); auto session = function_data->session; auto indicator = function_data->indicator; @@ -911,6 +976,11 @@ int16_t value {}; response->set_value(value); packedData.PackFrom(function_data->data); } + else + { + // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); + } return ::grpc::Status::OK; } @@ -918,7 +988,7 @@ ::grpc::Status MonikerReadI32(void* data, google::protobuf::Arena& arena, google { MonikerReadI32Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = function_data->data.mutable_response(); auto session = function_data->session; auto indicator = function_data->indicator; @@ -939,6 +1009,11 @@ int32_t value {}; response->set_value(value); packedData.PackFrom(function_data->data); } + else + { + // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); + } return ::grpc::Status::OK; } @@ -946,7 +1021,7 @@ ::grpc::Status MonikerReadI64(void* data, google::protobuf::Arena& arena, google { MonikerReadI64Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = function_data->data.mutable_response(); auto session = function_data->session; auto indicator = function_data->indicator; @@ -967,6 +1042,11 @@ int64_t value {}; response->set_value(value); packedData.PackFrom(function_data->data); } + else + { + // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); + } return ::grpc::Status::OK; } @@ -974,7 +1054,7 @@ ::grpc::Status MonikerReadI8(void* data, google::protobuf::Arena& arena, google: { MonikerReadI8Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = function_data->data.mutable_response(); auto session = function_data->session; auto indicator = function_data->indicator; @@ -995,6 +1075,11 @@ int8_t value {}; response->set_value(value); packedData.PackFrom(function_data->data); } + else + { + // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); + } return ::grpc::Status::OK; } @@ -1002,7 +1087,7 @@ ::grpc::Status MonikerReadSgl(void* data, google::protobuf::Arena& arena, google { MonikerReadSglData* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = function_data->data.mutable_response(); auto session = function_data->session; auto indicator = function_data->indicator; @@ -1023,6 +1108,11 @@ float value {}; response->set_value(value); packedData.PackFrom(function_data->data); } + else + { + // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); + } return ::grpc::Status::OK; } @@ -1030,7 +1120,7 @@ ::grpc::Status MonikerReadU16(void* data, google::protobuf::Arena& arena, google { MonikerReadU16Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = function_data->data.mutable_response(); auto session = function_data->session; auto indicator = function_data->indicator; @@ -1051,6 +1141,11 @@ uint16_t value {}; response->set_value(value); packedData.PackFrom(function_data->data); } + else + { + // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); + } return ::grpc::Status::OK; } @@ -1058,7 +1153,7 @@ ::grpc::Status MonikerReadU32(void* data, google::protobuf::Arena& arena, google { MonikerReadU32Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = function_data->data.mutable_response(); auto session = function_data->session; auto indicator = function_data->indicator; @@ -1079,6 +1174,11 @@ uint32_t value {}; response->set_value(value); packedData.PackFrom(function_data->data); } + else + { + // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); + } return ::grpc::Status::OK; } @@ -1086,7 +1186,7 @@ ::grpc::Status MonikerReadU64(void* data, google::protobuf::Arena& arena, google { MonikerReadU64Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = function_data->data.mutable_response(); auto session = function_data->session; auto indicator = function_data->indicator; @@ -1107,6 +1207,11 @@ uint64_t value {}; response->set_value(value); packedData.PackFrom(function_data->data); } + else + { + // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); + } return ::grpc::Status::OK; } @@ -1114,7 +1219,7 @@ ::grpc::Status MonikerReadU8(void* data, google::protobuf::Arena& arena, google: { MonikerReadU8Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = function_data->data.mutable_response(); auto session = function_data->session; auto indicator = function_data->indicator; @@ -1135,6 +1240,11 @@ uint8_t value {}; response->set_value(value); packedData.PackFrom(function_data->data); } + else + { + // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); + } return ::grpc::Status::OK; } @@ -1142,7 +1252,7 @@ ::grpc::Status MonikerWriteArrayBool(void* data, google::protobuf::Arena& arena, { MonikerWriteArrayBoolData* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = function_data->data.mutable_response(); auto session = function_data->session; auto control = function_data->control; @@ -1168,7 +1278,7 @@ ::grpc::Status MonikerWriteArrayDbl(void* data, google::protobuf::Arena& arena, { MonikerWriteArrayDblData* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = function_data->data.mutable_response(); auto session = function_data->session; auto control = function_data->control; @@ -1194,7 +1304,7 @@ ::grpc::Status MonikerWriteArrayI16(void* data, google::protobuf::Arena& arena, { MonikerWriteArrayI16Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = function_data->data.mutable_response(); auto session = function_data->session; auto control = function_data->control; @@ -1232,7 +1342,7 @@ ::grpc::Status MonikerWriteArrayI32(void* data, google::protobuf::Arena& arena, { MonikerWriteArrayI32Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = function_data->data.mutable_response(); auto session = function_data->session; auto control = function_data->control; @@ -1258,7 +1368,7 @@ ::grpc::Status MonikerWriteArrayI64(void* data, google::protobuf::Arena& arena, { MonikerWriteArrayI64Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = function_data->data.mutable_response(); auto session = function_data->session; auto control = function_data->control; @@ -1284,7 +1394,7 @@ ::grpc::Status MonikerWriteArrayI8(void* data, google::protobuf::Arena& arena, g { MonikerWriteArrayI8Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = function_data->data.mutable_response(); auto session = function_data->session; auto control = function_data->control; @@ -1322,7 +1432,7 @@ ::grpc::Status MonikerWriteArraySgl(void* data, google::protobuf::Arena& arena, { MonikerWriteArraySglData* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = function_data->data.mutable_response(); auto session = function_data->session; auto control = function_data->control; @@ -1348,7 +1458,7 @@ ::grpc::Status MonikerWriteArrayU16(void* data, google::protobuf::Arena& arena, { MonikerWriteArrayU16Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = function_data->data.mutable_response(); auto session = function_data->session; auto control = function_data->control; @@ -1386,7 +1496,7 @@ ::grpc::Status MonikerWriteArrayU32(void* data, google::protobuf::Arena& arena, { MonikerWriteArrayU32Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = function_data->data.mutable_response(); auto session = function_data->session; auto control = function_data->control; @@ -1412,7 +1522,7 @@ ::grpc::Status MonikerWriteArrayU64(void* data, google::protobuf::Arena& arena, { MonikerWriteArrayU64Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = function_data->data.mutable_response(); auto session = function_data->session; auto control = function_data->control; @@ -1438,7 +1548,7 @@ ::grpc::Status MonikerWriteArrayU8(void* data, google::protobuf::Arena& arena, g { MonikerWriteArrayU8Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = function_data->data.mutable_response(); auto session = function_data->session; auto control = function_data->control; @@ -1476,7 +1586,7 @@ ::grpc::Status MonikerWriteBool(void* data, google::protobuf::Arena& arena, goog { MonikerWriteBoolData* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = function_data->data.mutable_response(); auto session = function_data->session; auto control = function_data->control; @@ -1499,7 +1609,7 @@ ::grpc::Status MonikerWriteDbl(void* data, google::protobuf::Arena& arena, googl { MonikerWriteDblData* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = function_data->data.mutable_response(); auto session = function_data->session; auto control = function_data->control; @@ -1522,7 +1632,7 @@ ::grpc::Status MonikerWriteI16(void* data, google::protobuf::Arena& arena, googl { MonikerWriteI16Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = function_data->data.mutable_response(); auto session = function_data->session; auto control = function_data->control; @@ -1549,7 +1659,7 @@ ::grpc::Status MonikerWriteI32(void* data, google::protobuf::Arena& arena, googl { MonikerWriteI32Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = function_data->data.mutable_response(); auto session = function_data->session; auto control = function_data->control; @@ -1572,7 +1682,7 @@ ::grpc::Status MonikerWriteI64(void* data, google::protobuf::Arena& arena, googl { MonikerWriteI64Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = function_data->data.mutable_response(); auto session = function_data->session; auto control = function_data->control; @@ -1595,7 +1705,7 @@ ::grpc::Status MonikerWriteI8(void* data, google::protobuf::Arena& arena, google { MonikerWriteI8Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = function_data->data.mutable_response(); auto session = function_data->session; auto control = function_data->control; @@ -1622,7 +1732,7 @@ ::grpc::Status MonikerWriteSgl(void* data, google::protobuf::Arena& arena, googl { MonikerWriteSglData* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = function_data->data.mutable_response(); auto session = function_data->session; auto control = function_data->control; @@ -1645,7 +1755,7 @@ ::grpc::Status MonikerWriteU16(void* data, google::protobuf::Arena& arena, googl { MonikerWriteU16Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = function_data->data.mutable_response(); auto session = function_data->session; auto control = function_data->control; @@ -1672,7 +1782,7 @@ ::grpc::Status MonikerWriteU32(void* data, google::protobuf::Arena& arena, googl { MonikerWriteU32Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = function_data->data.mutable_response(); auto session = function_data->session; auto control = function_data->control; @@ -1695,7 +1805,7 @@ ::grpc::Status MonikerWriteU64(void* data, google::protobuf::Arena& arena, googl { MonikerWriteU64Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = function_data->data.mutable_response(); auto session = function_data->session; auto control = function_data->control; @@ -1718,7 +1828,7 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google { MonikerWriteU8Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = function_data->data.mutable_response(); auto session = function_data->session; auto control = function_data->control; @@ -2287,11 +2397,11 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google size_t size = request->size(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->indicator = indicator; data->size = size; data->library = std::shared_ptr(library_); - + data->data.mutable_response()->mutable_array()->Reserve(request->size()); data->data.mutable_response()->mutable_array()->Resize(request->size(), 0); auto moniker = std::make_unique(); @@ -2345,11 +2455,11 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google size_t size = request->size(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->indicator = indicator; data->size = size; data->library = std::shared_ptr(library_); - + data->data.mutable_response()->mutable_array()->Reserve(request->size()); data->data.mutable_response()->mutable_array()->Resize(request->size(), 0); auto moniker = std::make_unique(); @@ -2411,11 +2521,11 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google size_t size = request->size(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->indicator = indicator; data->size = size; data->library = std::shared_ptr(library_); - + data->data.mutable_response()->mutable_array()->Reserve(request->size()); data->data.mutable_response()->mutable_array()->Resize(request->size(), 0); auto moniker = std::make_unique(); @@ -2469,11 +2579,11 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google size_t size = request->size(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->indicator = indicator; data->size = size; data->library = std::shared_ptr(library_); - + data->data.mutable_response()->mutable_array()->Reserve(request->size()); data->data.mutable_response()->mutable_array()->Resize(request->size(), 0); auto moniker = std::make_unique(); @@ -2527,11 +2637,11 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google size_t size = request->size(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->indicator = indicator; data->size = size; data->library = std::shared_ptr(library_); - + data->data.mutable_response()->mutable_array()->Reserve(request->size()); data->data.mutable_response()->mutable_array()->Resize(request->size(), 0); auto moniker = std::make_unique(); @@ -2593,11 +2703,11 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google size_t size = request->size(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->indicator = indicator; data->size = size; data->library = std::shared_ptr(library_); - + data->data.mutable_response()->mutable_array()->Reserve(request->size()); data->data.mutable_response()->mutable_array()->Resize(request->size(), 0); auto moniker = std::make_unique(); @@ -2651,11 +2761,11 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google size_t size = request->size(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->indicator = indicator; data->size = size; data->library = std::shared_ptr(library_); - + data->data.mutable_response()->mutable_array()->Reserve(request->size()); data->data.mutable_response()->mutable_array()->Resize(request->size(), 0); auto moniker = std::make_unique(); @@ -2717,11 +2827,11 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google size_t size = request->size(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->indicator = indicator; data->size = size; data->library = std::shared_ptr(library_); - + data->data.mutable_response()->mutable_array()->Reserve(request->size()); data->data.mutable_response()->mutable_array()->Resize(request->size(), 0); auto moniker = std::make_unique(); @@ -2775,11 +2885,11 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google size_t size = request->size(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->indicator = indicator; data->size = size; data->library = std::shared_ptr(library_); - + data->data.mutable_response()->mutable_array()->Reserve(request->size()); data->data.mutable_response()->mutable_array()->Resize(request->size(), 0); auto moniker = std::make_unique(); @@ -2833,11 +2943,11 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google size_t size = request->size(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->indicator = indicator; data->size = size; data->library = std::shared_ptr(library_); - + data->data.mutable_response()->mutable_array()->Reserve(request->size()); data->data.mutable_response()->mutable_array()->Resize(request->size(), 0); auto moniker = std::make_unique(); @@ -2899,11 +3009,11 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google size_t size = request->size(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->indicator = indicator; data->size = size; data->library = std::shared_ptr(library_); - + data->data.mutable_response()->mutable_array()->Reserve(request->size()); data->data.mutable_response()->mutable_array()->Resize(request->size(), 0); auto moniker = std::make_unique(); @@ -2955,10 +3065,10 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google uint32_t indicator = request->indicator(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->indicator = indicator; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadBool", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -3008,10 +3118,10 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google uint32_t indicator = request->indicator(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->indicator = indicator; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadDbl", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -3412,10 +3522,10 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google uint32_t indicator = request->indicator(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->indicator = indicator; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadI16", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -3465,10 +3575,10 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google uint32_t indicator = request->indicator(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->indicator = indicator; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadI32", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -3518,10 +3628,10 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google uint32_t indicator = request->indicator(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->indicator = indicator; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadI64", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -3571,10 +3681,10 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google uint32_t indicator = request->indicator(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->indicator = indicator; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadI8", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -3624,10 +3734,10 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google uint32_t indicator = request->indicator(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->indicator = indicator; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadSgl", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -3677,10 +3787,10 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google uint32_t indicator = request->indicator(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->indicator = indicator; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadU16", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -3730,10 +3840,10 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google uint32_t indicator = request->indicator(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->indicator = indicator; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadU32", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -3783,10 +3893,10 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google uint32_t indicator = request->indicator(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->indicator = indicator; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadU64", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -3836,10 +3946,10 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google uint32_t indicator = request->indicator(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->indicator = indicator; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadU8", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -4231,10 +4341,10 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google uint32_t control = request->control(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->control = control; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayBool", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -4284,10 +4394,10 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google uint32_t control = request->control(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->control = control; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayDbl", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -4354,10 +4464,10 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google uint32_t control = request->control(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->control = control; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayI16", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -4407,10 +4517,10 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google uint32_t control = request->control(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->control = control; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayI32", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -4460,10 +4570,10 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google uint32_t control = request->control(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->control = control; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayI64", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -4530,10 +4640,10 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google uint32_t control = request->control(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->control = control; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayI8", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -4583,10 +4693,10 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google uint32_t control = request->control(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->control = control; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArraySgl", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -4653,10 +4763,10 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google uint32_t control = request->control(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->control = control; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayU16", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -4706,10 +4816,10 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google uint32_t control = request->control(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->control = control; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayU32", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -4759,10 +4869,10 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google uint32_t control = request->control(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->control = control; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayU64", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -4829,10 +4939,10 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google uint32_t control = request->control(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->control = control; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayU8", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -4881,10 +4991,10 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google uint32_t control = request->control(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->control = control; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteBool", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -4933,10 +5043,10 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google uint32_t control = request->control(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->control = control; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteDbl", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -5370,10 +5480,10 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google uint32_t control = request->control(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->control = control; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteI16", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -5422,10 +5532,10 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google uint32_t control = request->control(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->control = control; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteI32", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -5474,10 +5584,10 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google uint32_t control = request->control(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->control = control; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteI64", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -5535,10 +5645,10 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google uint32_t control = request->control(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->control = control; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteI8", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -5587,10 +5697,10 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google uint32_t control = request->control(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->control = control; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteSgl", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -5648,10 +5758,10 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google uint32_t control = request->control(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->control = control; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteU16", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -5700,10 +5810,10 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google uint32_t control = request->control(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->control = control; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteU32", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -5752,10 +5862,10 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google uint32_t control = request->control(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->control = control; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteU64", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -5813,10 +5923,10 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google uint32_t control = request->control(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->control = control; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteU8", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); diff --git a/source/codegen/templates/service_helpers.mako b/source/codegen/templates/service_helpers.mako index 60b5b39a8..ee61a7d12 100644 --- a/source/codegen/templates/service_helpers.mako +++ b/source/codegen/templates/service_helpers.mako @@ -296,6 +296,7 @@ ${populate_response(function_data=function_data, parameters=parameters)}\ ${parameter['type']}* ${parameter_name}; % else: ${parameter['type']} ${parameter_name}; +% endif % endfor ${service_class_prefix.lower()}_grpc::${request_response_data_type} data; std::shared_ptr<${service_class_prefix}LibraryInterface> library; @@ -345,6 +346,11 @@ ${set_response_values(output_parameters=output_parameters, init_method=false)}\ \ packedData.PackFrom(function_data->data); } + else + { + // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); + } % endif return ::grpc::Status::OK; } @@ -390,13 +396,13 @@ ${streaming_handle_out_direction_scaler(c_api_name, arg_string, streaming_param, is_coerced = service_helpers.is_output_array_that_needs_coercion(streaming_param) size_param_name = service_helpers.get_size_param_name(streaming_param) streaming_param_field_name = common_helpers.get_grpc_field_name(streaming_param) - streaming_param_name = common_helpers.camel_to_snake(streaming_param['name']) // TODO: duplicate after merge? + streaming_param_name = common_helpers.camel_to_snake(streaming_param['name']) # TODO: duplicate after merge? underlying_param_type = common_helpers.get_underlying_type_name(streaming_param["type"]) %>\ % if common_helpers.supports_standard_copy_conversion_routines(streaming_param): std::vector<${data_type}> ${streaming_param_field_name}(${size_param_name}, ${data_type}()); % elif is_coerced: - std::vector<${data_type}> ${streaming_param_field_name}(${size}); + std::vector<${data_type}> ${streaming_param_field_name}(${size_param_name}); % elif common_helpers.is_driver_typedef_with_same_size_but_different_qualifiers(underlying_param_type): response->mutable_${streaming_param_field_name}()->Resize(${size_param_name}, 0); auto ${streaming_param_field_name} = reinterpret_cast<${underlying_param_type}*>(response->mutable_${streaming_param_field_name}()->mutable_data()); From 4324a98027c02cf63a2ba7a62c714cb5d2a41869 Mon Sep 17 00:00:00 2001 From: Rohan Doshi Date: Sat, 23 Nov 2024 18:20:46 +0530 Subject: [PATCH 05/25] update proto and struct to contain request and response messages --- generated/nidaqmx/nidaqmx.proto | 177 ++-------- generated/nidaqmx/nidaqmx_service.cpp | 59 ++-- generated/nifpga/nifpga.proto | 330 ++++-------------- generated/nifpga/nifpga_service.cpp | 110 +++--- source/codegen/common_helpers.py | 36 +- source/codegen/proto_helpers.py | 12 - source/codegen/templates/proto_helpers.mako | 16 +- source/codegen/templates/service.cpp.mako | 7 +- source/codegen/templates/service_helpers.mako | 12 +- 9 files changed, 248 insertions(+), 511 deletions(-) diff --git a/generated/nidaqmx/nidaqmx.proto b/generated/nidaqmx/nidaqmx.proto index 86b46cead..53f244e73 100644 --- a/generated/nidaqmx/nidaqmx.proto +++ b/generated/nidaqmx/nidaqmx.proto @@ -8518,11 +8518,7 @@ message BeginReadAnalogF64Response { ni.data_monikers.Moniker moniker = 2; } -message ReadAnalogF64StreamingData { - ReadAnalogF64StreamingDataResponse response = 2; -} - -message ReadAnalogF64StreamingDataResponse { +message ReadAnalogF64StreamingResponse { int32 status = 1; repeated double read_array = 2; int32 samps_per_chan_read = 3; @@ -8548,11 +8544,7 @@ message BeginReadAnalogScalarF64Response { ni.data_monikers.Moniker moniker = 2; } -message ReadAnalogScalarF64StreamingData { - ReadAnalogScalarF64StreamingDataResponse response = 2; -} - -message ReadAnalogScalarF64StreamingDataResponse { +message ReadAnalogScalarF64StreamingResponse { int32 status = 1; double value = 2; } @@ -8590,11 +8582,7 @@ message BeginReadBinaryI16Response { ni.data_monikers.Moniker moniker = 2; } -message ReadBinaryI16StreamingData { - ReadBinaryI16StreamingDataResponse response = 2; -} - -message ReadBinaryI16StreamingDataResponse { +message ReadBinaryI16StreamingResponse { int32 status = 1; repeated int32 read_array = 2; int32 samps_per_chan_read = 3; @@ -8633,11 +8621,7 @@ message BeginReadBinaryI32Response { ni.data_monikers.Moniker moniker = 2; } -message ReadBinaryI32StreamingData { - ReadBinaryI32StreamingDataResponse response = 2; -} - -message ReadBinaryI32StreamingDataResponse { +message ReadBinaryI32StreamingResponse { int32 status = 1; repeated int32 read_array = 2; int32 samps_per_chan_read = 3; @@ -8676,11 +8660,7 @@ message BeginReadBinaryU16Response { ni.data_monikers.Moniker moniker = 2; } -message ReadBinaryU16StreamingData { - ReadBinaryU16StreamingDataResponse response = 2; -} - -message ReadBinaryU16StreamingDataResponse { +message ReadBinaryU16StreamingResponse { int32 status = 1; repeated uint32 read_array = 2; int32 samps_per_chan_read = 3; @@ -8719,11 +8699,7 @@ message BeginReadBinaryU32Response { ni.data_monikers.Moniker moniker = 2; } -message ReadBinaryU32StreamingData { - ReadBinaryU32StreamingDataResponse response = 2; -} - -message ReadBinaryU32StreamingDataResponse { +message ReadBinaryU32StreamingResponse { int32 status = 1; repeated uint32 read_array = 2; int32 samps_per_chan_read = 3; @@ -8754,11 +8730,7 @@ message BeginReadCounterF64Response { ni.data_monikers.Moniker moniker = 2; } -message ReadCounterF64StreamingData { - ReadCounterF64StreamingDataResponse response = 2; -} - -message ReadCounterF64StreamingDataResponse { +message ReadCounterF64StreamingResponse { int32 status = 1; repeated double read_array = 2; int32 samps_per_chan_read = 3; @@ -8797,11 +8769,7 @@ message BeginReadCounterF64ExResponse { ni.data_monikers.Moniker moniker = 2; } -message ReadCounterF64ExStreamingData { - ReadCounterF64ExStreamingDataResponse response = 2; -} - -message ReadCounterF64ExStreamingDataResponse { +message ReadCounterF64ExStreamingResponse { int32 status = 1; repeated double read_array = 2; int32 samps_per_chan_read = 3; @@ -8827,11 +8795,7 @@ message BeginReadCounterScalarF64Response { ni.data_monikers.Moniker moniker = 2; } -message ReadCounterScalarF64StreamingData { - ReadCounterScalarF64StreamingDataResponse response = 2; -} - -message ReadCounterScalarF64StreamingDataResponse { +message ReadCounterScalarF64StreamingResponse { int32 status = 1; double value = 2; } @@ -8856,11 +8820,7 @@ message BeginReadCounterScalarU32Response { ni.data_monikers.Moniker moniker = 2; } -message ReadCounterScalarU32StreamingData { - ReadCounterScalarU32StreamingDataResponse response = 2; -} - -message ReadCounterScalarU32StreamingDataResponse { +message ReadCounterScalarU32StreamingResponse { int32 status = 1; uint32 value = 2; } @@ -8890,11 +8850,7 @@ message BeginReadCounterU32Response { ni.data_monikers.Moniker moniker = 2; } -message ReadCounterU32StreamingData { - ReadCounterU32StreamingDataResponse response = 2; -} - -message ReadCounterU32StreamingDataResponse { +message ReadCounterU32StreamingResponse { int32 status = 1; repeated uint32 read_array = 2; int32 samps_per_chan_read = 3; @@ -8933,11 +8889,7 @@ message BeginReadCounterU32ExResponse { ni.data_monikers.Moniker moniker = 2; } -message ReadCounterU32ExStreamingData { - ReadCounterU32ExStreamingDataResponse response = 2; -} - -message ReadCounterU32ExStreamingDataResponse { +message ReadCounterU32ExStreamingResponse { int32 status = 1; repeated uint32 read_array = 2; int32 samps_per_chan_read = 3; @@ -9068,11 +9020,7 @@ message BeginReadDigitalScalarU32Response { ni.data_monikers.Moniker moniker = 2; } -message ReadDigitalScalarU32StreamingData { - ReadDigitalScalarU32StreamingDataResponse response = 2; -} - -message ReadDigitalScalarU32StreamingDataResponse { +message ReadDigitalScalarU32StreamingResponse { int32 status = 1; uint32 value = 2; } @@ -9110,11 +9058,7 @@ message BeginReadDigitalU16Response { ni.data_monikers.Moniker moniker = 2; } -message ReadDigitalU16StreamingData { - ReadDigitalU16StreamingDataResponse response = 2; -} - -message ReadDigitalU16StreamingDataResponse { +message ReadDigitalU16StreamingResponse { int32 status = 1; repeated uint32 read_array = 2; int32 samps_per_chan_read = 3; @@ -9153,11 +9097,7 @@ message BeginReadDigitalU32Response { ni.data_monikers.Moniker moniker = 2; } -message ReadDigitalU32StreamingData { - ReadDigitalU32StreamingDataResponse response = 2; -} - -message ReadDigitalU32StreamingDataResponse { +message ReadDigitalU32StreamingResponse { int32 status = 1; repeated uint32 read_array = 2; int32 samps_per_chan_read = 3; @@ -10551,11 +10491,7 @@ message BeginWaitForNextSampleClockResponse { ni.data_monikers.Moniker moniker = 2; } -message WaitForNextSampleClockStreamingData { - WaitForNextSampleClockStreamingDataResponse response = 2; -} - -message WaitForNextSampleClockStreamingDataResponse { +message WaitForNextSampleClockStreamingResponse { int32 status = 1; bool is_late = 2; } @@ -10616,16 +10552,11 @@ message BeginWriteAnalogF64Response { ni.data_monikers.Moniker moniker = 2; } -message WriteAnalogF64StreamingData { - WriteAnalogF64StreamingDataRequest request = 1; - WriteAnalogF64StreamingDataResponse response = 2; -} - -message WriteAnalogF64StreamingDataRequest { +message WriteAnalogF64StreamingRequest { repeated double write_array = 1; } -message WriteAnalogF64StreamingDataResponse { +message WriteAnalogF64StreamingResponse { int32 status = 1; int32 samps_per_chan_written = 2; } @@ -10652,16 +10583,11 @@ message BeginWriteAnalogScalarF64Response { ni.data_monikers.Moniker moniker = 2; } -message WriteAnalogScalarF64StreamingData { - WriteAnalogScalarF64StreamingDataRequest request = 1; - WriteAnalogScalarF64StreamingDataResponse response = 2; -} - -message WriteAnalogScalarF64StreamingDataRequest { +message WriteAnalogScalarF64StreamingRequest { double value = 1; } -message WriteAnalogScalarF64StreamingDataResponse { +message WriteAnalogScalarF64StreamingResponse { int32 status = 1; } @@ -10698,16 +10624,11 @@ message BeginWriteBinaryI16Response { ni.data_monikers.Moniker moniker = 2; } -message WriteBinaryI16StreamingData { - WriteBinaryI16StreamingDataRequest request = 1; - WriteBinaryI16StreamingDataResponse response = 2; -} - -message WriteBinaryI16StreamingDataRequest { +message WriteBinaryI16StreamingRequest { repeated int32 write_array = 1; } -message WriteBinaryI16StreamingDataResponse { +message WriteBinaryI16StreamingResponse { int32 status = 1; int32 samps_per_chan_written = 2; } @@ -10745,16 +10666,11 @@ message BeginWriteBinaryI32Response { ni.data_monikers.Moniker moniker = 2; } -message WriteBinaryI32StreamingData { - WriteBinaryI32StreamingDataRequest request = 1; - WriteBinaryI32StreamingDataResponse response = 2; -} - -message WriteBinaryI32StreamingDataRequest { +message WriteBinaryI32StreamingRequest { repeated int32 write_array = 1; } -message WriteBinaryI32StreamingDataResponse { +message WriteBinaryI32StreamingResponse { int32 status = 1; int32 samps_per_chan_written = 2; } @@ -10792,16 +10708,11 @@ message BeginWriteBinaryU16Response { ni.data_monikers.Moniker moniker = 2; } -message WriteBinaryU16StreamingData { - WriteBinaryU16StreamingDataRequest request = 1; - WriteBinaryU16StreamingDataResponse response = 2; -} - -message WriteBinaryU16StreamingDataRequest { +message WriteBinaryU16StreamingRequest { repeated uint32 write_array = 1; } -message WriteBinaryU16StreamingDataResponse { +message WriteBinaryU16StreamingResponse { int32 status = 1; int32 samps_per_chan_written = 2; } @@ -10839,16 +10750,11 @@ message BeginWriteBinaryU32Response { ni.data_monikers.Moniker moniker = 2; } -message WriteBinaryU32StreamingData { - WriteBinaryU32StreamingDataRequest request = 1; - WriteBinaryU32StreamingDataResponse response = 2; -} - -message WriteBinaryU32StreamingDataRequest { +message WriteBinaryU32StreamingRequest { repeated uint32 write_array = 1; } -message WriteBinaryU32StreamingDataResponse { +message WriteBinaryU32StreamingResponse { int32 status = 1; int32 samps_per_chan_written = 2; } @@ -10982,16 +10888,11 @@ message BeginWriteDigitalScalarU32Response { ni.data_monikers.Moniker moniker = 2; } -message WriteDigitalScalarU32StreamingData { - WriteDigitalScalarU32StreamingDataRequest request = 1; - WriteDigitalScalarU32StreamingDataResponse response = 2; -} - -message WriteDigitalScalarU32StreamingDataRequest { +message WriteDigitalScalarU32StreamingRequest { uint32 value = 1; } -message WriteDigitalScalarU32StreamingDataResponse { +message WriteDigitalScalarU32StreamingResponse { int32 status = 1; } @@ -11028,16 +10929,11 @@ message BeginWriteDigitalU16Response { ni.data_monikers.Moniker moniker = 2; } -message WriteDigitalU16StreamingData { - WriteDigitalU16StreamingDataRequest request = 1; - WriteDigitalU16StreamingDataResponse response = 2; -} - -message WriteDigitalU16StreamingDataRequest { +message WriteDigitalU16StreamingRequest { repeated uint32 write_array = 1; } -message WriteDigitalU16StreamingDataResponse { +message WriteDigitalU16StreamingResponse { int32 status = 1; int32 samps_per_chan_written = 2; } @@ -11075,16 +10971,11 @@ message BeginWriteDigitalU32Response { ni.data_monikers.Moniker moniker = 2; } -message WriteDigitalU32StreamingData { - WriteDigitalU32StreamingDataRequest request = 1; - WriteDigitalU32StreamingDataResponse response = 2; -} - -message WriteDigitalU32StreamingDataRequest { +message WriteDigitalU32StreamingRequest { repeated uint32 write_array = 1; } -message WriteDigitalU32StreamingDataResponse { +message WriteDigitalU32StreamingResponse { int32 status = 1; int32 samps_per_chan_written = 2; } diff --git a/generated/nidaqmx/nidaqmx_service.cpp b/generated/nidaqmx/nidaqmx_service.cpp index 6e22e5ac3..3d8532ec9 100644 --- a/generated/nidaqmx/nidaqmx_service.cpp +++ b/generated/nidaqmx/nidaqmx_service.cpp @@ -33,7 +33,7 @@ namespace nidaqmx_grpc { int32 fill_mode; uInt32 array_size_in_samps; bool32* reserved; - nidaqmx_grpc::ReadAnalogF64StreamingData data; + nidaqmx_grpc::ReadAnalogF64StreamingResponse response; std::shared_ptr library; }; @@ -42,7 +42,7 @@ namespace nidaqmx_grpc { TaskHandle task; float64 timeout; bool32* reserved; - nidaqmx_grpc::ReadAnalogScalarF64StreamingData data; + nidaqmx_grpc::ReadAnalogScalarF64StreamingResponse response; std::shared_ptr library; }; @@ -54,7 +54,7 @@ namespace nidaqmx_grpc { int32 fill_mode; uInt32 array_size_in_samps; bool32* reserved; - nidaqmx_grpc::ReadBinaryI16StreamingData data; + nidaqmx_grpc::ReadBinaryI16StreamingResponse response; std::shared_ptr library; }; @@ -66,7 +66,7 @@ namespace nidaqmx_grpc { int32 fill_mode; uInt32 array_size_in_samps; bool32* reserved; - nidaqmx_grpc::ReadBinaryI32StreamingData data; + nidaqmx_grpc::ReadBinaryI32StreamingResponse response; std::shared_ptr library; }; @@ -78,7 +78,7 @@ namespace nidaqmx_grpc { int32 fill_mode; uInt32 array_size_in_samps; bool32* reserved; - nidaqmx_grpc::ReadBinaryU16StreamingData data; + nidaqmx_grpc::ReadBinaryU16StreamingResponse response; std::shared_ptr library; }; @@ -90,7 +90,7 @@ namespace nidaqmx_grpc { int32 fill_mode; uInt32 array_size_in_samps; bool32* reserved; - nidaqmx_grpc::ReadBinaryU32StreamingData data; + nidaqmx_grpc::ReadBinaryU32StreamingResponse response; std::shared_ptr library; }; @@ -101,7 +101,7 @@ namespace nidaqmx_grpc { float64 timeout; uInt32 array_size_in_samps; bool32* reserved; - nidaqmx_grpc::ReadCounterF64StreamingData data; + nidaqmx_grpc::ReadCounterF64StreamingResponse response; std::shared_ptr library; }; @@ -113,7 +113,7 @@ namespace nidaqmx_grpc { int32 fill_mode; uInt32 array_size_in_samps; bool32* reserved; - nidaqmx_grpc::ReadCounterF64ExStreamingData data; + nidaqmx_grpc::ReadCounterF64ExStreamingResponse response; std::shared_ptr library; }; @@ -122,7 +122,7 @@ namespace nidaqmx_grpc { TaskHandle task; float64 timeout; bool32* reserved; - nidaqmx_grpc::ReadCounterScalarF64StreamingData data; + nidaqmx_grpc::ReadCounterScalarF64StreamingResponse response; std::shared_ptr library; }; @@ -131,7 +131,7 @@ namespace nidaqmx_grpc { TaskHandle task; float64 timeout; bool32* reserved; - nidaqmx_grpc::ReadCounterScalarU32StreamingData data; + nidaqmx_grpc::ReadCounterScalarU32StreamingResponse response; std::shared_ptr library; }; @@ -142,7 +142,7 @@ namespace nidaqmx_grpc { float64 timeout; uInt32 array_size_in_samps; bool32* reserved; - nidaqmx_grpc::ReadCounterU32StreamingData data; + nidaqmx_grpc::ReadCounterU32StreamingResponse response; std::shared_ptr library; }; @@ -154,7 +154,7 @@ namespace nidaqmx_grpc { int32 fill_mode; uInt32 array_size_in_samps; bool32* reserved; - nidaqmx_grpc::ReadCounterU32ExStreamingData data; + nidaqmx_grpc::ReadCounterU32ExStreamingResponse response; std::shared_ptr library; }; @@ -163,7 +163,7 @@ namespace nidaqmx_grpc { TaskHandle task; float64 timeout; bool32* reserved; - nidaqmx_grpc::ReadDigitalScalarU32StreamingData data; + nidaqmx_grpc::ReadDigitalScalarU32StreamingResponse response; std::shared_ptr library; }; @@ -175,7 +175,7 @@ namespace nidaqmx_grpc { int32 fill_mode; uInt32 array_size_in_samps; bool32* reserved; - nidaqmx_grpc::ReadDigitalU16StreamingData data; + nidaqmx_grpc::ReadDigitalU16StreamingResponse response; std::shared_ptr library; }; @@ -187,7 +187,7 @@ namespace nidaqmx_grpc { int32 fill_mode; uInt32 array_size_in_samps; bool32* reserved; - nidaqmx_grpc::ReadDigitalU32StreamingData data; + nidaqmx_grpc::ReadDigitalU32StreamingResponse response; std::shared_ptr library; }; @@ -195,7 +195,7 @@ namespace nidaqmx_grpc { { TaskHandle task; float64 timeout; - nidaqmx_grpc::WaitForNextSampleClockStreamingData data; + nidaqmx_grpc::WaitForNextSampleClockStreamingResponse response; std::shared_ptr library; }; @@ -207,7 +207,8 @@ namespace nidaqmx_grpc { float64 timeout; int32 data_layout; bool32* reserved; - nidaqmx_grpc::WriteAnalogF64StreamingData data; + nidaqmx_grpc::WriteAnalogF64StreamingRequest request; + nidaqmx_grpc::WriteAnalogF64StreamingResponse response; std::shared_ptr library; }; @@ -217,7 +218,8 @@ namespace nidaqmx_grpc { bool32 auto_start; float64 timeout; bool32* reserved; - nidaqmx_grpc::WriteAnalogScalarF64StreamingData data; + nidaqmx_grpc::WriteAnalogScalarF64StreamingRequest request; + nidaqmx_grpc::WriteAnalogScalarF64StreamingResponse response; std::shared_ptr library; }; @@ -229,7 +231,8 @@ namespace nidaqmx_grpc { float64 timeout; int32 data_layout; bool32* reserved; - nidaqmx_grpc::WriteBinaryI16StreamingData data; + nidaqmx_grpc::WriteBinaryI16StreamingRequest request; + nidaqmx_grpc::WriteBinaryI16StreamingResponse response; std::shared_ptr library; }; @@ -241,7 +244,8 @@ namespace nidaqmx_grpc { float64 timeout; int32 data_layout; bool32* reserved; - nidaqmx_grpc::WriteBinaryI32StreamingData data; + nidaqmx_grpc::WriteBinaryI32StreamingRequest request; + nidaqmx_grpc::WriteBinaryI32StreamingResponse response; std::shared_ptr library; }; @@ -253,7 +257,8 @@ namespace nidaqmx_grpc { float64 timeout; int32 data_layout; bool32* reserved; - nidaqmx_grpc::WriteBinaryU16StreamingData data; + nidaqmx_grpc::WriteBinaryU16StreamingRequest request; + nidaqmx_grpc::WriteBinaryU16StreamingResponse response; std::shared_ptr library; }; @@ -265,7 +270,8 @@ namespace nidaqmx_grpc { float64 timeout; int32 data_layout; bool32* reserved; - nidaqmx_grpc::WriteBinaryU32StreamingData data; + nidaqmx_grpc::WriteBinaryU32StreamingRequest request; + nidaqmx_grpc::WriteBinaryU32StreamingResponse response; std::shared_ptr library; }; @@ -275,7 +281,8 @@ namespace nidaqmx_grpc { bool32 auto_start; float64 timeout; bool32* reserved; - nidaqmx_grpc::WriteDigitalScalarU32StreamingData data; + nidaqmx_grpc::WriteDigitalScalarU32StreamingRequest request; + nidaqmx_grpc::WriteDigitalScalarU32StreamingResponse response; std::shared_ptr library; }; @@ -287,7 +294,8 @@ namespace nidaqmx_grpc { float64 timeout; int32 data_layout; bool32* reserved; - nidaqmx_grpc::WriteDigitalU16StreamingData data; + nidaqmx_grpc::WriteDigitalU16StreamingRequest request; + nidaqmx_grpc::WriteDigitalU16StreamingResponse response; std::shared_ptr library; }; @@ -299,7 +307,8 @@ namespace nidaqmx_grpc { float64 timeout; int32 data_layout; bool32* reserved; - nidaqmx_grpc::WriteDigitalU32StreamingData data; + nidaqmx_grpc::WriteDigitalU32StreamingRequest request; + nidaqmx_grpc::WriteDigitalU32StreamingResponse response; std::shared_ptr library; }; diff --git a/generated/nifpga/nifpga.proto b/generated/nifpga/nifpga.proto index 74083d1bb..70c1f74ad 100644 --- a/generated/nifpga/nifpga.proto +++ b/generated/nifpga/nifpga.proto @@ -502,11 +502,7 @@ message BeginReadArrayBoolResponse { ni.data_monikers.Moniker moniker = 2; } -message ReadArrayBoolStreamingData { - ReadArrayBoolStreamingDataResponse response = 2; -} - -message ReadArrayBoolStreamingDataResponse { +message ReadArrayBoolStreamingResponse { int32 status = 1; repeated bool array = 2; } @@ -533,11 +529,7 @@ message BeginReadArrayDblResponse { ni.data_monikers.Moniker moniker = 2; } -message ReadArrayDblStreamingData { - ReadArrayDblStreamingDataResponse response = 2; -} - -message ReadArrayDblStreamingDataResponse { +message ReadArrayDblStreamingResponse { int32 status = 1; repeated double array = 2; } @@ -564,11 +556,7 @@ message BeginReadArrayI16Response { ni.data_monikers.Moniker moniker = 2; } -message ReadArrayI16StreamingData { - ReadArrayI16StreamingDataResponse response = 2; -} - -message ReadArrayI16StreamingDataResponse { +message ReadArrayI16StreamingResponse { int32 status = 1; repeated int32 array = 2; } @@ -595,11 +583,7 @@ message BeginReadArrayI32Response { ni.data_monikers.Moniker moniker = 2; } -message ReadArrayI32StreamingData { - ReadArrayI32StreamingDataResponse response = 2; -} - -message ReadArrayI32StreamingDataResponse { +message ReadArrayI32StreamingResponse { int32 status = 1; repeated int32 array = 2; } @@ -626,11 +610,7 @@ message BeginReadArrayI64Response { ni.data_monikers.Moniker moniker = 2; } -message ReadArrayI64StreamingData { - ReadArrayI64StreamingDataResponse response = 2; -} - -message ReadArrayI64StreamingDataResponse { +message ReadArrayI64StreamingResponse { int32 status = 1; repeated int64 array = 2; } @@ -657,11 +637,7 @@ message BeginReadArrayI8Response { ni.data_monikers.Moniker moniker = 2; } -message ReadArrayI8StreamingData { - ReadArrayI8StreamingDataResponse response = 2; -} - -message ReadArrayI8StreamingDataResponse { +message ReadArrayI8StreamingResponse { int32 status = 1; repeated int32 array = 2; } @@ -688,11 +664,7 @@ message BeginReadArraySglResponse { ni.data_monikers.Moniker moniker = 2; } -message ReadArraySglStreamingData { - ReadArraySglStreamingDataResponse response = 2; -} - -message ReadArraySglStreamingDataResponse { +message ReadArraySglStreamingResponse { int32 status = 1; repeated float array = 2; } @@ -719,11 +691,7 @@ message BeginReadArrayU16Response { ni.data_monikers.Moniker moniker = 2; } -message ReadArrayU16StreamingData { - ReadArrayU16StreamingDataResponse response = 2; -} - -message ReadArrayU16StreamingDataResponse { +message ReadArrayU16StreamingResponse { int32 status = 1; repeated uint32 array = 2; } @@ -750,11 +718,7 @@ message BeginReadArrayU32Response { ni.data_monikers.Moniker moniker = 2; } -message ReadArrayU32StreamingData { - ReadArrayU32StreamingDataResponse response = 2; -} - -message ReadArrayU32StreamingDataResponse { +message ReadArrayU32StreamingResponse { int32 status = 1; repeated uint32 array = 2; } @@ -781,11 +745,7 @@ message BeginReadArrayU64Response { ni.data_monikers.Moniker moniker = 2; } -message ReadArrayU64StreamingData { - ReadArrayU64StreamingDataResponse response = 2; -} - -message ReadArrayU64StreamingDataResponse { +message ReadArrayU64StreamingResponse { int32 status = 1; repeated uint64 array = 2; } @@ -812,11 +772,7 @@ message BeginReadArrayU8Response { ni.data_monikers.Moniker moniker = 2; } -message ReadArrayU8StreamingData { - ReadArrayU8StreamingDataResponse response = 2; -} - -message ReadArrayU8StreamingDataResponse { +message ReadArrayU8StreamingResponse { int32 status = 1; repeated uint32 array = 2; } @@ -841,11 +797,7 @@ message BeginReadBoolResponse { ni.data_monikers.Moniker moniker = 2; } -message ReadBoolStreamingData { - ReadBoolStreamingDataResponse response = 2; -} - -message ReadBoolStreamingDataResponse { +message ReadBoolStreamingResponse { int32 status = 1; bool value = 2; } @@ -870,11 +822,7 @@ message BeginReadDblResponse { ni.data_monikers.Moniker moniker = 2; } -message ReadDblStreamingData { - ReadDblStreamingDataResponse response = 2; -} - -message ReadDblStreamingDataResponse { +message ReadDblStreamingResponse { int32 status = 1; double value = 2; } @@ -1042,11 +990,7 @@ message BeginReadI16Response { ni.data_monikers.Moniker moniker = 2; } -message ReadI16StreamingData { - ReadI16StreamingDataResponse response = 2; -} - -message ReadI16StreamingDataResponse { +message ReadI16StreamingResponse { int32 status = 1; int32 value = 2; } @@ -1071,11 +1015,7 @@ message BeginReadI32Response { ni.data_monikers.Moniker moniker = 2; } -message ReadI32StreamingData { - ReadI32StreamingDataResponse response = 2; -} - -message ReadI32StreamingDataResponse { +message ReadI32StreamingResponse { int32 status = 1; int32 value = 2; } @@ -1100,11 +1040,7 @@ message BeginReadI64Response { ni.data_monikers.Moniker moniker = 2; } -message ReadI64StreamingData { - ReadI64StreamingDataResponse response = 2; -} - -message ReadI64StreamingDataResponse { +message ReadI64StreamingResponse { int32 status = 1; int64 value = 2; } @@ -1129,11 +1065,7 @@ message BeginReadI8Response { ni.data_monikers.Moniker moniker = 2; } -message ReadI8StreamingData { - ReadI8StreamingDataResponse response = 2; -} - -message ReadI8StreamingDataResponse { +message ReadI8StreamingResponse { int32 status = 1; int32 value = 2; } @@ -1158,11 +1090,7 @@ message BeginReadSglResponse { ni.data_monikers.Moniker moniker = 2; } -message ReadSglStreamingData { - ReadSglStreamingDataResponse response = 2; -} - -message ReadSglStreamingDataResponse { +message ReadSglStreamingResponse { int32 status = 1; float value = 2; } @@ -1187,11 +1115,7 @@ message BeginReadU16Response { ni.data_monikers.Moniker moniker = 2; } -message ReadU16StreamingData { - ReadU16StreamingDataResponse response = 2; -} - -message ReadU16StreamingDataResponse { +message ReadU16StreamingResponse { int32 status = 1; uint32 value = 2; } @@ -1216,11 +1140,7 @@ message BeginReadU32Response { ni.data_monikers.Moniker moniker = 2; } -message ReadU32StreamingData { - ReadU32StreamingDataResponse response = 2; -} - -message ReadU32StreamingDataResponse { +message ReadU32StreamingResponse { int32 status = 1; uint32 value = 2; } @@ -1245,11 +1165,7 @@ message BeginReadU64Response { ni.data_monikers.Moniker moniker = 2; } -message ReadU64StreamingData { - ReadU64StreamingDataResponse response = 2; -} - -message ReadU64StreamingDataResponse { +message ReadU64StreamingResponse { int32 status = 1; uint64 value = 2; } @@ -1274,11 +1190,7 @@ message BeginReadU8Response { ni.data_monikers.Moniker moniker = 2; } -message ReadU8StreamingData { - ReadU8StreamingDataResponse response = 2; -} - -message ReadU8StreamingDataResponse { +message ReadU8StreamingResponse { int32 status = 1; uint32 value = 2; } @@ -1428,16 +1340,11 @@ message BeginWriteArrayBoolResponse { ni.data_monikers.Moniker moniker = 2; } -message WriteArrayBoolStreamingData { - WriteArrayBoolStreamingDataRequest request = 1; - WriteArrayBoolStreamingDataResponse response = 2; -} - -message WriteArrayBoolStreamingDataRequest { +message WriteArrayBoolStreamingRequest { repeated bool array = 1; } -message WriteArrayBoolStreamingDataResponse { +message WriteArrayBoolStreamingResponse { int32 status = 1; } @@ -1461,16 +1368,11 @@ message BeginWriteArrayDblResponse { ni.data_monikers.Moniker moniker = 2; } -message WriteArrayDblStreamingData { - WriteArrayDblStreamingDataRequest request = 1; - WriteArrayDblStreamingDataResponse response = 2; -} - -message WriteArrayDblStreamingDataRequest { +message WriteArrayDblStreamingRequest { repeated double array = 1; } -message WriteArrayDblStreamingDataResponse { +message WriteArrayDblStreamingResponse { int32 status = 1; } @@ -1494,16 +1396,11 @@ message BeginWriteArrayI16Response { ni.data_monikers.Moniker moniker = 2; } -message WriteArrayI16StreamingData { - WriteArrayI16StreamingDataRequest request = 1; - WriteArrayI16StreamingDataResponse response = 2; -} - -message WriteArrayI16StreamingDataRequest { +message WriteArrayI16StreamingRequest { repeated int32 array = 1; } -message WriteArrayI16StreamingDataResponse { +message WriteArrayI16StreamingResponse { int32 status = 1; } @@ -1527,16 +1424,11 @@ message BeginWriteArrayI32Response { ni.data_monikers.Moniker moniker = 2; } -message WriteArrayI32StreamingData { - WriteArrayI32StreamingDataRequest request = 1; - WriteArrayI32StreamingDataResponse response = 2; -} - -message WriteArrayI32StreamingDataRequest { +message WriteArrayI32StreamingRequest { repeated int32 array = 1; } -message WriteArrayI32StreamingDataResponse { +message WriteArrayI32StreamingResponse { int32 status = 1; } @@ -1560,16 +1452,11 @@ message BeginWriteArrayI64Response { ni.data_monikers.Moniker moniker = 2; } -message WriteArrayI64StreamingData { - WriteArrayI64StreamingDataRequest request = 1; - WriteArrayI64StreamingDataResponse response = 2; -} - -message WriteArrayI64StreamingDataRequest { +message WriteArrayI64StreamingRequest { repeated int64 array = 1; } -message WriteArrayI64StreamingDataResponse { +message WriteArrayI64StreamingResponse { int32 status = 1; } @@ -1593,16 +1480,11 @@ message BeginWriteArrayI8Response { ni.data_monikers.Moniker moniker = 2; } -message WriteArrayI8StreamingData { - WriteArrayI8StreamingDataRequest request = 1; - WriteArrayI8StreamingDataResponse response = 2; -} - -message WriteArrayI8StreamingDataRequest { +message WriteArrayI8StreamingRequest { repeated int32 array = 1; } -message WriteArrayI8StreamingDataResponse { +message WriteArrayI8StreamingResponse { int32 status = 1; } @@ -1626,16 +1508,11 @@ message BeginWriteArraySglResponse { ni.data_monikers.Moniker moniker = 2; } -message WriteArraySglStreamingData { - WriteArraySglStreamingDataRequest request = 1; - WriteArraySglStreamingDataResponse response = 2; -} - -message WriteArraySglStreamingDataRequest { +message WriteArraySglStreamingRequest { repeated float array = 1; } -message WriteArraySglStreamingDataResponse { +message WriteArraySglStreamingResponse { int32 status = 1; } @@ -1659,16 +1536,11 @@ message BeginWriteArrayU16Response { ni.data_monikers.Moniker moniker = 2; } -message WriteArrayU16StreamingData { - WriteArrayU16StreamingDataRequest request = 1; - WriteArrayU16StreamingDataResponse response = 2; -} - -message WriteArrayU16StreamingDataRequest { +message WriteArrayU16StreamingRequest { repeated uint32 array = 1; } -message WriteArrayU16StreamingDataResponse { +message WriteArrayU16StreamingResponse { int32 status = 1; } @@ -1692,16 +1564,11 @@ message BeginWriteArrayU32Response { ni.data_monikers.Moniker moniker = 2; } -message WriteArrayU32StreamingData { - WriteArrayU32StreamingDataRequest request = 1; - WriteArrayU32StreamingDataResponse response = 2; -} - -message WriteArrayU32StreamingDataRequest { +message WriteArrayU32StreamingRequest { repeated uint32 array = 1; } -message WriteArrayU32StreamingDataResponse { +message WriteArrayU32StreamingResponse { int32 status = 1; } @@ -1725,16 +1592,11 @@ message BeginWriteArrayU64Response { ni.data_monikers.Moniker moniker = 2; } -message WriteArrayU64StreamingData { - WriteArrayU64StreamingDataRequest request = 1; - WriteArrayU64StreamingDataResponse response = 2; -} - -message WriteArrayU64StreamingDataRequest { +message WriteArrayU64StreamingRequest { repeated uint64 array = 1; } -message WriteArrayU64StreamingDataResponse { +message WriteArrayU64StreamingResponse { int32 status = 1; } @@ -1758,16 +1620,11 @@ message BeginWriteArrayU8Response { ni.data_monikers.Moniker moniker = 2; } -message WriteArrayU8StreamingData { - WriteArrayU8StreamingDataRequest request = 1; - WriteArrayU8StreamingDataResponse response = 2; -} - -message WriteArrayU8StreamingDataRequest { +message WriteArrayU8StreamingRequest { repeated uint32 array = 1; } -message WriteArrayU8StreamingDataResponse { +message WriteArrayU8StreamingResponse { int32 status = 1; } @@ -1791,16 +1648,11 @@ message BeginWriteBoolResponse { ni.data_monikers.Moniker moniker = 2; } -message WriteBoolStreamingData { - WriteBoolStreamingDataRequest request = 1; - WriteBoolStreamingDataResponse response = 2; -} - -message WriteBoolStreamingDataRequest { +message WriteBoolStreamingRequest { bool value = 1; } -message WriteBoolStreamingDataResponse { +message WriteBoolStreamingResponse { int32 status = 1; } @@ -1824,16 +1676,11 @@ message BeginWriteDblResponse { ni.data_monikers.Moniker moniker = 2; } -message WriteDblStreamingData { - WriteDblStreamingDataRequest request = 1; - WriteDblStreamingDataResponse response = 2; -} - -message WriteDblStreamingDataRequest { +message WriteDblStreamingRequest { double value = 1; } -message WriteDblStreamingDataResponse { +message WriteDblStreamingResponse { int32 status = 1; } @@ -1989,16 +1836,11 @@ message BeginWriteI16Response { ni.data_monikers.Moniker moniker = 2; } -message WriteI16StreamingData { - WriteI16StreamingDataRequest request = 1; - WriteI16StreamingDataResponse response = 2; -} - -message WriteI16StreamingDataRequest { +message WriteI16StreamingRequest { int32 value = 1; } -message WriteI16StreamingDataResponse { +message WriteI16StreamingResponse { int32 status = 1; } @@ -2022,16 +1864,11 @@ message BeginWriteI32Response { ni.data_monikers.Moniker moniker = 2; } -message WriteI32StreamingData { - WriteI32StreamingDataRequest request = 1; - WriteI32StreamingDataResponse response = 2; -} - -message WriteI32StreamingDataRequest { +message WriteI32StreamingRequest { int32 value = 1; } -message WriteI32StreamingDataResponse { +message WriteI32StreamingResponse { int32 status = 1; } @@ -2055,16 +1892,11 @@ message BeginWriteI64Response { ni.data_monikers.Moniker moniker = 2; } -message WriteI64StreamingData { - WriteI64StreamingDataRequest request = 1; - WriteI64StreamingDataResponse response = 2; -} - -message WriteI64StreamingDataRequest { +message WriteI64StreamingRequest { int64 value = 1; } -message WriteI64StreamingDataResponse { +message WriteI64StreamingResponse { int32 status = 1; } @@ -2088,16 +1920,11 @@ message BeginWriteI8Response { ni.data_monikers.Moniker moniker = 2; } -message WriteI8StreamingData { - WriteI8StreamingDataRequest request = 1; - WriteI8StreamingDataResponse response = 2; -} - -message WriteI8StreamingDataRequest { +message WriteI8StreamingRequest { int32 value = 1; } -message WriteI8StreamingDataResponse { +message WriteI8StreamingResponse { int32 status = 1; } @@ -2121,16 +1948,11 @@ message BeginWriteSglResponse { ni.data_monikers.Moniker moniker = 2; } -message WriteSglStreamingData { - WriteSglStreamingDataRequest request = 1; - WriteSglStreamingDataResponse response = 2; -} - -message WriteSglStreamingDataRequest { +message WriteSglStreamingRequest { float value = 1; } -message WriteSglStreamingDataResponse { +message WriteSglStreamingResponse { int32 status = 1; } @@ -2154,16 +1976,11 @@ message BeginWriteU16Response { ni.data_monikers.Moniker moniker = 2; } -message WriteU16StreamingData { - WriteU16StreamingDataRequest request = 1; - WriteU16StreamingDataResponse response = 2; -} - -message WriteU16StreamingDataRequest { +message WriteU16StreamingRequest { uint32 value = 1; } -message WriteU16StreamingDataResponse { +message WriteU16StreamingResponse { int32 status = 1; } @@ -2187,16 +2004,11 @@ message BeginWriteU32Response { ni.data_monikers.Moniker moniker = 2; } -message WriteU32StreamingData { - WriteU32StreamingDataRequest request = 1; - WriteU32StreamingDataResponse response = 2; -} - -message WriteU32StreamingDataRequest { +message WriteU32StreamingRequest { uint32 value = 1; } -message WriteU32StreamingDataResponse { +message WriteU32StreamingResponse { int32 status = 1; } @@ -2220,16 +2032,11 @@ message BeginWriteU64Response { ni.data_monikers.Moniker moniker = 2; } -message WriteU64StreamingData { - WriteU64StreamingDataRequest request = 1; - WriteU64StreamingDataResponse response = 2; -} - -message WriteU64StreamingDataRequest { +message WriteU64StreamingRequest { uint64 value = 1; } -message WriteU64StreamingDataResponse { +message WriteU64StreamingResponse { int32 status = 1; } @@ -2253,16 +2060,11 @@ message BeginWriteU8Response { ni.data_monikers.Moniker moniker = 2; } -message WriteU8StreamingData { - WriteU8StreamingDataRequest request = 1; - WriteU8StreamingDataResponse response = 2; -} - -message WriteU8StreamingDataRequest { +message WriteU8StreamingRequest { uint32 value = 1; } -message WriteU8StreamingDataResponse { +message WriteU8StreamingResponse { int32 status = 1; } diff --git a/generated/nifpga/nifpga_service.cpp b/generated/nifpga/nifpga_service.cpp index 20ee33725..cff100e2a 100644 --- a/generated/nifpga/nifpga_service.cpp +++ b/generated/nifpga/nifpga_service.cpp @@ -27,7 +27,7 @@ namespace nifpga_grpc { NiFpga_Session session; uint32_t indicator; size_t size; - nifpga_grpc::ReadArrayBoolStreamingData data; + nifpga_grpc::ReadArrayBoolStreamingResponse response; std::shared_ptr library; }; @@ -36,7 +36,7 @@ namespace nifpga_grpc { NiFpga_Session session; uint32_t indicator; size_t size; - nifpga_grpc::ReadArrayDblStreamingData data; + nifpga_grpc::ReadArrayDblStreamingResponse response; std::shared_ptr library; }; @@ -45,7 +45,7 @@ namespace nifpga_grpc { NiFpga_Session session; uint32_t indicator; size_t size; - nifpga_grpc::ReadArrayI16StreamingData data; + nifpga_grpc::ReadArrayI16StreamingResponse response; std::shared_ptr library; }; @@ -54,7 +54,7 @@ namespace nifpga_grpc { NiFpga_Session session; uint32_t indicator; size_t size; - nifpga_grpc::ReadArrayI32StreamingData data; + nifpga_grpc::ReadArrayI32StreamingResponse response; std::shared_ptr library; }; @@ -63,7 +63,7 @@ namespace nifpga_grpc { NiFpga_Session session; uint32_t indicator; size_t size; - nifpga_grpc::ReadArrayI64StreamingData data; + nifpga_grpc::ReadArrayI64StreamingResponse response; std::shared_ptr library; }; @@ -72,7 +72,7 @@ namespace nifpga_grpc { NiFpga_Session session; uint32_t indicator; size_t size; - nifpga_grpc::ReadArrayI8StreamingData data; + nifpga_grpc::ReadArrayI8StreamingResponse response; std::shared_ptr library; }; @@ -81,7 +81,7 @@ namespace nifpga_grpc { NiFpga_Session session; uint32_t indicator; size_t size; - nifpga_grpc::ReadArraySglStreamingData data; + nifpga_grpc::ReadArraySglStreamingResponse response; std::shared_ptr library; }; @@ -90,7 +90,7 @@ namespace nifpga_grpc { NiFpga_Session session; uint32_t indicator; size_t size; - nifpga_grpc::ReadArrayU16StreamingData data; + nifpga_grpc::ReadArrayU16StreamingResponse response; std::shared_ptr library; }; @@ -99,7 +99,7 @@ namespace nifpga_grpc { NiFpga_Session session; uint32_t indicator; size_t size; - nifpga_grpc::ReadArrayU32StreamingData data; + nifpga_grpc::ReadArrayU32StreamingResponse response; std::shared_ptr library; }; @@ -108,7 +108,7 @@ namespace nifpga_grpc { NiFpga_Session session; uint32_t indicator; size_t size; - nifpga_grpc::ReadArrayU64StreamingData data; + nifpga_grpc::ReadArrayU64StreamingResponse response; std::shared_ptr library; }; @@ -117,7 +117,7 @@ namespace nifpga_grpc { NiFpga_Session session; uint32_t indicator; size_t size; - nifpga_grpc::ReadArrayU8StreamingData data; + nifpga_grpc::ReadArrayU8StreamingResponse response; std::shared_ptr library; }; @@ -125,7 +125,7 @@ namespace nifpga_grpc { { NiFpga_Session session; uint32_t indicator; - nifpga_grpc::ReadBoolStreamingData data; + nifpga_grpc::ReadBoolStreamingResponse response; std::shared_ptr library; }; @@ -133,7 +133,7 @@ namespace nifpga_grpc { { NiFpga_Session session; uint32_t indicator; - nifpga_grpc::ReadDblStreamingData data; + nifpga_grpc::ReadDblStreamingResponse response; std::shared_ptr library; }; @@ -141,7 +141,7 @@ namespace nifpga_grpc { { NiFpga_Session session; uint32_t indicator; - nifpga_grpc::ReadI16StreamingData data; + nifpga_grpc::ReadI16StreamingResponse response; std::shared_ptr library; }; @@ -149,7 +149,7 @@ namespace nifpga_grpc { { NiFpga_Session session; uint32_t indicator; - nifpga_grpc::ReadI32StreamingData data; + nifpga_grpc::ReadI32StreamingResponse response; std::shared_ptr library; }; @@ -157,7 +157,7 @@ namespace nifpga_grpc { { NiFpga_Session session; uint32_t indicator; - nifpga_grpc::ReadI64StreamingData data; + nifpga_grpc::ReadI64StreamingResponse response; std::shared_ptr library; }; @@ -165,7 +165,7 @@ namespace nifpga_grpc { { NiFpga_Session session; uint32_t indicator; - nifpga_grpc::ReadI8StreamingData data; + nifpga_grpc::ReadI8StreamingResponse response; std::shared_ptr library; }; @@ -173,7 +173,7 @@ namespace nifpga_grpc { { NiFpga_Session session; uint32_t indicator; - nifpga_grpc::ReadSglStreamingData data; + nifpga_grpc::ReadSglStreamingResponse response; std::shared_ptr library; }; @@ -181,7 +181,7 @@ namespace nifpga_grpc { { NiFpga_Session session; uint32_t indicator; - nifpga_grpc::ReadU16StreamingData data; + nifpga_grpc::ReadU16StreamingResponse response; std::shared_ptr library; }; @@ -189,7 +189,7 @@ namespace nifpga_grpc { { NiFpga_Session session; uint32_t indicator; - nifpga_grpc::ReadU32StreamingData data; + nifpga_grpc::ReadU32StreamingResponse response; std::shared_ptr library; }; @@ -197,7 +197,7 @@ namespace nifpga_grpc { { NiFpga_Session session; uint32_t indicator; - nifpga_grpc::ReadU64StreamingData data; + nifpga_grpc::ReadU64StreamingResponse response; std::shared_ptr library; }; @@ -205,7 +205,7 @@ namespace nifpga_grpc { { NiFpga_Session session; uint32_t indicator; - nifpga_grpc::ReadU8StreamingData data; + nifpga_grpc::ReadU8StreamingResponse response; std::shared_ptr library; }; @@ -213,7 +213,8 @@ namespace nifpga_grpc { { NiFpga_Session session; uint32_t control; - nifpga_grpc::WriteArrayBoolStreamingData data; + nifpga_grpc::WriteArrayBoolStreamingRequest request; + nifpga_grpc::WriteArrayBoolStreamingResponse response; std::shared_ptr library; }; @@ -221,7 +222,8 @@ namespace nifpga_grpc { { NiFpga_Session session; uint32_t control; - nifpga_grpc::WriteArrayDblStreamingData data; + nifpga_grpc::WriteArrayDblStreamingRequest request; + nifpga_grpc::WriteArrayDblStreamingResponse response; std::shared_ptr library; }; @@ -229,7 +231,8 @@ namespace nifpga_grpc { { NiFpga_Session session; uint32_t control; - nifpga_grpc::WriteArrayI16StreamingData data; + nifpga_grpc::WriteArrayI16StreamingRequest request; + nifpga_grpc::WriteArrayI16StreamingResponse response; std::shared_ptr library; }; @@ -237,7 +240,8 @@ namespace nifpga_grpc { { NiFpga_Session session; uint32_t control; - nifpga_grpc::WriteArrayI32StreamingData data; + nifpga_grpc::WriteArrayI32StreamingRequest request; + nifpga_grpc::WriteArrayI32StreamingResponse response; std::shared_ptr library; }; @@ -245,7 +249,8 @@ namespace nifpga_grpc { { NiFpga_Session session; uint32_t control; - nifpga_grpc::WriteArrayI64StreamingData data; + nifpga_grpc::WriteArrayI64StreamingRequest request; + nifpga_grpc::WriteArrayI64StreamingResponse response; std::shared_ptr library; }; @@ -253,7 +258,8 @@ namespace nifpga_grpc { { NiFpga_Session session; uint32_t control; - nifpga_grpc::WriteArrayI8StreamingData data; + nifpga_grpc::WriteArrayI8StreamingRequest request; + nifpga_grpc::WriteArrayI8StreamingResponse response; std::shared_ptr library; }; @@ -261,7 +267,8 @@ namespace nifpga_grpc { { NiFpga_Session session; uint32_t control; - nifpga_grpc::WriteArraySglStreamingData data; + nifpga_grpc::WriteArraySglStreamingRequest request; + nifpga_grpc::WriteArraySglStreamingResponse response; std::shared_ptr library; }; @@ -269,7 +276,8 @@ namespace nifpga_grpc { { NiFpga_Session session; uint32_t control; - nifpga_grpc::WriteArrayU16StreamingData data; + nifpga_grpc::WriteArrayU16StreamingRequest request; + nifpga_grpc::WriteArrayU16StreamingResponse response; std::shared_ptr library; }; @@ -277,7 +285,8 @@ namespace nifpga_grpc { { NiFpga_Session session; uint32_t control; - nifpga_grpc::WriteArrayU32StreamingData data; + nifpga_grpc::WriteArrayU32StreamingRequest request; + nifpga_grpc::WriteArrayU32StreamingResponse response; std::shared_ptr library; }; @@ -285,7 +294,8 @@ namespace nifpga_grpc { { NiFpga_Session session; uint32_t control; - nifpga_grpc::WriteArrayU64StreamingData data; + nifpga_grpc::WriteArrayU64StreamingRequest request; + nifpga_grpc::WriteArrayU64StreamingResponse response; std::shared_ptr library; }; @@ -293,7 +303,8 @@ namespace nifpga_grpc { { NiFpga_Session session; uint32_t control; - nifpga_grpc::WriteArrayU8StreamingData data; + nifpga_grpc::WriteArrayU8StreamingRequest request; + nifpga_grpc::WriteArrayU8StreamingResponse response; std::shared_ptr library; }; @@ -301,7 +312,8 @@ namespace nifpga_grpc { { NiFpga_Session session; uint32_t control; - nifpga_grpc::WriteBoolStreamingData data; + nifpga_grpc::WriteBoolStreamingRequest request; + nifpga_grpc::WriteBoolStreamingResponse response; std::shared_ptr library; }; @@ -309,7 +321,8 @@ namespace nifpga_grpc { { NiFpga_Session session; uint32_t control; - nifpga_grpc::WriteDblStreamingData data; + nifpga_grpc::WriteDblStreamingRequest request; + nifpga_grpc::WriteDblStreamingResponse response; std::shared_ptr library; }; @@ -317,7 +330,8 @@ namespace nifpga_grpc { { NiFpga_Session session; uint32_t control; - nifpga_grpc::WriteI16StreamingData data; + nifpga_grpc::WriteI16StreamingRequest request; + nifpga_grpc::WriteI16StreamingResponse response; std::shared_ptr library; }; @@ -325,7 +339,8 @@ namespace nifpga_grpc { { NiFpga_Session session; uint32_t control; - nifpga_grpc::WriteI32StreamingData data; + nifpga_grpc::WriteI32StreamingRequest request; + nifpga_grpc::WriteI32StreamingResponse response; std::shared_ptr library; }; @@ -333,7 +348,8 @@ namespace nifpga_grpc { { NiFpga_Session session; uint32_t control; - nifpga_grpc::WriteI64StreamingData data; + nifpga_grpc::WriteI64StreamingRequest request; + nifpga_grpc::WriteI64StreamingResponse response; std::shared_ptr library; }; @@ -341,7 +357,8 @@ namespace nifpga_grpc { { NiFpga_Session session; uint32_t control; - nifpga_grpc::WriteI8StreamingData data; + nifpga_grpc::WriteI8StreamingRequest request; + nifpga_grpc::WriteI8StreamingResponse response; std::shared_ptr library; }; @@ -349,7 +366,8 @@ namespace nifpga_grpc { { NiFpga_Session session; uint32_t control; - nifpga_grpc::WriteSglStreamingData data; + nifpga_grpc::WriteSglStreamingRequest request; + nifpga_grpc::WriteSglStreamingResponse response; std::shared_ptr library; }; @@ -357,7 +375,8 @@ namespace nifpga_grpc { { NiFpga_Session session; uint32_t control; - nifpga_grpc::WriteU16StreamingData data; + nifpga_grpc::WriteU16StreamingRequest request; + nifpga_grpc::WriteU16StreamingResponse response; std::shared_ptr library; }; @@ -365,7 +384,8 @@ namespace nifpga_grpc { { NiFpga_Session session; uint32_t control; - nifpga_grpc::WriteU32StreamingData data; + nifpga_grpc::WriteU32StreamingRequest request; + nifpga_grpc::WriteU32StreamingResponse response; std::shared_ptr library; }; @@ -373,7 +393,8 @@ namespace nifpga_grpc { { NiFpga_Session session; uint32_t control; - nifpga_grpc::WriteU64StreamingData data; + nifpga_grpc::WriteU64StreamingRequest request; + nifpga_grpc::WriteU64StreamingResponse response; std::shared_ptr library; }; @@ -381,7 +402,8 @@ namespace nifpga_grpc { { NiFpga_Session session; uint32_t control; - nifpga_grpc::WriteU8StreamingData data; + nifpga_grpc::WriteU8StreamingRequest request; + nifpga_grpc::WriteU8StreamingResponse response; std::shared_ptr library; }; diff --git a/source/codegen/common_helpers.py b/source/codegen/common_helpers.py index 82754a048..8ca469349 100644 --- a/source/codegen/common_helpers.py +++ b/source/codegen/common_helpers.py @@ -1210,22 +1210,46 @@ def filter_moniker_streaming_functions(functions, functions_to_generate): name for name in functions_to_generate if is_moniker_streaming_function(functions[name]) ] + def is_moniker_streaming_function(function): """Whether this function is for streaming data through moniker.""" return function.get("is_streaming_api", False) + def get_data_moniker_function_name(function_name): """Return the corresponding moniker function name for the given C API function.""" return function_name.replace("Begin", "Moniker") -def get_data_moniker_struct_name(function_name): - """Return the corresponding moniker function name for the given C API function.""" - return f"{function_name.replace('Begin', 'Moniker')}Data" +def get_data_moniker_struct_name(begin_function_name): + """Return the corresponding moniker function name for the given Begin* C API function.""" + return f"{begin_function_name.replace('Begin', 'Moniker')}Data" -def get_data_moniker_request_response_data_type(function_name): - """Return the corresponding moniker function name for the given C API function.""" - return f"{function_name.replace('Begin', '')}StreamingData" + +def get_data_moniker_request_message_type(begin_function_name): + """Return the request message type for corresponding moniker function name given Begin* C API function.""" + return f"{begin_function_name.replace('Begin', '')}StreamingRequest" + + +def get_data_moniker_response_message_type(begin_function_name): + """Return the response message type for corresponding moniker function name given Begin* C API function.""" + return f"{begin_function_name.replace('Begin', '')}StreamingResponse" + + +def get_data_moniker_function_parameters(function): + """Given non-streaming function equivalent filter the parameters needed for Moniker APIs for streaming APIs, + and split into input/output parameters. + + Add a default "status" output parameter if there isn't one already. + """ + parameter_array = filter_parameters_for_grpc_fields(function["parameters"]) + input_parameters = [ + p for p in parameter_array if is_input_parameter(p) and p.get("is_streaming_type", False) + ] + default_status_param = {"name": "status", "type": "int32", "grpc_type": "int32"} + output_parameters = [default_status_param] + output_parameters.extend([p for p in parameter_array if is_output_parameter(p)]) + return (input_parameters, output_parameters) def is_function_in_streaming_functions(function_name, streaming_functions_to_generate): diff --git a/source/codegen/proto_helpers.py b/source/codegen/proto_helpers.py index 7e39141b6..caa1b38f4 100644 --- a/source/codegen/proto_helpers.py +++ b/source/codegen/proto_helpers.py @@ -253,18 +253,6 @@ def get_parameters(function): return (input_parameters, output_parameters) -def get_streaming_moniker_function_parameters(function): - """TODO - """ - parameter_array = common_helpers.filter_parameters_for_grpc_fields(function["parameters"]) - input_parameters = [p for p in parameter_array if common_helpers.is_input_parameter(p) and p.get("is_streaming_type", False)] - default_status_param = {"name": "status", "type": "int32", "grpc_type": "int32"} - output_parameters = [default_status_param] - output_parameters.extend( - [p for p in parameter_array if common_helpers.is_output_parameter(p)] - ) - return (input_parameters, output_parameters) - def _get_callback_output_params(function): """Look for a parameter that specifies callback_params and return those params. diff --git a/source/codegen/templates/proto_helpers.mako b/source/codegen/templates/proto_helpers.mako index bdbde9935..c3034a556 100644 --- a/source/codegen/templates/proto_helpers.mako +++ b/source/codegen/templates/proto_helpers.mako @@ -116,29 +116,23 @@ message ${common_helpers.snake_to_pascal(function)}Response { ## Define a proto message moniker streaming function. <%def name="define_moniker_request_response_message(begin_function_name, functions)">\ <% - request_response_data_type = common_helpers.get_data_moniker_request_response_data_type(begin_function_name) non_streaming_function_name = begin_function_name.replace("Begin", "") - input_parameters, output_parameters = proto_helpers.get_streaming_moniker_function_parameters(functions[non_streaming_function_name]) + input_parameters, output_parameters = common_helpers.get_data_moniker_function_parameters(functions[non_streaming_function_name]) request_parameters = proto_helpers.get_message_parameter_definitions(input_parameters) response_parameters = proto_helpers.get_message_parameter_definitions(output_parameters) + request_message_type = common_helpers.get_data_moniker_request_message_type(begin_function_name) + response_message_type = common_helpers.get_data_moniker_response_message_type(begin_function_name) %>\ -message ${request_response_data_type} { % if request_parameters: - ${request_response_data_type}Request request = 1; -% endif - ${request_response_data_type}Response response = 2; -} - -% if request_parameters: -message ${request_response_data_type}Request { +message ${request_message_type} { % for parameter in request_parameters: ${parameter["type"]} ${parameter["name"]} = ${parameter["grpc_field_number"]}; % endfor } % endif -message ${request_response_data_type}Response { +message ${response_message_type} { % for parameter in response_parameters: ${parameter["type"]} ${parameter["name"]} = ${parameter["grpc_field_number"]}; % endfor diff --git a/source/codegen/templates/service.cpp.mako b/source/codegen/templates/service.cpp.mako index 58340062e..ab113099b 100644 --- a/source/codegen/templates/service.cpp.mako +++ b/source/codegen/templates/service.cpp.mako @@ -13,7 +13,7 @@ custom_types = common_helpers.get_custom_types(config) has_async_functions = any(service_helpers.get_async_functions(functions)) has_two_dimension_functions = any(service_helpers.get_functions_with_two_dimension_param(functions)) functions_to_generate = service_helpers.filter_proto_rpc_functions_to_generate(functions) -streaming_functions_to_generate = common_helpers.filter_moniker_streaming_functions (functions, functions_to_generate) +streaming_functions_to_generate = common_helpers.filter_moniker_streaming_functions(functions, functions_to_generate) # If there are any non-mockable functions, we need to call the library directly, which # means we need another include file any_non_mockable_functions = any(not common_helpers.can_mock_function(functions[name]['parameters']) for name in functions_to_generate) @@ -67,8 +67,11 @@ namespace ${config["namespace_component"]}_grpc { <% function_data = functions[function_name] parameters = function_data['parameters'] +non_streaming_function_name = function_name.replace("Begin", "") +input_parameters, output_parameters = common_helpers.get_data_moniker_function_parameters(functions[non_streaming_function_name]) +has_input_parameters = len(input_parameters) != 0 %> -${mako_helper.define_moniker_streaming_struct(function_name=function_name, parameters=parameters)}\ +${mako_helper.define_moniker_streaming_struct(begin_function_name=function_name, parameters=parameters, has_input_parameters=has_input_parameters)}\ % endfor % if any_ivi_dance_functions: diff --git a/source/codegen/templates/service_helpers.mako b/source/codegen/templates/service_helpers.mako index ee61a7d12..d2fa51251 100644 --- a/source/codegen/templates/service_helpers.mako +++ b/source/codegen/templates/service_helpers.mako @@ -278,12 +278,13 @@ ${populate_response(function_data=function_data, parameters=parameters)}\ ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("${moniker_function_name}", ${moniker_function_name}); -<%def name="define_moniker_streaming_struct(function_name, parameters)">\ +<%def name="define_moniker_streaming_struct(begin_function_name, parameters, has_input_parameters)">\ <% config = data['config'] service_class_prefix = config["service_class_prefix"] - struct_name = common_helpers.get_data_moniker_struct_name(function_name) - request_response_data_type = common_helpers.get_data_moniker_request_response_data_type(function_name) + struct_name = common_helpers.get_data_moniker_struct_name(begin_function_name) + request_message_type = common_helpers.get_data_moniker_request_message_type(begin_function_name) + response_message_type = common_helpers.get_data_moniker_response_message_type(begin_function_name) streaming_params_to_include = common_helpers.get_input_streaming_params(parameters) %>\ struct ${struct_name} @@ -298,7 +299,10 @@ ${populate_response(function_data=function_data, parameters=parameters)}\ ${parameter['type']} ${parameter_name}; % endif % endfor - ${service_class_prefix.lower()}_grpc::${request_response_data_type} data; +% if has_input_parameters: + ${service_class_prefix.lower()}_grpc::${request_message_type} request; +% endif + ${service_class_prefix.lower()}_grpc::${response_message_type} response; std::shared_ptr<${service_class_prefix}LibraryInterface> library; }; From baffd64420efc13c13c63a3596e68f0d8a1bdb95 Mon Sep 17 00:00:00 2001 From: Rohan Doshi Date: Sat, 23 Nov 2024 20:20:41 +0530 Subject: [PATCH 06/25] standardize to send output in response parameter for moniker APIs --- generated/nidaqmx/nidaqmx_service.cpp | 428 +++++------ generated/nifpga/nifpga_service.cpp | 694 +++++++----------- source/codegen/service_helpers.py | 11 - source/codegen/templates/service_helpers.mako | 179 ++--- 4 files changed, 523 insertions(+), 789 deletions(-) diff --git a/generated/nidaqmx/nidaqmx_service.cpp b/generated/nidaqmx/nidaqmx_service.cpp index 3d8532ec9..1430f7393 100644 --- a/generated/nidaqmx/nidaqmx_service.cpp +++ b/generated/nidaqmx/nidaqmx_service.cpp @@ -368,17 +368,17 @@ ::grpc::Status MonikerReadAnalogF64(void* data, google::protobuf::Arena& arena, { MonikerReadAnalogF64Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto task = function_data->task; auto num_samps_per_chan = function_data->num_samps_per_chan; auto timeout = function_data->timeout; auto fill_mode = function_data->fill_mode; auto array_size_in_samps = function_data->array_size_in_samps; auto reserved = function_data->reserved; - - int32 samps_per_chan_read = {}; response->mutable_read_array()->Resize(array_size_in_samps, 0); - auto read_array = response->mutable_read_array()->mutable_data(); + float64* read_array = response->mutable_read_array()->mutable_data(); + int32 samps_per_chan_read {}; + auto status = library->ReadAnalogF64(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. @@ -394,7 +394,7 @@ ::grpc::Status MonikerReadAnalogF64(void* data, google::protobuf::Arena& arena, { response->set_status(status); response->set_samps_per_chan_read(samps_per_chan_read); - packedData.PackFrom(function_data->data); + packedData.PackFrom(*response); } else { @@ -408,12 +408,12 @@ ::grpc::Status MonikerReadAnalogScalarF64(void* data, google::protobuf::Arena& a { MonikerReadAnalogScalarF64Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto task = function_data->task; auto timeout = function_data->timeout; auto reserved = function_data->reserved; - -float64 value {}; + float64 value {}; + auto status = library->ReadAnalogScalarF64(task, timeout, &value, reserved); /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. @@ -428,7 +428,7 @@ float64 value {}; { response->set_status(status); response->set_value(value); - packedData.PackFrom(function_data->data); + packedData.PackFrom(*response); } else { @@ -442,16 +442,16 @@ ::grpc::Status MonikerReadBinaryI16(void* data, google::protobuf::Arena& arena, { MonikerReadBinaryI16Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto task = function_data->task; auto num_samps_per_chan = function_data->num_samps_per_chan; auto timeout = function_data->timeout; auto fill_mode = function_data->fill_mode; auto array_size_in_samps = function_data->array_size_in_samps; auto reserved = function_data->reserved; - - int32 samps_per_chan_read = {}; std::vector read_array(array_size_in_samps); + int32 samps_per_chan_read {}; + auto status = library->ReadBinaryI16(task, num_samps_per_chan, timeout, fill_mode, read_array.data(), array_size_in_samps, &samps_per_chan_read, reserved); /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. @@ -485,7 +485,7 @@ ::grpc::Status MonikerReadBinaryI16(void* data, google::protobuf::Arena& arena, return x; }); response->set_samps_per_chan_read(samps_per_chan_read); - packedData.PackFrom(function_data->data); + packedData.PackFrom(*response); } else { @@ -499,17 +499,17 @@ ::grpc::Status MonikerReadBinaryI32(void* data, google::protobuf::Arena& arena, { MonikerReadBinaryI32Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto task = function_data->task; auto num_samps_per_chan = function_data->num_samps_per_chan; auto timeout = function_data->timeout; auto fill_mode = function_data->fill_mode; auto array_size_in_samps = function_data->array_size_in_samps; auto reserved = function_data->reserved; - - int32 samps_per_chan_read = {}; response->mutable_read_array()->Resize(array_size_in_samps, 0); - auto read_array = reinterpret_cast(response->mutable_read_array()->mutable_data()); + int32* read_array = reinterpret_cast(response->mutable_read_array()->mutable_data()); + int32 samps_per_chan_read {}; + auto status = library->ReadBinaryI32(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. @@ -525,7 +525,7 @@ ::grpc::Status MonikerReadBinaryI32(void* data, google::protobuf::Arena& arena, { response->set_status(status); response->set_samps_per_chan_read(samps_per_chan_read); - packedData.PackFrom(function_data->data); + packedData.PackFrom(*response); } else { @@ -539,16 +539,16 @@ ::grpc::Status MonikerReadBinaryU16(void* data, google::protobuf::Arena& arena, { MonikerReadBinaryU16Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto task = function_data->task; auto num_samps_per_chan = function_data->num_samps_per_chan; auto timeout = function_data->timeout; auto fill_mode = function_data->fill_mode; auto array_size_in_samps = function_data->array_size_in_samps; auto reserved = function_data->reserved; - - int32 samps_per_chan_read = {}; std::vector read_array(array_size_in_samps); + int32 samps_per_chan_read {}; + auto status = library->ReadBinaryU16(task, num_samps_per_chan, timeout, fill_mode, read_array.data(), array_size_in_samps, &samps_per_chan_read, reserved); /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. @@ -582,7 +582,7 @@ ::grpc::Status MonikerReadBinaryU16(void* data, google::protobuf::Arena& arena, return x; }); response->set_samps_per_chan_read(samps_per_chan_read); - packedData.PackFrom(function_data->data); + packedData.PackFrom(*response); } else { @@ -596,17 +596,17 @@ ::grpc::Status MonikerReadBinaryU32(void* data, google::protobuf::Arena& arena, { MonikerReadBinaryU32Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto task = function_data->task; auto num_samps_per_chan = function_data->num_samps_per_chan; auto timeout = function_data->timeout; auto fill_mode = function_data->fill_mode; auto array_size_in_samps = function_data->array_size_in_samps; auto reserved = function_data->reserved; - - int32 samps_per_chan_read = {}; response->mutable_read_array()->Resize(array_size_in_samps, 0); - auto read_array = reinterpret_cast(response->mutable_read_array()->mutable_data()); + uInt32* read_array = reinterpret_cast(response->mutable_read_array()->mutable_data()); + int32 samps_per_chan_read {}; + auto status = library->ReadBinaryU32(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. @@ -622,7 +622,7 @@ ::grpc::Status MonikerReadBinaryU32(void* data, google::protobuf::Arena& arena, { response->set_status(status); response->set_samps_per_chan_read(samps_per_chan_read); - packedData.PackFrom(function_data->data); + packedData.PackFrom(*response); } else { @@ -636,16 +636,16 @@ ::grpc::Status MonikerReadCounterF64(void* data, google::protobuf::Arena& arena, { MonikerReadCounterF64Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto task = function_data->task; auto num_samps_per_chan = function_data->num_samps_per_chan; auto timeout = function_data->timeout; auto array_size_in_samps = function_data->array_size_in_samps; auto reserved = function_data->reserved; - - int32 samps_per_chan_read = {}; response->mutable_read_array()->Resize(array_size_in_samps, 0); - auto read_array = response->mutable_read_array()->mutable_data(); + float64* read_array = response->mutable_read_array()->mutable_data(); + int32 samps_per_chan_read {}; + auto status = library->ReadCounterF64(task, num_samps_per_chan, timeout, read_array, array_size_in_samps, &samps_per_chan_read, reserved); /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. @@ -661,7 +661,7 @@ ::grpc::Status MonikerReadCounterF64(void* data, google::protobuf::Arena& arena, { response->set_status(status); response->set_samps_per_chan_read(samps_per_chan_read); - packedData.PackFrom(function_data->data); + packedData.PackFrom(*response); } else { @@ -675,17 +675,17 @@ ::grpc::Status MonikerReadCounterF64Ex(void* data, google::protobuf::Arena& aren { MonikerReadCounterF64ExData* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto task = function_data->task; auto num_samps_per_chan = function_data->num_samps_per_chan; auto timeout = function_data->timeout; auto fill_mode = function_data->fill_mode; auto array_size_in_samps = function_data->array_size_in_samps; auto reserved = function_data->reserved; - - int32 samps_per_chan_read = {}; response->mutable_read_array()->Resize(array_size_in_samps, 0); - auto read_array = response->mutable_read_array()->mutable_data(); + float64* read_array = response->mutable_read_array()->mutable_data(); + int32 samps_per_chan_read {}; + auto status = library->ReadCounterF64Ex(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. @@ -701,7 +701,7 @@ ::grpc::Status MonikerReadCounterF64Ex(void* data, google::protobuf::Arena& aren { response->set_status(status); response->set_samps_per_chan_read(samps_per_chan_read); - packedData.PackFrom(function_data->data); + packedData.PackFrom(*response); } else { @@ -715,12 +715,12 @@ ::grpc::Status MonikerReadCounterScalarF64(void* data, google::protobuf::Arena& { MonikerReadCounterScalarF64Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto task = function_data->task; auto timeout = function_data->timeout; auto reserved = function_data->reserved; - -float64 value {}; + float64 value {}; + auto status = library->ReadCounterScalarF64(task, timeout, &value, reserved); /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. @@ -735,7 +735,7 @@ float64 value {}; { response->set_status(status); response->set_value(value); - packedData.PackFrom(function_data->data); + packedData.PackFrom(*response); } else { @@ -749,12 +749,12 @@ ::grpc::Status MonikerReadCounterScalarU32(void* data, google::protobuf::Arena& { MonikerReadCounterScalarU32Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto task = function_data->task; auto timeout = function_data->timeout; auto reserved = function_data->reserved; - -uInt32 value {}; + uInt32 value {}; + auto status = library->ReadCounterScalarU32(task, timeout, &value, reserved); /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. @@ -769,7 +769,7 @@ uInt32 value {}; { response->set_status(status); response->set_value(value); - packedData.PackFrom(function_data->data); + packedData.PackFrom(*response); } else { @@ -783,16 +783,16 @@ ::grpc::Status MonikerReadCounterU32(void* data, google::protobuf::Arena& arena, { MonikerReadCounterU32Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto task = function_data->task; auto num_samps_per_chan = function_data->num_samps_per_chan; auto timeout = function_data->timeout; auto array_size_in_samps = function_data->array_size_in_samps; auto reserved = function_data->reserved; - - int32 samps_per_chan_read = {}; response->mutable_read_array()->Resize(array_size_in_samps, 0); - auto read_array = reinterpret_cast(response->mutable_read_array()->mutable_data()); + uInt32* read_array = reinterpret_cast(response->mutable_read_array()->mutable_data()); + int32 samps_per_chan_read {}; + auto status = library->ReadCounterU32(task, num_samps_per_chan, timeout, read_array, array_size_in_samps, &samps_per_chan_read, reserved); /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. @@ -808,7 +808,7 @@ ::grpc::Status MonikerReadCounterU32(void* data, google::protobuf::Arena& arena, { response->set_status(status); response->set_samps_per_chan_read(samps_per_chan_read); - packedData.PackFrom(function_data->data); + packedData.PackFrom(*response); } else { @@ -822,17 +822,17 @@ ::grpc::Status MonikerReadCounterU32Ex(void* data, google::protobuf::Arena& aren { MonikerReadCounterU32ExData* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto task = function_data->task; auto num_samps_per_chan = function_data->num_samps_per_chan; auto timeout = function_data->timeout; auto fill_mode = function_data->fill_mode; auto array_size_in_samps = function_data->array_size_in_samps; auto reserved = function_data->reserved; - - int32 samps_per_chan_read = {}; response->mutable_read_array()->Resize(array_size_in_samps, 0); - auto read_array = reinterpret_cast(response->mutable_read_array()->mutable_data()); + uInt32* read_array = reinterpret_cast(response->mutable_read_array()->mutable_data()); + int32 samps_per_chan_read {}; + auto status = library->ReadCounterU32Ex(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. @@ -848,7 +848,7 @@ ::grpc::Status MonikerReadCounterU32Ex(void* data, google::protobuf::Arena& aren { response->set_status(status); response->set_samps_per_chan_read(samps_per_chan_read); - packedData.PackFrom(function_data->data); + packedData.PackFrom(*response); } else { @@ -862,12 +862,12 @@ ::grpc::Status MonikerReadDigitalScalarU32(void* data, google::protobuf::Arena& { MonikerReadDigitalScalarU32Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto task = function_data->task; auto timeout = function_data->timeout; auto reserved = function_data->reserved; - -uInt32 value {}; + uInt32 value {}; + auto status = library->ReadDigitalScalarU32(task, timeout, &value, reserved); /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. @@ -882,7 +882,7 @@ uInt32 value {}; { response->set_status(status); response->set_value(value); - packedData.PackFrom(function_data->data); + packedData.PackFrom(*response); } else { @@ -896,16 +896,16 @@ ::grpc::Status MonikerReadDigitalU16(void* data, google::protobuf::Arena& arena, { MonikerReadDigitalU16Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto task = function_data->task; auto num_samps_per_chan = function_data->num_samps_per_chan; auto timeout = function_data->timeout; auto fill_mode = function_data->fill_mode; auto array_size_in_samps = function_data->array_size_in_samps; auto reserved = function_data->reserved; - - int32 samps_per_chan_read = {}; std::vector read_array(array_size_in_samps); + int32 samps_per_chan_read {}; + auto status = library->ReadDigitalU16(task, num_samps_per_chan, timeout, fill_mode, read_array.data(), array_size_in_samps, &samps_per_chan_read, reserved); /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. @@ -939,7 +939,7 @@ ::grpc::Status MonikerReadDigitalU16(void* data, google::protobuf::Arena& arena, return x; }); response->set_samps_per_chan_read(samps_per_chan_read); - packedData.PackFrom(function_data->data); + packedData.PackFrom(*response); } else { @@ -953,17 +953,17 @@ ::grpc::Status MonikerReadDigitalU32(void* data, google::protobuf::Arena& arena, { MonikerReadDigitalU32Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto task = function_data->task; auto num_samps_per_chan = function_data->num_samps_per_chan; auto timeout = function_data->timeout; auto fill_mode = function_data->fill_mode; auto array_size_in_samps = function_data->array_size_in_samps; auto reserved = function_data->reserved; - - int32 samps_per_chan_read = {}; response->mutable_read_array()->Resize(array_size_in_samps, 0); - auto read_array = reinterpret_cast(response->mutable_read_array()->mutable_data()); + uInt32* read_array = reinterpret_cast(response->mutable_read_array()->mutable_data()); + int32 samps_per_chan_read {}; + auto status = library->ReadDigitalU32(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. @@ -979,7 +979,7 @@ ::grpc::Status MonikerReadDigitalU32(void* data, google::protobuf::Arena& arena, { response->set_status(status); response->set_samps_per_chan_read(samps_per_chan_read); - packedData.PackFrom(function_data->data); + packedData.PackFrom(*response); } else { @@ -993,11 +993,11 @@ ::grpc::Status MonikerWaitForNextSampleClock(void* data, google::protobuf::Arena { MonikerWaitForNextSampleClockData* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto task = function_data->task; auto timeout = function_data->timeout; - -bool32 is_late {}; + bool32 is_late {}; + auto status = library->WaitForNextSampleClock(task, timeout, &is_late); /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. @@ -1012,7 +1012,7 @@ bool32 is_late {}; { response->set_status(status); response->set_is_late(is_late); - packedData.PackFrom(function_data->data); + packedData.PackFrom(*response); } else { @@ -1026,32 +1026,24 @@ ::grpc::Status MonikerWriteAnalogF64(void* data, google::protobuf::Arena& arena, { MonikerWriteAnalogF64Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto task = function_data->task; auto num_samps_per_chan = function_data->num_samps_per_chan; auto auto_start = function_data->auto_start; auto timeout = function_data->timeout; auto data_layout = function_data->data_layout; auto reserved = function_data->reserved; + int32 samps_per_chan_written {}; - int32 samps_per_chan_written = {}; ArrayDoubleData arraydoubledata_message; - packedData.UnpackTo(&arraydoubledata_message); + packedData.UnpackTo(&arraydoubledata_message); // TODO: should unpack to function_data->mutable_request() auto data_array = arraydoubledata_message.value(); auto write_array = const_cast(arraydoubledata_message.value().data()); auto size = data_array.size(); auto status = library->WriteAnalogF64(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array, &samps_per_chan_written, reserved); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(samps_per_chan_written)); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_samps_per_chan_written(samps_per_chan_written); - */ + return ::grpc::Status::OK; } @@ -1059,24 +1051,18 @@ ::grpc::Status MonikerWriteAnalogScalarF64(void* data, google::protobuf::Arena& { MonikerWriteAnalogScalarF64Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto task = function_data->task; auto auto_start = function_data->auto_start; auto timeout = function_data->timeout; auto reserved = function_data->reserved; - + DoubleData doubledata_message; - packedData.UnpackTo(&doubledata_message); + packedData.UnpackTo(&doubledata_message); // TODO: should unpack to function_data->mutable_request() auto value = doubledata_message.value(); auto status = library->WriteAnalogScalarF64(task, auto_start, timeout, value, reserved); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - */ + return ::grpc::Status::OK; } @@ -1084,17 +1070,17 @@ ::grpc::Status MonikerWriteBinaryI16(void* data, google::protobuf::Arena& arena, { MonikerWriteBinaryI16Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto task = function_data->task; auto num_samps_per_chan = function_data->num_samps_per_chan; auto auto_start = function_data->auto_start; auto timeout = function_data->timeout; auto data_layout = function_data->data_layout; auto reserved = function_data->reserved; + int32 samps_per_chan_written {}; - int32 samps_per_chan_written = {}; ArrayI16Data arrayi16data_message; - packedData.UnpackTo(&arrayi16data_message); + packedData.UnpackTo(&arrayi16data_message); // TODO: should unpack to function_data->mutable_request() auto data_array = arrayi16data_message.value(); auto write_array = std::vector(); @@ -1113,15 +1099,7 @@ ::grpc::Status MonikerWriteBinaryI16(void* data, google::protobuf::Arena& arena, }); auto status = library->WriteBinaryI16(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array.data(), &samps_per_chan_written, reserved); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(samps_per_chan_written)); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_samps_per_chan_written(samps_per_chan_written); - */ + return ::grpc::Status::OK; } @@ -1129,32 +1107,24 @@ ::grpc::Status MonikerWriteBinaryI32(void* data, google::protobuf::Arena& arena, { MonikerWriteBinaryI32Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto task = function_data->task; auto num_samps_per_chan = function_data->num_samps_per_chan; auto auto_start = function_data->auto_start; auto timeout = function_data->timeout; auto data_layout = function_data->data_layout; auto reserved = function_data->reserved; + int32 samps_per_chan_written {}; - int32 samps_per_chan_written = {}; ArrayI32Data arrayi32data_message; - packedData.UnpackTo(&arrayi32data_message); + packedData.UnpackTo(&arrayi32data_message); // TODO: should unpack to function_data->mutable_request() auto data_array = arrayi32data_message.value(); auto write_array = reinterpret_cast(arrayi32data_message.value().data()); auto size = data_array.size(); auto status = library->WriteBinaryI32(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array, &samps_per_chan_written, reserved); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(samps_per_chan_written)); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_samps_per_chan_written(samps_per_chan_written); - */ + return ::grpc::Status::OK; } @@ -1162,17 +1132,17 @@ ::grpc::Status MonikerWriteBinaryU16(void* data, google::protobuf::Arena& arena, { MonikerWriteBinaryU16Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto task = function_data->task; auto num_samps_per_chan = function_data->num_samps_per_chan; auto auto_start = function_data->auto_start; auto timeout = function_data->timeout; auto data_layout = function_data->data_layout; auto reserved = function_data->reserved; + int32 samps_per_chan_written {}; - int32 samps_per_chan_written = {}; ArrayU16Data arrayu16data_message; - packedData.UnpackTo(&arrayu16data_message); + packedData.UnpackTo(&arrayu16data_message); // TODO: should unpack to function_data->mutable_request() auto data_array = arrayu16data_message.value(); auto write_array = std::vector(); @@ -1191,15 +1161,7 @@ ::grpc::Status MonikerWriteBinaryU16(void* data, google::protobuf::Arena& arena, }); auto status = library->WriteBinaryU16(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array.data(), &samps_per_chan_written, reserved); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(samps_per_chan_written)); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_samps_per_chan_written(samps_per_chan_written); - */ + return ::grpc::Status::OK; } @@ -1207,32 +1169,24 @@ ::grpc::Status MonikerWriteBinaryU32(void* data, google::protobuf::Arena& arena, { MonikerWriteBinaryU32Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto task = function_data->task; auto num_samps_per_chan = function_data->num_samps_per_chan; auto auto_start = function_data->auto_start; auto timeout = function_data->timeout; auto data_layout = function_data->data_layout; auto reserved = function_data->reserved; + int32 samps_per_chan_written {}; - int32 samps_per_chan_written = {}; ArrayU32Data arrayu32data_message; - packedData.UnpackTo(&arrayu32data_message); + packedData.UnpackTo(&arrayu32data_message); // TODO: should unpack to function_data->mutable_request() auto data_array = arrayu32data_message.value(); auto write_array = reinterpret_cast(arrayu32data_message.value().data()); auto size = data_array.size(); auto status = library->WriteBinaryU32(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array, &samps_per_chan_written, reserved); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(samps_per_chan_written)); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_samps_per_chan_written(samps_per_chan_written); - */ + return ::grpc::Status::OK; } @@ -1240,24 +1194,18 @@ ::grpc::Status MonikerWriteDigitalScalarU32(void* data, google::protobuf::Arena& { MonikerWriteDigitalScalarU32Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto task = function_data->task; auto auto_start = function_data->auto_start; auto timeout = function_data->timeout; auto reserved = function_data->reserved; - + U32Data u32data_message; - packedData.UnpackTo(&u32data_message); + packedData.UnpackTo(&u32data_message); // TODO: should unpack to function_data->mutable_request() auto value = u32data_message.value(); auto status = library->WriteDigitalScalarU32(task, auto_start, timeout, value, reserved); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - */ + return ::grpc::Status::OK; } @@ -1265,17 +1213,17 @@ ::grpc::Status MonikerWriteDigitalU16(void* data, google::protobuf::Arena& arena { MonikerWriteDigitalU16Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto task = function_data->task; auto num_samps_per_chan = function_data->num_samps_per_chan; auto auto_start = function_data->auto_start; auto timeout = function_data->timeout; auto data_layout = function_data->data_layout; auto reserved = function_data->reserved; + int32 samps_per_chan_written {}; - int32 samps_per_chan_written = {}; ArrayU16Data arrayu16data_message; - packedData.UnpackTo(&arrayu16data_message); + packedData.UnpackTo(&arrayu16data_message); // TODO: should unpack to function_data->mutable_request() auto data_array = arrayu16data_message.value(); auto write_array = std::vector(); @@ -1294,15 +1242,7 @@ ::grpc::Status MonikerWriteDigitalU16(void* data, google::protobuf::Arena& arena }); auto status = library->WriteDigitalU16(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array.data(), &samps_per_chan_written, reserved); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(samps_per_chan_written)); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_samps_per_chan_written(samps_per_chan_written); - */ + return ::grpc::Status::OK; } @@ -1310,32 +1250,24 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena { MonikerWriteDigitalU32Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto task = function_data->task; auto num_samps_per_chan = function_data->num_samps_per_chan; auto auto_start = function_data->auto_start; auto timeout = function_data->timeout; auto data_layout = function_data->data_layout; auto reserved = function_data->reserved; + int32 samps_per_chan_written {}; - int32 samps_per_chan_written = {}; ArrayU32Data arrayu32data_message; - packedData.UnpackTo(&arrayu32data_message); + packedData.UnpackTo(&arrayu32data_message); // TODO: should unpack to function_data->mutable_request() auto data_array = arrayu32data_message.value(); auto write_array = reinterpret_cast(arrayu32data_message.value().data()); auto size = data_array.size(); auto status = library->WriteDigitalU32(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array, &samps_per_chan_written, reserved); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(samps_per_chan_written)); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_samps_per_chan_written(samps_per_chan_written); - */ + return ::grpc::Status::OK; } @@ -14531,16 +14463,16 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena auto reserved = nullptr; auto data = std::make_unique(); - data->task = task; + data->task = task; data->num_samps_per_chan = num_samps_per_chan; data->timeout = timeout; data->fill_mode = fill_mode; data->array_size_in_samps = array_size_in_samps; data->reserved = reserved; data->library = std::shared_ptr(library_); - - data->data.mutable_response()->mutable_read_array()->Reserve(request->array_size_in_samps()); - data->data.mutable_response()->mutable_read_array()->Resize(request->array_size_in_samps(), 0); + + data->mutable_response()->mutable_read_array()->Reserve(request->array_size_in_samps()); + data->mutable_response()->mutable_read_array()->Resize(request->array_size_in_samps(), 0); auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadAnalogF64", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -14592,11 +14524,11 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena auto reserved = nullptr; auto data = std::make_unique(); - data->task = task; + data->task = task; data->timeout = timeout; data->reserved = reserved; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadAnalogScalarF64", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -14695,16 +14627,16 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena auto reserved = nullptr; auto data = std::make_unique(); - data->task = task; + data->task = task; data->num_samps_per_chan = num_samps_per_chan; data->timeout = timeout; data->fill_mode = fill_mode; data->array_size_in_samps = array_size_in_samps; data->reserved = reserved; data->library = std::shared_ptr(library_); - - data->data.mutable_response()->mutable_read_array()->Reserve(request->array_size_in_samps()); - data->data.mutable_response()->mutable_read_array()->Resize(request->array_size_in_samps(), 0); + + data->mutable_response()->mutable_read_array()->Reserve(request->array_size_in_samps()); + data->mutable_response()->mutable_read_array()->Resize(request->array_size_in_samps(), 0); auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadBinaryI16", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -14795,16 +14727,16 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena auto reserved = nullptr; auto data = std::make_unique(); - data->task = task; + data->task = task; data->num_samps_per_chan = num_samps_per_chan; data->timeout = timeout; data->fill_mode = fill_mode; data->array_size_in_samps = array_size_in_samps; data->reserved = reserved; data->library = std::shared_ptr(library_); - - data->data.mutable_response()->mutable_read_array()->Reserve(request->array_size_in_samps()); - data->data.mutable_response()->mutable_read_array()->Resize(request->array_size_in_samps(), 0); + + data->mutable_response()->mutable_read_array()->Reserve(request->array_size_in_samps()); + data->mutable_response()->mutable_read_array()->Resize(request->array_size_in_samps(), 0); auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadBinaryI32", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -14903,16 +14835,16 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena auto reserved = nullptr; auto data = std::make_unique(); - data->task = task; + data->task = task; data->num_samps_per_chan = num_samps_per_chan; data->timeout = timeout; data->fill_mode = fill_mode; data->array_size_in_samps = array_size_in_samps; data->reserved = reserved; data->library = std::shared_ptr(library_); - - data->data.mutable_response()->mutable_read_array()->Reserve(request->array_size_in_samps()); - data->data.mutable_response()->mutable_read_array()->Resize(request->array_size_in_samps(), 0); + + data->mutable_response()->mutable_read_array()->Reserve(request->array_size_in_samps()); + data->mutable_response()->mutable_read_array()->Resize(request->array_size_in_samps(), 0); auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadBinaryU16", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -15003,16 +14935,16 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena auto reserved = nullptr; auto data = std::make_unique(); - data->task = task; + data->task = task; data->num_samps_per_chan = num_samps_per_chan; data->timeout = timeout; data->fill_mode = fill_mode; data->array_size_in_samps = array_size_in_samps; data->reserved = reserved; data->library = std::shared_ptr(library_); - - data->data.mutable_response()->mutable_read_array()->Reserve(request->array_size_in_samps()); - data->data.mutable_response()->mutable_read_array()->Resize(request->array_size_in_samps(), 0); + + data->mutable_response()->mutable_read_array()->Reserve(request->array_size_in_samps()); + data->mutable_response()->mutable_read_array()->Resize(request->array_size_in_samps(), 0); auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadBinaryU32", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -15071,15 +15003,15 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena auto reserved = nullptr; auto data = std::make_unique(); - data->task = task; + data->task = task; data->num_samps_per_chan = num_samps_per_chan; data->timeout = timeout; data->array_size_in_samps = array_size_in_samps; data->reserved = reserved; data->library = std::shared_ptr(library_); - - data->data.mutable_response()->mutable_read_array()->Reserve(request->array_size_in_samps()); - data->data.mutable_response()->mutable_read_array()->Resize(request->array_size_in_samps(), 0); + + data->mutable_response()->mutable_read_array()->Reserve(request->array_size_in_samps()); + data->mutable_response()->mutable_read_array()->Resize(request->array_size_in_samps(), 0); auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCounterF64", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -15170,16 +15102,16 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena auto reserved = nullptr; auto data = std::make_unique(); - data->task = task; + data->task = task; data->num_samps_per_chan = num_samps_per_chan; data->timeout = timeout; data->fill_mode = fill_mode; data->array_size_in_samps = array_size_in_samps; data->reserved = reserved; data->library = std::shared_ptr(library_); - - data->data.mutable_response()->mutable_read_array()->Reserve(request->array_size_in_samps()); - data->data.mutable_response()->mutable_read_array()->Resize(request->array_size_in_samps(), 0); + + data->mutable_response()->mutable_read_array()->Reserve(request->array_size_in_samps()); + data->mutable_response()->mutable_read_array()->Resize(request->array_size_in_samps(), 0); auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCounterF64Ex", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -15231,11 +15163,11 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena auto reserved = nullptr; auto data = std::make_unique(); - data->task = task; + data->task = task; data->timeout = timeout; data->reserved = reserved; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCounterScalarF64", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -15287,11 +15219,11 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena auto reserved = nullptr; auto data = std::make_unique(); - data->task = task; + data->task = task; data->timeout = timeout; data->reserved = reserved; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCounterScalarU32", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -15350,15 +15282,15 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena auto reserved = nullptr; auto data = std::make_unique(); - data->task = task; + data->task = task; data->num_samps_per_chan = num_samps_per_chan; data->timeout = timeout; data->array_size_in_samps = array_size_in_samps; data->reserved = reserved; data->library = std::shared_ptr(library_); - - data->data.mutable_response()->mutable_read_array()->Reserve(request->array_size_in_samps()); - data->data.mutable_response()->mutable_read_array()->Resize(request->array_size_in_samps(), 0); + + data->mutable_response()->mutable_read_array()->Reserve(request->array_size_in_samps()); + data->mutable_response()->mutable_read_array()->Resize(request->array_size_in_samps(), 0); auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCounterU32", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -15449,16 +15381,16 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena auto reserved = nullptr; auto data = std::make_unique(); - data->task = task; + data->task = task; data->num_samps_per_chan = num_samps_per_chan; data->timeout = timeout; data->fill_mode = fill_mode; data->array_size_in_samps = array_size_in_samps; data->reserved = reserved; data->library = std::shared_ptr(library_); - - data->data.mutable_response()->mutable_read_array()->Reserve(request->array_size_in_samps()); - data->data.mutable_response()->mutable_read_array()->Resize(request->array_size_in_samps(), 0); + + data->mutable_response()->mutable_read_array()->Reserve(request->array_size_in_samps()); + data->mutable_response()->mutable_read_array()->Resize(request->array_size_in_samps(), 0); auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCounterU32Ex", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -15790,11 +15722,11 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena auto reserved = nullptr; auto data = std::make_unique(); - data->task = task; + data->task = task; data->timeout = timeout; data->reserved = reserved; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadDigitalScalarU32", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -15893,16 +15825,16 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena auto reserved = nullptr; auto data = std::make_unique(); - data->task = task; + data->task = task; data->num_samps_per_chan = num_samps_per_chan; data->timeout = timeout; data->fill_mode = fill_mode; data->array_size_in_samps = array_size_in_samps; data->reserved = reserved; data->library = std::shared_ptr(library_); - - data->data.mutable_response()->mutable_read_array()->Reserve(request->array_size_in_samps()); - data->data.mutable_response()->mutable_read_array()->Resize(request->array_size_in_samps(), 0); + + data->mutable_response()->mutable_read_array()->Reserve(request->array_size_in_samps()); + data->mutable_response()->mutable_read_array()->Resize(request->array_size_in_samps(), 0); auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadDigitalU16", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -15993,16 +15925,16 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena auto reserved = nullptr; auto data = std::make_unique(); - data->task = task; + data->task = task; data->num_samps_per_chan = num_samps_per_chan; data->timeout = timeout; data->fill_mode = fill_mode; data->array_size_in_samps = array_size_in_samps; data->reserved = reserved; data->library = std::shared_ptr(library_); - - data->data.mutable_response()->mutable_read_array()->Reserve(request->array_size_in_samps()); - data->data.mutable_response()->mutable_read_array()->Resize(request->array_size_in_samps(), 0); + + data->mutable_response()->mutable_read_array()->Reserve(request->array_size_in_samps()); + data->mutable_response()->mutable_read_array()->Resize(request->array_size_in_samps(), 0); auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadDigitalU32", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -20530,10 +20462,10 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena float64 timeout = request->timeout(); auto data = std::make_unique(); - data->task = task; + data->task = task; data->timeout = timeout; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWaitForNextSampleClock", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -20687,14 +20619,14 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena auto reserved = nullptr; auto data = std::make_unique(); - data->task = task; + data->task = task; data->num_samps_per_chan = num_samps_per_chan; data->auto_start = auto_start; data->timeout = timeout; data->data_layout = data_layout; data->reserved = reserved; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteAnalogF64", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -20747,12 +20679,12 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena auto reserved = nullptr; auto data = std::make_unique(); - data->task = task; + data->task = task; data->auto_start = auto_start; data->timeout = timeout; data->reserved = reserved; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteAnalogScalarF64", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -20859,14 +20791,14 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena auto reserved = nullptr; auto data = std::make_unique(); - data->task = task; + data->task = task; data->num_samps_per_chan = num_samps_per_chan; data->auto_start = auto_start; data->timeout = timeout; data->data_layout = data_layout; data->reserved = reserved; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteBinaryI16", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -20956,14 +20888,14 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena auto reserved = nullptr; auto data = std::make_unique(); - data->task = task; + data->task = task; data->num_samps_per_chan = num_samps_per_chan; data->auto_start = auto_start; data->timeout = timeout; data->data_layout = data_layout; data->reserved = reserved; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteBinaryI32", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -21070,14 +21002,14 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena auto reserved = nullptr; auto data = std::make_unique(); - data->task = task; + data->task = task; data->num_samps_per_chan = num_samps_per_chan; data->auto_start = auto_start; data->timeout = timeout; data->data_layout = data_layout; data->reserved = reserved; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteBinaryU16", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -21167,14 +21099,14 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena auto reserved = nullptr; auto data = std::make_unique(); - data->task = task; + data->task = task; data->num_samps_per_chan = num_samps_per_chan; data->auto_start = auto_start; data->timeout = timeout; data->data_layout = data_layout; data->reserved = reserved; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteBinaryU32", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -21495,12 +21427,12 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena auto reserved = nullptr; auto data = std::make_unique(); - data->task = task; + data->task = task; data->auto_start = auto_start; data->timeout = timeout; data->reserved = reserved; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteDigitalScalarU32", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -21607,14 +21539,14 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena auto reserved = nullptr; auto data = std::make_unique(); - data->task = task; + data->task = task; data->num_samps_per_chan = num_samps_per_chan; data->auto_start = auto_start; data->timeout = timeout; data->data_layout = data_layout; data->reserved = reserved; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteDigitalU16", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -21704,14 +21636,14 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena auto reserved = nullptr; auto data = std::make_unique(); - data->task = task; + data->task = task; data->num_samps_per_chan = num_samps_per_chan; data->auto_start = auto_start; data->timeout = timeout; data->data_layout = data_layout; data->reserved = reserved; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteDigitalU32", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); diff --git a/generated/nifpga/nifpga_service.cpp b/generated/nifpga/nifpga_service.cpp index cff100e2a..c3a24ef77 100644 --- a/generated/nifpga/nifpga_service.cpp +++ b/generated/nifpga/nifpga_service.cpp @@ -479,12 +479,12 @@ ::grpc::Status MonikerReadArrayBool(void* data, google::protobuf::Arena& arena, { MonikerReadArrayBoolData* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto session = function_data->session; auto indicator = function_data->indicator; auto size = function_data->size; - std::vector array(size, NiFpga_Bool()); + auto status = library->ReadArrayBool(session, indicator, array.data(), size); /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. @@ -499,7 +499,7 @@ ::grpc::Status MonikerReadArrayBool(void* data, google::protobuf::Arena& arena, { response->set_status(status); convert_to_grpc(array, response->mutable_array()); - packedData.PackFrom(function_data->data); + packedData.PackFrom(*response); } else { @@ -513,13 +513,13 @@ ::grpc::Status MonikerReadArrayDbl(void* data, google::protobuf::Arena& arena, g { MonikerReadArrayDblData* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto session = function_data->session; auto indicator = function_data->indicator; auto size = function_data->size; - response->mutable_array()->Resize(size, 0); - auto array = response->mutable_array()->mutable_data(); + double* array = response->mutable_array()->mutable_data(); + auto status = library->ReadArrayDbl(session, indicator, array, size); /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. @@ -532,7 +532,7 @@ ::grpc::Status MonikerReadArrayDbl(void* data, google::protobuf::Arena& arena, g if (status >= 0) { response->set_status(status); - packedData.PackFrom(function_data->data); + packedData.PackFrom(*response); } else { @@ -546,12 +546,12 @@ ::grpc::Status MonikerReadArrayI16(void* data, google::protobuf::Arena& arena, g { MonikerReadArrayI16Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto session = function_data->session; auto indicator = function_data->indicator; auto size = function_data->size; - std::vector array(size); + auto status = library->ReadArrayI16(session, indicator, array.data(), size); /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. @@ -582,7 +582,7 @@ ::grpc::Status MonikerReadArrayI16(void* data, google::protobuf::Arena& arena, g [&](auto x) { return x; }); - packedData.PackFrom(function_data->data); + packedData.PackFrom(*response); } else { @@ -596,13 +596,13 @@ ::grpc::Status MonikerReadArrayI32(void* data, google::protobuf::Arena& arena, g { MonikerReadArrayI32Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto session = function_data->session; auto indicator = function_data->indicator; auto size = function_data->size; - response->mutable_array()->Resize(size, 0); - auto array = response->mutable_array()->mutable_data(); + int32_t* array = response->mutable_array()->mutable_data(); + auto status = library->ReadArrayI32(session, indicator, array, size); /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. @@ -615,7 +615,7 @@ ::grpc::Status MonikerReadArrayI32(void* data, google::protobuf::Arena& arena, g if (status >= 0) { response->set_status(status); - packedData.PackFrom(function_data->data); + packedData.PackFrom(*response); } else { @@ -629,13 +629,13 @@ ::grpc::Status MonikerReadArrayI64(void* data, google::protobuf::Arena& arena, g { MonikerReadArrayI64Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto session = function_data->session; auto indicator = function_data->indicator; auto size = function_data->size; - response->mutable_array()->Resize(size, 0); - auto array = response->mutable_array()->mutable_data(); + int64_t* array = response->mutable_array()->mutable_data(); + auto status = library->ReadArrayI64(session, indicator, array, size); /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. @@ -648,7 +648,7 @@ ::grpc::Status MonikerReadArrayI64(void* data, google::protobuf::Arena& arena, g if (status >= 0) { response->set_status(status); - packedData.PackFrom(function_data->data); + packedData.PackFrom(*response); } else { @@ -662,12 +662,12 @@ ::grpc::Status MonikerReadArrayI8(void* data, google::protobuf::Arena& arena, go { MonikerReadArrayI8Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto session = function_data->session; auto indicator = function_data->indicator; auto size = function_data->size; - std::vector array(size); + auto status = library->ReadArrayI8(session, indicator, array.data(), size); /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. @@ -698,7 +698,7 @@ ::grpc::Status MonikerReadArrayI8(void* data, google::protobuf::Arena& arena, go [&](auto x) { return x; }); - packedData.PackFrom(function_data->data); + packedData.PackFrom(*response); } else { @@ -712,13 +712,13 @@ ::grpc::Status MonikerReadArraySgl(void* data, google::protobuf::Arena& arena, g { MonikerReadArraySglData* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto session = function_data->session; auto indicator = function_data->indicator; auto size = function_data->size; - response->mutable_array()->Resize(size, 0); - auto array = response->mutable_array()->mutable_data(); + float* array = response->mutable_array()->mutable_data(); + auto status = library->ReadArraySgl(session, indicator, array, size); /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. @@ -731,7 +731,7 @@ ::grpc::Status MonikerReadArraySgl(void* data, google::protobuf::Arena& arena, g if (status >= 0) { response->set_status(status); - packedData.PackFrom(function_data->data); + packedData.PackFrom(*response); } else { @@ -745,12 +745,12 @@ ::grpc::Status MonikerReadArrayU16(void* data, google::protobuf::Arena& arena, g { MonikerReadArrayU16Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto session = function_data->session; auto indicator = function_data->indicator; auto size = function_data->size; - std::vector array(size); + auto status = library->ReadArrayU16(session, indicator, array.data(), size); /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. @@ -781,7 +781,7 @@ ::grpc::Status MonikerReadArrayU16(void* data, google::protobuf::Arena& arena, g [&](auto x) { return x; }); - packedData.PackFrom(function_data->data); + packedData.PackFrom(*response); } else { @@ -795,13 +795,13 @@ ::grpc::Status MonikerReadArrayU32(void* data, google::protobuf::Arena& arena, g { MonikerReadArrayU32Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto session = function_data->session; auto indicator = function_data->indicator; auto size = function_data->size; - response->mutable_array()->Resize(size, 0); - auto array = response->mutable_array()->mutable_data(); + uint32_t* array = response->mutable_array()->mutable_data(); + auto status = library->ReadArrayU32(session, indicator, array, size); /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. @@ -814,7 +814,7 @@ ::grpc::Status MonikerReadArrayU32(void* data, google::protobuf::Arena& arena, g if (status >= 0) { response->set_status(status); - packedData.PackFrom(function_data->data); + packedData.PackFrom(*response); } else { @@ -828,13 +828,13 @@ ::grpc::Status MonikerReadArrayU64(void* data, google::protobuf::Arena& arena, g { MonikerReadArrayU64Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto session = function_data->session; auto indicator = function_data->indicator; auto size = function_data->size; - response->mutable_array()->Resize(size, 0); - auto array = response->mutable_array()->mutable_data(); + uint64_t* array = response->mutable_array()->mutable_data(); + auto status = library->ReadArrayU64(session, indicator, array, size); /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. @@ -847,7 +847,7 @@ ::grpc::Status MonikerReadArrayU64(void* data, google::protobuf::Arena& arena, g if (status >= 0) { response->set_status(status); - packedData.PackFrom(function_data->data); + packedData.PackFrom(*response); } else { @@ -861,12 +861,12 @@ ::grpc::Status MonikerReadArrayU8(void* data, google::protobuf::Arena& arena, go { MonikerReadArrayU8Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto session = function_data->session; auto indicator = function_data->indicator; auto size = function_data->size; - std::vector array(size); + auto status = library->ReadArrayU8(session, indicator, array.data(), size); /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. @@ -897,7 +897,7 @@ ::grpc::Status MonikerReadArrayU8(void* data, google::protobuf::Arena& arena, go [&](auto x) { return x; }); - packedData.PackFrom(function_data->data); + packedData.PackFrom(*response); } else { @@ -911,11 +911,11 @@ ::grpc::Status MonikerReadBool(void* data, google::protobuf::Arena& arena, googl { MonikerReadBoolData* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto session = function_data->session; auto indicator = function_data->indicator; - -NiFpga_Bool value {}; + NiFpga_Bool value {}; + auto status = library->ReadBool(session, indicator, &value); /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. @@ -930,7 +930,7 @@ NiFpga_Bool value {}; { response->set_status(status); response->set_value(value); - packedData.PackFrom(function_data->data); + packedData.PackFrom(*response); } else { @@ -944,11 +944,11 @@ ::grpc::Status MonikerReadDbl(void* data, google::protobuf::Arena& arena, google { MonikerReadDblData* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto session = function_data->session; auto indicator = function_data->indicator; - -double value {}; + double value {}; + auto status = library->ReadDbl(session, indicator, &value); /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. @@ -963,7 +963,7 @@ double value {}; { response->set_status(status); response->set_value(value); - packedData.PackFrom(function_data->data); + packedData.PackFrom(*response); } else { @@ -977,11 +977,11 @@ ::grpc::Status MonikerReadI16(void* data, google::protobuf::Arena& arena, google { MonikerReadI16Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto session = function_data->session; auto indicator = function_data->indicator; - -int16_t value {}; + int16_t value {}; + auto status = library->ReadI16(session, indicator, &value); /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. @@ -996,7 +996,7 @@ int16_t value {}; { response->set_status(status); response->set_value(value); - packedData.PackFrom(function_data->data); + packedData.PackFrom(*response); } else { @@ -1010,11 +1010,11 @@ ::grpc::Status MonikerReadI32(void* data, google::protobuf::Arena& arena, google { MonikerReadI32Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto session = function_data->session; auto indicator = function_data->indicator; - -int32_t value {}; + int32_t value {}; + auto status = library->ReadI32(session, indicator, &value); /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. @@ -1029,7 +1029,7 @@ int32_t value {}; { response->set_status(status); response->set_value(value); - packedData.PackFrom(function_data->data); + packedData.PackFrom(*response); } else { @@ -1043,11 +1043,11 @@ ::grpc::Status MonikerReadI64(void* data, google::protobuf::Arena& arena, google { MonikerReadI64Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto session = function_data->session; auto indicator = function_data->indicator; - -int64_t value {}; + int64_t value {}; + auto status = library->ReadI64(session, indicator, &value); /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. @@ -1062,7 +1062,7 @@ int64_t value {}; { response->set_status(status); response->set_value(value); - packedData.PackFrom(function_data->data); + packedData.PackFrom(*response); } else { @@ -1076,11 +1076,11 @@ ::grpc::Status MonikerReadI8(void* data, google::protobuf::Arena& arena, google: { MonikerReadI8Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto session = function_data->session; auto indicator = function_data->indicator; - -int8_t value {}; + int8_t value {}; + auto status = library->ReadI8(session, indicator, &value); /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. @@ -1095,7 +1095,7 @@ int8_t value {}; { response->set_status(status); response->set_value(value); - packedData.PackFrom(function_data->data); + packedData.PackFrom(*response); } else { @@ -1109,11 +1109,11 @@ ::grpc::Status MonikerReadSgl(void* data, google::protobuf::Arena& arena, google { MonikerReadSglData* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto session = function_data->session; auto indicator = function_data->indicator; - -float value {}; + float value {}; + auto status = library->ReadSgl(session, indicator, &value); /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. @@ -1128,7 +1128,7 @@ float value {}; { response->set_status(status); response->set_value(value); - packedData.PackFrom(function_data->data); + packedData.PackFrom(*response); } else { @@ -1142,11 +1142,11 @@ ::grpc::Status MonikerReadU16(void* data, google::protobuf::Arena& arena, google { MonikerReadU16Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto session = function_data->session; auto indicator = function_data->indicator; - -uint16_t value {}; + uint16_t value {}; + auto status = library->ReadU16(session, indicator, &value); /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. @@ -1161,7 +1161,7 @@ uint16_t value {}; { response->set_status(status); response->set_value(value); - packedData.PackFrom(function_data->data); + packedData.PackFrom(*response); } else { @@ -1175,11 +1175,11 @@ ::grpc::Status MonikerReadU32(void* data, google::protobuf::Arena& arena, google { MonikerReadU32Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto session = function_data->session; auto indicator = function_data->indicator; - -uint32_t value {}; + uint32_t value {}; + auto status = library->ReadU32(session, indicator, &value); /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. @@ -1194,7 +1194,7 @@ uint32_t value {}; { response->set_status(status); response->set_value(value); - packedData.PackFrom(function_data->data); + packedData.PackFrom(*response); } else { @@ -1208,11 +1208,11 @@ ::grpc::Status MonikerReadU64(void* data, google::protobuf::Arena& arena, google { MonikerReadU64Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto session = function_data->session; auto indicator = function_data->indicator; - -uint64_t value {}; + uint64_t value {}; + auto status = library->ReadU64(session, indicator, &value); /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. @@ -1227,7 +1227,7 @@ uint64_t value {}; { response->set_status(status); response->set_value(value); - packedData.PackFrom(function_data->data); + packedData.PackFrom(*response); } else { @@ -1241,11 +1241,11 @@ ::grpc::Status MonikerReadU8(void* data, google::protobuf::Arena& arena, google: { MonikerReadU8Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto session = function_data->session; auto indicator = function_data->indicator; - -uint8_t value {}; + uint8_t value {}; + auto status = library->ReadU8(session, indicator, &value); /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. @@ -1260,7 +1260,7 @@ uint8_t value {}; { response->set_status(status); response->set_value(value); - packedData.PackFrom(function_data->data); + packedData.PackFrom(*response); } else { @@ -1274,25 +1274,19 @@ ::grpc::Status MonikerWriteArrayBool(void* data, google::protobuf::Arena& arena, { MonikerWriteArrayBoolData* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto session = function_data->session; auto control = function_data->control; - + ArrayBoolData arraybooldata_message; - packedData.UnpackTo(&arraybooldata_message); + packedData.UnpackTo(&arraybooldata_message); // TODO: should unpack to function_data->mutable_request() auto data_array = arraybooldata_message.value(); std::vector array(data_array.begin(), data_array.end()); auto size = data_array.size(); auto status = library->WriteArrayBool(session, control, array.data(), size); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - */ + return ::grpc::Status::OK; } @@ -1300,25 +1294,19 @@ ::grpc::Status MonikerWriteArrayDbl(void* data, google::protobuf::Arena& arena, { MonikerWriteArrayDblData* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto session = function_data->session; auto control = function_data->control; - + ArrayDoubleData arraydoubledata_message; - packedData.UnpackTo(&arraydoubledata_message); + packedData.UnpackTo(&arraydoubledata_message); // TODO: should unpack to function_data->mutable_request() auto data_array = arraydoubledata_message.value(); auto array = const_cast(arraydoubledata_message.value().data()); auto size = data_array.size(); auto status = library->WriteArrayDbl(session, control, array, size); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - */ + return ::grpc::Status::OK; } @@ -1326,12 +1314,12 @@ ::grpc::Status MonikerWriteArrayI16(void* data, google::protobuf::Arena& arena, { MonikerWriteArrayI16Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto session = function_data->session; auto control = function_data->control; - + ArrayI32Data arrayi32data_message; - packedData.UnpackTo(&arrayi32data_message); + packedData.UnpackTo(&arrayi32data_message); // TODO: should unpack to function_data->mutable_request() auto data_array = arrayi32data_message.value(); auto array = std::vector(); @@ -1350,13 +1338,7 @@ ::grpc::Status MonikerWriteArrayI16(void* data, google::protobuf::Arena& arena, }); auto status = library->WriteArrayI16(session, control, array.data(), size); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - */ + return ::grpc::Status::OK; } @@ -1364,25 +1346,19 @@ ::grpc::Status MonikerWriteArrayI32(void* data, google::protobuf::Arena& arena, { MonikerWriteArrayI32Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto session = function_data->session; auto control = function_data->control; - + ArrayI32Data arrayi32data_message; - packedData.UnpackTo(&arrayi32data_message); + packedData.UnpackTo(&arrayi32data_message); // TODO: should unpack to function_data->mutable_request() auto data_array = arrayi32data_message.value(); auto array = const_cast(arrayi32data_message.value().data()); auto size = data_array.size(); auto status = library->WriteArrayI32(session, control, array, size); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - */ + return ::grpc::Status::OK; } @@ -1390,25 +1366,19 @@ ::grpc::Status MonikerWriteArrayI64(void* data, google::protobuf::Arena& arena, { MonikerWriteArrayI64Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto session = function_data->session; auto control = function_data->control; - + ArrayI64Data arrayi64data_message; - packedData.UnpackTo(&arrayi64data_message); + packedData.UnpackTo(&arrayi64data_message); // TODO: should unpack to function_data->mutable_request() auto data_array = arrayi64data_message.value(); auto array = const_cast(arrayi64data_message.value().data()); auto size = data_array.size(); auto status = library->WriteArrayI64(session, control, array, size); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - */ + return ::grpc::Status::OK; } @@ -1416,12 +1386,12 @@ ::grpc::Status MonikerWriteArrayI8(void* data, google::protobuf::Arena& arena, g { MonikerWriteArrayI8Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto session = function_data->session; auto control = function_data->control; - + ArrayI32Data arrayi32data_message; - packedData.UnpackTo(&arrayi32data_message); + packedData.UnpackTo(&arrayi32data_message); // TODO: should unpack to function_data->mutable_request() auto data_array = arrayi32data_message.value(); auto array = std::vector(); @@ -1440,13 +1410,7 @@ ::grpc::Status MonikerWriteArrayI8(void* data, google::protobuf::Arena& arena, g }); auto status = library->WriteArrayI8(session, control, array.data(), size); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - */ + return ::grpc::Status::OK; } @@ -1454,25 +1418,19 @@ ::grpc::Status MonikerWriteArraySgl(void* data, google::protobuf::Arena& arena, { MonikerWriteArraySglData* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto session = function_data->session; auto control = function_data->control; - + ArrayFloatData arrayfloatdata_message; - packedData.UnpackTo(&arrayfloatdata_message); + packedData.UnpackTo(&arrayfloatdata_message); // TODO: should unpack to function_data->mutable_request() auto data_array = arrayfloatdata_message.value(); auto array = const_cast(arrayfloatdata_message.value().data()); auto size = data_array.size(); auto status = library->WriteArraySgl(session, control, array, size); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - */ + return ::grpc::Status::OK; } @@ -1480,12 +1438,12 @@ ::grpc::Status MonikerWriteArrayU16(void* data, google::protobuf::Arena& arena, { MonikerWriteArrayU16Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto session = function_data->session; auto control = function_data->control; - + ArrayU32Data arrayu32data_message; - packedData.UnpackTo(&arrayu32data_message); + packedData.UnpackTo(&arrayu32data_message); // TODO: should unpack to function_data->mutable_request() auto data_array = arrayu32data_message.value(); auto array = std::vector(); @@ -1504,13 +1462,7 @@ ::grpc::Status MonikerWriteArrayU16(void* data, google::protobuf::Arena& arena, }); auto status = library->WriteArrayU16(session, control, array.data(), size); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - */ + return ::grpc::Status::OK; } @@ -1518,25 +1470,19 @@ ::grpc::Status MonikerWriteArrayU32(void* data, google::protobuf::Arena& arena, { MonikerWriteArrayU32Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto session = function_data->session; auto control = function_data->control; - + ArrayU32Data arrayu32data_message; - packedData.UnpackTo(&arrayu32data_message); + packedData.UnpackTo(&arrayu32data_message); // TODO: should unpack to function_data->mutable_request() auto data_array = arrayu32data_message.value(); auto array = const_cast(arrayu32data_message.value().data()); auto size = data_array.size(); auto status = library->WriteArrayU32(session, control, array, size); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - */ + return ::grpc::Status::OK; } @@ -1544,25 +1490,19 @@ ::grpc::Status MonikerWriteArrayU64(void* data, google::protobuf::Arena& arena, { MonikerWriteArrayU64Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto session = function_data->session; auto control = function_data->control; - + ArrayU64Data arrayu64data_message; - packedData.UnpackTo(&arrayu64data_message); + packedData.UnpackTo(&arrayu64data_message); // TODO: should unpack to function_data->mutable_request() auto data_array = arrayu64data_message.value(); auto array = const_cast(arrayu64data_message.value().data()); auto size = data_array.size(); auto status = library->WriteArrayU64(session, control, array, size); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - */ + return ::grpc::Status::OK; } @@ -1570,12 +1510,12 @@ ::grpc::Status MonikerWriteArrayU8(void* data, google::protobuf::Arena& arena, g { MonikerWriteArrayU8Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto session = function_data->session; auto control = function_data->control; - + ArrayU32Data arrayu32data_message; - packedData.UnpackTo(&arrayu32data_message); + packedData.UnpackTo(&arrayu32data_message); // TODO: should unpack to function_data->mutable_request() auto data_array = arrayu32data_message.value(); auto array = std::vector(); @@ -1594,13 +1534,7 @@ ::grpc::Status MonikerWriteArrayU8(void* data, google::protobuf::Arena& arena, g }); auto status = library->WriteArrayU8(session, control, array.data(), size); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - */ + return ::grpc::Status::OK; } @@ -1608,22 +1542,16 @@ ::grpc::Status MonikerWriteBool(void* data, google::protobuf::Arena& arena, goog { MonikerWriteBoolData* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto session = function_data->session; auto control = function_data->control; - + BoolData booldata_message; - packedData.UnpackTo(&booldata_message); + packedData.UnpackTo(&booldata_message); // TODO: should unpack to function_data->mutable_request() auto value = booldata_message.value(); auto status = library->WriteBool(session, control, value); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - */ + return ::grpc::Status::OK; } @@ -1631,22 +1559,16 @@ ::grpc::Status MonikerWriteDbl(void* data, google::protobuf::Arena& arena, googl { MonikerWriteDblData* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto session = function_data->session; auto control = function_data->control; - + DoubleData doubledata_message; - packedData.UnpackTo(&doubledata_message); + packedData.UnpackTo(&doubledata_message); // TODO: should unpack to function_data->mutable_request() auto value = doubledata_message.value(); auto status = library->WriteDbl(session, control, value); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - */ + return ::grpc::Status::OK; } @@ -1654,12 +1576,12 @@ ::grpc::Status MonikerWriteI16(void* data, google::protobuf::Arena& arena, googl { MonikerWriteI16Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto session = function_data->session; auto control = function_data->control; - + I32Data i32data_message; - packedData.UnpackTo(&i32data_message); + packedData.UnpackTo(&i32data_message); // TODO: should unpack to function_data->mutable_request() auto value = i32data_message.value(); if (value < std::numeric_limits::min() || value > std::numeric_limits::max()) { std::string message("value " + std::to_string(value) + " doesn't fit in datatype int16_t"); @@ -1667,13 +1589,7 @@ ::grpc::Status MonikerWriteI16(void* data, google::protobuf::Arena& arena, googl } auto status = library->WriteI16(session, control, value); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - */ + return ::grpc::Status::OK; } @@ -1681,22 +1597,16 @@ ::grpc::Status MonikerWriteI32(void* data, google::protobuf::Arena& arena, googl { MonikerWriteI32Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto session = function_data->session; auto control = function_data->control; - + I32Data i32data_message; - packedData.UnpackTo(&i32data_message); + packedData.UnpackTo(&i32data_message); // TODO: should unpack to function_data->mutable_request() auto value = i32data_message.value(); auto status = library->WriteI32(session, control, value); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - */ + return ::grpc::Status::OK; } @@ -1704,22 +1614,16 @@ ::grpc::Status MonikerWriteI64(void* data, google::protobuf::Arena& arena, googl { MonikerWriteI64Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto session = function_data->session; auto control = function_data->control; - + I64Data i64data_message; - packedData.UnpackTo(&i64data_message); + packedData.UnpackTo(&i64data_message); // TODO: should unpack to function_data->mutable_request() auto value = i64data_message.value(); auto status = library->WriteI64(session, control, value); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - */ + return ::grpc::Status::OK; } @@ -1727,12 +1631,12 @@ ::grpc::Status MonikerWriteI8(void* data, google::protobuf::Arena& arena, google { MonikerWriteI8Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto session = function_data->session; auto control = function_data->control; - + I32Data i32data_message; - packedData.UnpackTo(&i32data_message); + packedData.UnpackTo(&i32data_message); // TODO: should unpack to function_data->mutable_request() auto value = i32data_message.value(); if (value < std::numeric_limits::min() || value > std::numeric_limits::max()) { std::string message("value " + std::to_string(value) + " doesn't fit in datatype int8_t"); @@ -1740,13 +1644,7 @@ ::grpc::Status MonikerWriteI8(void* data, google::protobuf::Arena& arena, google } auto status = library->WriteI8(session, control, value); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - */ + return ::grpc::Status::OK; } @@ -1754,22 +1652,16 @@ ::grpc::Status MonikerWriteSgl(void* data, google::protobuf::Arena& arena, googl { MonikerWriteSglData* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto session = function_data->session; auto control = function_data->control; - + FloatData floatdata_message; - packedData.UnpackTo(&floatdata_message); + packedData.UnpackTo(&floatdata_message); // TODO: should unpack to function_data->mutable_request() auto value = floatdata_message.value(); auto status = library->WriteSgl(session, control, value); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - */ + return ::grpc::Status::OK; } @@ -1777,12 +1669,12 @@ ::grpc::Status MonikerWriteU16(void* data, google::protobuf::Arena& arena, googl { MonikerWriteU16Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto session = function_data->session; auto control = function_data->control; - + U32Data u32data_message; - packedData.UnpackTo(&u32data_message); + packedData.UnpackTo(&u32data_message); // TODO: should unpack to function_data->mutable_request() auto value = u32data_message.value(); if (value < std::numeric_limits::min() || value > std::numeric_limits::max()) { std::string message("value " + std::to_string(value) + " doesn't fit in datatype uint16_t"); @@ -1790,13 +1682,7 @@ ::grpc::Status MonikerWriteU16(void* data, google::protobuf::Arena& arena, googl } auto status = library->WriteU16(session, control, value); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - */ + return ::grpc::Status::OK; } @@ -1804,22 +1690,16 @@ ::grpc::Status MonikerWriteU32(void* data, google::protobuf::Arena& arena, googl { MonikerWriteU32Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto session = function_data->session; auto control = function_data->control; - + U32Data u32data_message; - packedData.UnpackTo(&u32data_message); + packedData.UnpackTo(&u32data_message); // TODO: should unpack to function_data->mutable_request() auto value = u32data_message.value(); auto status = library->WriteU32(session, control, value); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - */ + return ::grpc::Status::OK; } @@ -1827,22 +1707,16 @@ ::grpc::Status MonikerWriteU64(void* data, google::protobuf::Arena& arena, googl { MonikerWriteU64Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto session = function_data->session; auto control = function_data->control; - + U64Data u64data_message; - packedData.UnpackTo(&u64data_message); + packedData.UnpackTo(&u64data_message); // TODO: should unpack to function_data->mutable_request() auto value = u64data_message.value(); auto status = library->WriteU64(session, control, value); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - */ + return ::grpc::Status::OK; } @@ -1850,12 +1724,12 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google { MonikerWriteU8Data* function_data = static_cast(data); auto library = function_data->library; - auto response = function_data->data.mutable_response(); + auto response = &function_data->response; auto session = function_data->session; auto control = function_data->control; - + U32Data u32data_message; - packedData.UnpackTo(&u32data_message); + packedData.UnpackTo(&u32data_message); // TODO: should unpack to function_data->mutable_request() auto value = u32data_message.value(); if (value < std::numeric_limits::min() || value > std::numeric_limits::max()) { std::string message("value " + std::to_string(value) + " doesn't fit in datatype uint8_t"); @@ -1863,13 +1737,7 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google } auto status = library->WriteU8(session, control, value); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - */ + return ::grpc::Status::OK; } @@ -2419,13 +2287,13 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google size_t size = request->size(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->indicator = indicator; data->size = size; data->library = std::shared_ptr(library_); - - data->data.mutable_response()->mutable_array()->Reserve(request->size()); - data->data.mutable_response()->mutable_array()->Resize(request->size(), 0); + + data->mutable_response()->mutable_array()->Reserve(request->size()); + data->mutable_response()->mutable_array()->Resize(request->size(), 0); auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayBool", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -2477,13 +2345,13 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google size_t size = request->size(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->indicator = indicator; data->size = size; data->library = std::shared_ptr(library_); - - data->data.mutable_response()->mutable_array()->Reserve(request->size()); - data->data.mutable_response()->mutable_array()->Resize(request->size(), 0); + + data->mutable_response()->mutable_array()->Reserve(request->size()); + data->mutable_response()->mutable_array()->Resize(request->size(), 0); auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayDbl", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -2543,13 +2411,13 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google size_t size = request->size(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->indicator = indicator; data->size = size; data->library = std::shared_ptr(library_); - - data->data.mutable_response()->mutable_array()->Reserve(request->size()); - data->data.mutable_response()->mutable_array()->Resize(request->size(), 0); + + data->mutable_response()->mutable_array()->Reserve(request->size()); + data->mutable_response()->mutable_array()->Resize(request->size(), 0); auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayI16", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -2601,13 +2469,13 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google size_t size = request->size(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->indicator = indicator; data->size = size; data->library = std::shared_ptr(library_); - - data->data.mutable_response()->mutable_array()->Reserve(request->size()); - data->data.mutable_response()->mutable_array()->Resize(request->size(), 0); + + data->mutable_response()->mutable_array()->Reserve(request->size()); + data->mutable_response()->mutable_array()->Resize(request->size(), 0); auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayI32", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -2659,13 +2527,13 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google size_t size = request->size(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->indicator = indicator; data->size = size; data->library = std::shared_ptr(library_); - - data->data.mutable_response()->mutable_array()->Reserve(request->size()); - data->data.mutable_response()->mutable_array()->Resize(request->size(), 0); + + data->mutable_response()->mutable_array()->Reserve(request->size()); + data->mutable_response()->mutable_array()->Resize(request->size(), 0); auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayI64", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -2725,13 +2593,13 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google size_t size = request->size(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->indicator = indicator; data->size = size; data->library = std::shared_ptr(library_); - - data->data.mutable_response()->mutable_array()->Reserve(request->size()); - data->data.mutable_response()->mutable_array()->Resize(request->size(), 0); + + data->mutable_response()->mutable_array()->Reserve(request->size()); + data->mutable_response()->mutable_array()->Resize(request->size(), 0); auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayI8", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -2783,13 +2651,13 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google size_t size = request->size(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->indicator = indicator; data->size = size; data->library = std::shared_ptr(library_); - - data->data.mutable_response()->mutable_array()->Reserve(request->size()); - data->data.mutable_response()->mutable_array()->Resize(request->size(), 0); + + data->mutable_response()->mutable_array()->Reserve(request->size()); + data->mutable_response()->mutable_array()->Resize(request->size(), 0); auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArraySgl", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -2849,13 +2717,13 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google size_t size = request->size(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->indicator = indicator; data->size = size; data->library = std::shared_ptr(library_); - - data->data.mutable_response()->mutable_array()->Reserve(request->size()); - data->data.mutable_response()->mutable_array()->Resize(request->size(), 0); + + data->mutable_response()->mutable_array()->Reserve(request->size()); + data->mutable_response()->mutable_array()->Resize(request->size(), 0); auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayU16", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -2907,13 +2775,13 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google size_t size = request->size(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->indicator = indicator; data->size = size; data->library = std::shared_ptr(library_); - - data->data.mutable_response()->mutable_array()->Reserve(request->size()); - data->data.mutable_response()->mutable_array()->Resize(request->size(), 0); + + data->mutable_response()->mutable_array()->Reserve(request->size()); + data->mutable_response()->mutable_array()->Resize(request->size(), 0); auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayU32", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -2965,13 +2833,13 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google size_t size = request->size(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->indicator = indicator; data->size = size; data->library = std::shared_ptr(library_); - - data->data.mutable_response()->mutable_array()->Reserve(request->size()); - data->data.mutable_response()->mutable_array()->Resize(request->size(), 0); + + data->mutable_response()->mutable_array()->Reserve(request->size()); + data->mutable_response()->mutable_array()->Resize(request->size(), 0); auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayU64", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -3031,13 +2899,13 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google size_t size = request->size(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->indicator = indicator; data->size = size; data->library = std::shared_ptr(library_); - - data->data.mutable_response()->mutable_array()->Reserve(request->size()); - data->data.mutable_response()->mutable_array()->Resize(request->size(), 0); + + data->mutable_response()->mutable_array()->Reserve(request->size()); + data->mutable_response()->mutable_array()->Resize(request->size(), 0); auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayU8", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -3087,10 +2955,10 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google uint32_t indicator = request->indicator(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->indicator = indicator; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadBool", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -3140,10 +3008,10 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google uint32_t indicator = request->indicator(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->indicator = indicator; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadDbl", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -3544,10 +3412,10 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google uint32_t indicator = request->indicator(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->indicator = indicator; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadI16", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -3597,10 +3465,10 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google uint32_t indicator = request->indicator(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->indicator = indicator; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadI32", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -3650,10 +3518,10 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google uint32_t indicator = request->indicator(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->indicator = indicator; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadI64", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -3703,10 +3571,10 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google uint32_t indicator = request->indicator(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->indicator = indicator; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadI8", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -3756,10 +3624,10 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google uint32_t indicator = request->indicator(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->indicator = indicator; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadSgl", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -3809,10 +3677,10 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google uint32_t indicator = request->indicator(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->indicator = indicator; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadU16", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -3862,10 +3730,10 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google uint32_t indicator = request->indicator(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->indicator = indicator; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadU32", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -3915,10 +3783,10 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google uint32_t indicator = request->indicator(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->indicator = indicator; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadU64", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -3968,10 +3836,10 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google uint32_t indicator = request->indicator(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->indicator = indicator; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadU8", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -4363,10 +4231,10 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google uint32_t control = request->control(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->control = control; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayBool", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -4416,10 +4284,10 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google uint32_t control = request->control(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->control = control; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayDbl", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -4486,10 +4354,10 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google uint32_t control = request->control(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->control = control; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayI16", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -4539,10 +4407,10 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google uint32_t control = request->control(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->control = control; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayI32", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -4592,10 +4460,10 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google uint32_t control = request->control(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->control = control; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayI64", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -4662,10 +4530,10 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google uint32_t control = request->control(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->control = control; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayI8", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -4715,10 +4583,10 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google uint32_t control = request->control(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->control = control; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArraySgl", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -4785,10 +4653,10 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google uint32_t control = request->control(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->control = control; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayU16", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -4838,10 +4706,10 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google uint32_t control = request->control(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->control = control; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayU32", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -4891,10 +4759,10 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google uint32_t control = request->control(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->control = control; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayU64", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -4961,10 +4829,10 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google uint32_t control = request->control(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->control = control; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayU8", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -5013,10 +4881,10 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google uint32_t control = request->control(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->control = control; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteBool", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -5065,10 +4933,10 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google uint32_t control = request->control(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->control = control; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteDbl", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -5502,10 +5370,10 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google uint32_t control = request->control(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->control = control; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteI16", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -5554,10 +5422,10 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google uint32_t control = request->control(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->control = control; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteI32", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -5606,10 +5474,10 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google uint32_t control = request->control(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->control = control; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteI64", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -5667,10 +5535,10 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google uint32_t control = request->control(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->control = control; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteI8", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -5719,10 +5587,10 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google uint32_t control = request->control(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->control = control; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteSgl", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -5780,10 +5648,10 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google uint32_t control = request->control(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->control = control; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteU16", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -5832,10 +5700,10 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google uint32_t control = request->control(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->control = control; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteU32", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -5884,10 +5752,10 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google uint32_t control = request->control(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->control = control; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteU64", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -5945,10 +5813,10 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google uint32_t control = request->control(); auto data = std::make_unique(); - data->session = session; + data->session = session; data->control = control; data->library = std::shared_ptr(library_); - + auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteU8", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); diff --git a/source/codegen/service_helpers.py b/source/codegen/service_helpers.py index 71dcbeb8c..66aa66251 100644 --- a/source/codegen/service_helpers.py +++ b/source/codegen/service_helpers.py @@ -734,14 +734,3 @@ def get_c_api_name(function_name) -> str: base_name = function_name[len("Begin") :] return f"{base_name}" return f"{function_name}" - - -def is_secondary_streaming_param(param, first_streaming_param) -> bool: - """Check if a parameter is a secondry streaming type parameter.""" - return param.get("is_streaming_type", False) and param["name"] != first_streaming_param["name"] - - -def get_output_streaming_params_to_define(parameters, first_streaming_param) -> List[dict]: - """Get the list of output streaming parameters that need to be defined.""" - output_params = [p for p in parameters if common_helpers.is_output_parameter(p)] - return [p for p in output_params if is_secondary_streaming_param(p, first_streaming_param)] diff --git a/source/codegen/templates/service_helpers.mako b/source/codegen/templates/service_helpers.mako index d2fa51251..9f942b9e7 100644 --- a/source/codegen/templates/service_helpers.mako +++ b/source/codegen/templates/service_helpers.mako @@ -26,7 +26,7 @@ add_session_snippet = f'add_session(grpc_device_session_name, init_lambda, cleanup_lambda, {session_behavior_param_name}, &{session_initialized_param_name})' %>\ ${initialize_input_params(function_name, parameters)} -${initialize_output_params(output_parameters_to_initialize)}\ +${initialize_output_params(output_parameters_to_initialize, indent_level=1)}\ auto init_lambda = [&] () { ## If the session is not returned, it's an output param and need to be declared before calling. % if not service_helpers.is_session_returned_from_function(parameters): @@ -64,7 +64,7 @@ ${populate_response(function_data=function_data, parameters=parameters, init_met initiating_driver_c_name = f'{initiating_driver_input_var_name}_grpc_session' %>\ ${initialize_input_params(function_name, parameters)} -${initialize_output_params(output_parameters_to_initialize)}\ +${initialize_output_params(output_parameters_to_initialize, indent_level=1)}\ auto initiating_session_name = ${initiating_driver_c_name}.name(); auto init_lambda = [&] () { ${cross_driver_dep.resource_handle_type} ${session_output_var_name}; @@ -98,9 +98,7 @@ ${call_library_method( ${populate_error_check(function_data, parameters, indent_level=1)}\ ${size_param['type']} ${common_helpers.get_cpp_local_name(size_param)} = status; -<%block filter="common_helpers.indent(1)">\ -${initialize_output_params(output_parameters)}\ -\ +${initialize_output_params(output_parameters, indent_level=2)}\ ${call_library_method( function_name=function_name, function_data=function_data, @@ -129,7 +127,7 @@ ${populate_response(function_data=function_data, parameters=parameters, indent_l scalar_output_parameters = [p for p in output_parameters if p not in array_output_parameters] %>\ ${initialize_input_params(function_name, non_ivi_params)}\ -${initialize_output_params(scalar_output_parameters)}\ +${initialize_output_params(scalar_output_parameters, indent_level=1)}\ while (true) { ${call_library_method( function_name=function_name, @@ -138,9 +136,7 @@ ${call_library_method( indent_level=1) }\ ${populate_error_check(function_data, parameters, indent_level=1)}\ -<%block filter="common_helpers.indent(1)">\ -${initialize_output_params(array_output_parameters)}\ -\ +${initialize_output_params(array_output_parameters, indent_level=2)}\ % for ivi_param_set in ivi_param_sets: % if not ivi_param_set.is_in_out_twist: auto ${ivi_param_set.size_param_name} = ${ivi_param_set.twist_param_name}; @@ -235,7 +231,7 @@ ${populate_error_check(function_data, parameters, indent_level=1, service_deref= output_parameters = [p for p in parameters if common_helpers.is_output_parameter(p)] %>\ ${initialize_input_params(function_name, parameters)}\ -${initialize_output_params(output_parameters)}\ +${initialize_output_params(output_parameters, indent_level=1)}\ ${set_output_vararg_parameter_sizes(parameters)}\ ${call_library_method( function_name=function_name, @@ -254,7 +250,7 @@ ${populate_response(function_data=function_data, parameters=parameters)}\ output_parameters = [p for p in parameters if common_helpers.is_output_parameter(p)] %>\ ${initialize_input_params(function_name, parameters)}\ -${initialize_output_params(output_parameters)}\ +${initialize_output_params(output_parameters, indent_level=1)}\ % if function_name == config['close_function'] or service_helpers.is_custom_close_method(function_data): <% session_param = common_helpers.get_first_session_param(parameters) @@ -323,32 +319,32 @@ ${populate_response(function_data=function_data, parameters=parameters)}\ c_api_name = service_helpers.get_c_api_name(function_name) streaming_params_to_include = common_helpers.get_input_streaming_params(function_data['parameters']) output_parameters = [p for p in functions[non_streaming_function_name]['parameters'] if common_helpers.is_output_parameter(p)] - output_params_to_define = service_helpers.get_output_streaming_params_to_define(function_data['parameters'], streaming_param) # TODO duplicate? %>\ ::grpc::Status ${moniker_function_name}(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { ${struct_name}* function_data = static_cast<${struct_name}*>(data); auto library = function_data->library; - auto response = function_data->data.mutable_response();\ + auto response = &function_data->response;\ ${initialize_moniker_input_parameters(streaming_params_to_include)}\ -${initialize_moniker_output_parameters(output_params_to_define)}\ +${initialize_output_params(output_parameters)}\ % if streaming_param and streaming_param['direction'] == 'in': - ${streaming_handle_in_direction(c_api_name, arg_string, data_type, grpc_streaming_type, streaming_type, streaming_param)}\ - % elif streaming_param and streaming_param['direction'] == 'out': - ${streaming_handle_out_direction(c_api_name, arg_string, data_type, streaming_param, moniker_params)}\ +${streaming_handle_in_direction(c_api_name, arg_string, data_type, grpc_streaming_type, streaming_type, streaming_param)}\ % endif + + auto status = library->${c_api_name}(${arg_string}); + +% if streaming_param['direction'] == 'out': /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. ::grpc::ServerContext* context = NULL; ${populate_response(function_data=function_data, parameters=functions[non_streaming_function_name]['parameters'])}\ */ -% if streaming_param['direction'] == 'out': if (status >= 0) { response->set_status(status); <%block filter="common_helpers.indent(-1)">\ ${set_response_values(output_parameters=output_parameters, init_method=false)}\ \ - packedData.PackFrom(function_data->data); + packedData.PackFrom(*response); } else { @@ -374,9 +370,9 @@ ${set_response_values(output_parameters=output_parameters, init_method=false)}\ %>\ ${initialize_streaming_input_param(function_name, streaming_params_to_include, parameters, streaming_param)} auto data = std::make_unique<${struct_name}>(); - ${initialize_begin_input_params(streaming_params_to_include, streaming_param)}\ +${initialize_begin_input_params(streaming_params_to_include, streaming_param)}\ data->library = std::shared_ptr<${service_class_prefix}LibraryInterface>(library_); - ${initialize_service_output_params(output_params, streaming_param)}\ +${initialize_service_output_params(output_params, streaming_param)}\ auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("${moniker_function_name}", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -384,61 +380,17 @@ ${initialize_streaming_input_param(function_name, streaming_params_to_include, p return ::grpc::Status::OK;\ -<%def name="streaming_handle_out_direction(c_api_name, arg_string, data_type, streaming_param, moniker_params)"> -<% - is_array = common_helpers.is_array(streaming_param['type']) -%>\ -% if is_array: -${streaming_handle_out_direction_array(c_api_name, arg_string, data_type, streaming_param)} -% else: -${streaming_handle_out_direction_scaler(c_api_name, arg_string, streaming_param, moniker_params)} -% endif - - -<%def name="streaming_handle_out_direction_array(c_api_name, arg_string, data_type, streaming_param)">\ -<% - is_coerced = service_helpers.is_output_array_that_needs_coercion(streaming_param) - size_param_name = service_helpers.get_size_param_name(streaming_param) - streaming_param_field_name = common_helpers.get_grpc_field_name(streaming_param) - streaming_param_name = common_helpers.camel_to_snake(streaming_param['name']) # TODO: duplicate after merge? - underlying_param_type = common_helpers.get_underlying_type_name(streaming_param["type"]) -%>\ -% if common_helpers.supports_standard_copy_conversion_routines(streaming_param): - std::vector<${data_type}> ${streaming_param_field_name}(${size_param_name}, ${data_type}()); -% elif is_coerced: - std::vector<${data_type}> ${streaming_param_field_name}(${size_param_name}); -% elif common_helpers.is_driver_typedef_with_same_size_but_different_qualifiers(underlying_param_type): - response->mutable_${streaming_param_field_name}()->Resize(${size_param_name}, 0); - auto ${streaming_param_field_name} = reinterpret_cast<${underlying_param_type}*>(response->mutable_${streaming_param_field_name}()->mutable_data()); -% else: - response->mutable_${streaming_param_field_name}()->Resize(${size_param_name}, 0); - auto ${streaming_param_name} = response->mutable_${streaming_param_field_name}()->mutable_data(); -% endif - auto status = library->${c_api_name}(${arg_string}); - - -<%def name="streaming_handle_out_direction_scaler(c_api_name, arg_string, streaming_param, moniker_params)">\ -<% - parameter_name = common_helpers.get_cpp_local_name(streaming_param) -%>\ -${streaming_param['type']} ${parameter_name} {};\ - - auto status = library->${c_api_name}(${arg_string}); - - <%def name="streaming_handle_in_direction(c_api_name, arg_string, data_type, grpc_streaming_type, streaming_type, streaming_param)"> <% is_array = common_helpers.is_array(streaming_type) %>\ ${grpc_streaming_type} ${grpc_streaming_type.lower()}_message; - packedData.UnpackTo(&${grpc_streaming_type.lower()}_message); + packedData.UnpackTo(&${grpc_streaming_type.lower()}_message); // TODO: should unpack to function_data->mutable_request() % if is_array: ${streaming_handle_in_direction_array(data_type, grpc_streaming_type, streaming_param)}\ % else: ${streaming_handle_in_direction_scaler(grpc_streaming_type, streaming_type, streaming_param)}\ % endif - - auto status = library->${c_api_name}(${arg_string}); <%def name="streaming_handle_in_direction_scaler(grpc_streaming_type, streaming_type, streaming_param)">\ @@ -519,15 +471,6 @@ ${initialize_input_param(function_name, param, parameters)}\ % endfor -<%def name="initialize_moniker_output_parameters(output_params_to_define)">\ -% for parameter in output_params_to_define: -<% - parameter_name = common_helpers.get_cpp_local_name(parameter) -%> - ${parameter['type']} ${parameter_name} = {};\ -% endfor - - <%def name="initialize_service_output_params(output_params, streaming_param)">\ <% size_param_name = service_helpers.get_size_param_name(streaming_param) @@ -537,8 +480,8 @@ ${initialize_input_param(function_name, param, parameters)}\ <% grpc_field_name = common_helpers.get_grpc_field_name(param) %>\ - data->data.mutable_response()->mutable_${grpc_field_name}()->Reserve(request->${size_param_name}()); - data->data.mutable_response()->mutable_${grpc_field_name}()->Resize(request->${size_param_name}(), 0); + data->mutable_response()->mutable_${grpc_field_name}()->Reserve(request->${size_param_name}()); + data->mutable_response()->mutable_${grpc_field_name}()->Resize(request->${size_param_name}(), 0); % endif % endfor @@ -568,7 +511,7 @@ ${initialize_enum_array_input_param(function_name, parameter)} % elif common_helpers.is_enum(parameter): ${initialize_enum_input_param(function_name, parameter)} % elif 'hardcoded_value' in parameter: -${initialize_hardcoded_parameter(parameter)} + ${initialize_hardcoded_parameter(parameter)} % elif 'callback_token' in parameter or 'callback_params' in parameter: ## pass % elif "determine_size_from" in parameter: ${initialize_len_input_param(parameter, parameters)} @@ -822,7 +765,7 @@ ${initialize_standard_input_param(function_name, parameter)} ## Initialize a 'hardcoded' param. <%def name="initialize_hardcoded_parameter(parameter)">\ - auto ${common_helpers.get_cpp_local_name(parameter)} = ${parameter['hardcoded_value']};\ + auto ${common_helpers.get_cpp_local_name(parameter)} = ${parameter['hardcoded_value']};\ ## Initialize an input parameter that's passed by pointer. @@ -944,10 +887,11 @@ ${initialize_standard_input_param(function_name, parameter)} ## Initialize the output parameters for an API call. -<%def name="initialize_output_params(output_parameters)">\ +<%def name="initialize_output_params(output_parameters, indent_level=0)">\ <% output_parameters = common_helpers.get_params_needing_initialization(output_parameters) %>\ +<%block filter="common_helpers.indent(indent_level)">\ % for parameter in output_parameters: <% parameter_name = common_helpers.get_cpp_local_name(parameter) @@ -955,55 +899,56 @@ ${initialize_standard_input_param(function_name, parameter)} grpc_type = parameter["grpc_type"] grpc_cpp_lib_type = service_helpers.get_protobuf_cpplib_type(grpc_type) %>\ -% if 'hardcoded_value' in parameter: +% if 'hardcoded_value' in parameter: ${initialize_hardcoded_parameter(parameter)} -% elif common_helpers.supports_standard_output_allocation_routines(parameter): - auto ${parameter_name} = allocate_output_storage<${underlying_param_type}, ${grpc_cpp_lib_type}>(${str.join(", ", parameter.get("additional_arguments_to_output_allocation", []))}); -% elif common_helpers.is_repeating_parameter(parameter): - auto get_${parameter_name}_if = [](std::vector<${underlying_param_type}>& vector, int n) -> ${underlying_param_type}* { - if (vector.size() > n) { +% elif common_helpers.supports_standard_output_allocation_routines(parameter): + auto ${parameter_name} = allocate_output_storage<${underlying_param_type}, ${grpc_cpp_lib_type}>(${str.join(", ", parameter.get("additional_arguments_to_output_allocation", []))}); +% elif common_helpers.is_repeating_parameter(parameter): + auto get_${parameter_name}_if = [](std::vector<${underlying_param_type}>& vector, int n) -> ${underlying_param_type}* { + if (vector.size() > n) { ## Note that this code will not handle every datatype, but it works for all ## the ones we currently use with repeated varargs. - return &(vector[n]); - } - return nullptr; - }; - std::vector<${underlying_param_type}> ${parameter_name}Vector; -% elif common_helpers.is_repeated_varargs_parameter(parameter): # pass -% elif common_helpers.is_array(parameter['type']): + return &(vector[n]); + } + return nullptr; + }; + std::vector<${underlying_param_type}> ${parameter_name}Vector; +% elif common_helpers.is_repeated_varargs_parameter(parameter): # pass +% elif common_helpers.is_array(parameter['type']): <% buffer_size = common_helpers.get_buffer_size_expression(parameter) size = common_helpers.get_size_expression(parameter) %>\ -% if common_helpers.supports_standard_copy_conversion_routines(parameter): - std::vector<${underlying_param_type}> ${parameter_name}(${size}, ${underlying_param_type}()); +% if common_helpers.supports_standard_copy_conversion_routines(parameter): + std::vector<${underlying_param_type}> ${parameter_name}(${size}, ${underlying_param_type}()); ## Byte arrays are leveraging a string as a buffer, so we don't need to take special consideration of the null terminator. -% elif grpc_type == 'bytes': - std::string ${parameter_name}(${size}, '\0'); +% elif grpc_type == 'bytes': + std::string ${parameter_name}(${size}, '\0'); ## Driver string APIs require room in the buffer for the null terminator. We need to account for that when sizing the string. -% elif common_helpers.is_string_arg(parameter) and common_helpers.get_size_mechanism(parameter) == 'fixed': - std::string ${parameter_name}(${size}, '\0'); -% elif common_helpers.is_string_arg(parameter): - std::string ${parameter_name}; - if (${buffer_size} > 0) { - ${parameter_name}.resize(${size}); - } -% elif service_helpers.is_output_array_that_needs_coercion(parameter): - std::vector<${underlying_param_type}> ${parameter_name}(${size}); -% elif common_helpers.is_enum(parameter): - response->mutable_${parameter_name}_raw()->Resize(${size}, 0); - ${underlying_param_type}* ${parameter_name} = reinterpret_cast<${underlying_param_type}*>(response->mutable_${parameter_name}_raw()->mutable_data()); -% elif common_helpers.is_driver_typedef_with_same_size_but_different_qualifiers(underlying_param_type): - response->mutable_${parameter_name}()->Resize(${size}, 0); - ${underlying_param_type}* ${parameter_name} = reinterpret_cast<${underlying_param_type}*>(response->mutable_${parameter_name}()->mutable_data()); -% else: - response->mutable_${parameter_name}()->Resize(${size}, 0); - ${underlying_param_type}* ${parameter_name} = response->mutable_${parameter_name}()->mutable_data(); -% endif +% elif common_helpers.is_string_arg(parameter) and common_helpers.get_size_mechanism(parameter) == 'fixed': + std::string ${parameter_name}(${size}, '\0'); +% elif common_helpers.is_string_arg(parameter): + std::string ${parameter_name}; + if (${buffer_size} > 0) { + ${parameter_name}.resize(${size}); + } +% elif service_helpers.is_output_array_that_needs_coercion(parameter): + std::vector<${underlying_param_type}> ${parameter_name}(${size}); +% elif common_helpers.is_enum(parameter): + response->mutable_${parameter_name}_raw()->Resize(${size}, 0); + ${underlying_param_type}* ${parameter_name} = reinterpret_cast<${underlying_param_type}*>(response->mutable_${parameter_name}_raw()->mutable_data()); +% elif common_helpers.is_driver_typedef_with_same_size_but_different_qualifiers(underlying_param_type): + response->mutable_${parameter_name}()->Resize(${size}, 0); + ${underlying_param_type}* ${parameter_name} = reinterpret_cast<${underlying_param_type}*>(response->mutable_${parameter_name}()->mutable_data()); % else: - ${underlying_param_type} ${parameter_name} {}; + response->mutable_${parameter_name}()->Resize(${size}, 0); + ${underlying_param_type}* ${parameter_name} = response->mutable_${parameter_name}()->mutable_data(); % endif +% else: + ${underlying_param_type} ${parameter_name} {}; +% endif % endfor +\ From 9f3524c99d89dba3f7a5d68507f20a1fd09a2345 Mon Sep 17 00:00:00 2001 From: Rohan Doshi Date: Sat, 23 Nov 2024 21:02:02 +0530 Subject: [PATCH 07/25] fix black formatter issues --- source/codegen/common_helpers.py | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/source/codegen/common_helpers.py b/source/codegen/common_helpers.py index 8ca469349..4c4dfbbc8 100644 --- a/source/codegen/common_helpers.py +++ b/source/codegen/common_helpers.py @@ -1222,24 +1222,33 @@ def get_data_moniker_function_name(function_name): def get_data_moniker_struct_name(begin_function_name): - """Return the corresponding moniker function name for the given Begin* C API function.""" + """Return the Moniker function name.. + + Input expected is Begin* streaming API name. + """ return f"{begin_function_name.replace('Begin', 'Moniker')}Data" def get_data_moniker_request_message_type(begin_function_name): - """Return the request message type for corresponding moniker function name given Begin* C API function.""" + """Return the request message type for Moniker functions. + + Input expected is Begin* streaming API name. + """ return f"{begin_function_name.replace('Begin', '')}StreamingRequest" def get_data_moniker_response_message_type(begin_function_name): - """Return the response message type for corresponding moniker function name given Begin* C API function.""" + """Return the response message type for Moniker functions. + + Input expected is Begin* streaming API name. + """ return f"{begin_function_name.replace('Begin', '')}StreamingResponse" def get_data_moniker_function_parameters(function): - """Given non-streaming function equivalent filter the parameters needed for Moniker APIs for streaming APIs, - and split into input/output parameters. + """Return moniker function parameters split into input/output. + Input expected is equivalent non-streaming function. Add a default "status" output parameter if there isn't one already. """ parameter_array = filter_parameters_for_grpc_fields(function["parameters"]) From b7da3f83c09f9ac7f5d3f16f67d73c0b3d060e65 Mon Sep 17 00:00:00 2001 From: Rohan Doshi Date: Sat, 23 Nov 2024 21:06:21 +0530 Subject: [PATCH 08/25] fix build error --- generated/nidaqmx/nidaqmx_service.cpp | 44 +++++++++---------- generated/nifpga/nifpga_service.cpp | 44 +++++++++---------- source/codegen/templates/service_helpers.mako | 4 +- 3 files changed, 46 insertions(+), 46 deletions(-) diff --git a/generated/nidaqmx/nidaqmx_service.cpp b/generated/nidaqmx/nidaqmx_service.cpp index 1430f7393..91ba98da2 100644 --- a/generated/nidaqmx/nidaqmx_service.cpp +++ b/generated/nidaqmx/nidaqmx_service.cpp @@ -14471,8 +14471,8 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena data->reserved = reserved; data->library = std::shared_ptr(library_); - data->mutable_response()->mutable_read_array()->Reserve(request->array_size_in_samps()); - data->mutable_response()->mutable_read_array()->Resize(request->array_size_in_samps(), 0); + data->response.mutable_read_array()->Reserve(request->array_size_in_samps()); + data->response.mutable_read_array()->Resize(request->array_size_in_samps(), 0); auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadAnalogF64", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -14635,8 +14635,8 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena data->reserved = reserved; data->library = std::shared_ptr(library_); - data->mutable_response()->mutable_read_array()->Reserve(request->array_size_in_samps()); - data->mutable_response()->mutable_read_array()->Resize(request->array_size_in_samps(), 0); + data->response.mutable_read_array()->Reserve(request->array_size_in_samps()); + data->response.mutable_read_array()->Resize(request->array_size_in_samps(), 0); auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadBinaryI16", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -14735,8 +14735,8 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena data->reserved = reserved; data->library = std::shared_ptr(library_); - data->mutable_response()->mutable_read_array()->Reserve(request->array_size_in_samps()); - data->mutable_response()->mutable_read_array()->Resize(request->array_size_in_samps(), 0); + data->response.mutable_read_array()->Reserve(request->array_size_in_samps()); + data->response.mutable_read_array()->Resize(request->array_size_in_samps(), 0); auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadBinaryI32", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -14843,8 +14843,8 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena data->reserved = reserved; data->library = std::shared_ptr(library_); - data->mutable_response()->mutable_read_array()->Reserve(request->array_size_in_samps()); - data->mutable_response()->mutable_read_array()->Resize(request->array_size_in_samps(), 0); + data->response.mutable_read_array()->Reserve(request->array_size_in_samps()); + data->response.mutable_read_array()->Resize(request->array_size_in_samps(), 0); auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadBinaryU16", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -14943,8 +14943,8 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena data->reserved = reserved; data->library = std::shared_ptr(library_); - data->mutable_response()->mutable_read_array()->Reserve(request->array_size_in_samps()); - data->mutable_response()->mutable_read_array()->Resize(request->array_size_in_samps(), 0); + data->response.mutable_read_array()->Reserve(request->array_size_in_samps()); + data->response.mutable_read_array()->Resize(request->array_size_in_samps(), 0); auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadBinaryU32", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -15010,8 +15010,8 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena data->reserved = reserved; data->library = std::shared_ptr(library_); - data->mutable_response()->mutable_read_array()->Reserve(request->array_size_in_samps()); - data->mutable_response()->mutable_read_array()->Resize(request->array_size_in_samps(), 0); + data->response.mutable_read_array()->Reserve(request->array_size_in_samps()); + data->response.mutable_read_array()->Resize(request->array_size_in_samps(), 0); auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCounterF64", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -15110,8 +15110,8 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena data->reserved = reserved; data->library = std::shared_ptr(library_); - data->mutable_response()->mutable_read_array()->Reserve(request->array_size_in_samps()); - data->mutable_response()->mutable_read_array()->Resize(request->array_size_in_samps(), 0); + data->response.mutable_read_array()->Reserve(request->array_size_in_samps()); + data->response.mutable_read_array()->Resize(request->array_size_in_samps(), 0); auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCounterF64Ex", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -15289,8 +15289,8 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena data->reserved = reserved; data->library = std::shared_ptr(library_); - data->mutable_response()->mutable_read_array()->Reserve(request->array_size_in_samps()); - data->mutable_response()->mutable_read_array()->Resize(request->array_size_in_samps(), 0); + data->response.mutable_read_array()->Reserve(request->array_size_in_samps()); + data->response.mutable_read_array()->Resize(request->array_size_in_samps(), 0); auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCounterU32", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -15389,8 +15389,8 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena data->reserved = reserved; data->library = std::shared_ptr(library_); - data->mutable_response()->mutable_read_array()->Reserve(request->array_size_in_samps()); - data->mutable_response()->mutable_read_array()->Resize(request->array_size_in_samps(), 0); + data->response.mutable_read_array()->Reserve(request->array_size_in_samps()); + data->response.mutable_read_array()->Resize(request->array_size_in_samps(), 0); auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCounterU32Ex", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -15833,8 +15833,8 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena data->reserved = reserved; data->library = std::shared_ptr(library_); - data->mutable_response()->mutable_read_array()->Reserve(request->array_size_in_samps()); - data->mutable_response()->mutable_read_array()->Resize(request->array_size_in_samps(), 0); + data->response.mutable_read_array()->Reserve(request->array_size_in_samps()); + data->response.mutable_read_array()->Resize(request->array_size_in_samps(), 0); auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadDigitalU16", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -15933,8 +15933,8 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena data->reserved = reserved; data->library = std::shared_ptr(library_); - data->mutable_response()->mutable_read_array()->Reserve(request->array_size_in_samps()); - data->mutable_response()->mutable_read_array()->Resize(request->array_size_in_samps(), 0); + data->response.mutable_read_array()->Reserve(request->array_size_in_samps()); + data->response.mutable_read_array()->Resize(request->array_size_in_samps(), 0); auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadDigitalU32", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); diff --git a/generated/nifpga/nifpga_service.cpp b/generated/nifpga/nifpga_service.cpp index c3a24ef77..cf495f7e2 100644 --- a/generated/nifpga/nifpga_service.cpp +++ b/generated/nifpga/nifpga_service.cpp @@ -2292,8 +2292,8 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google data->size = size; data->library = std::shared_ptr(library_); - data->mutable_response()->mutable_array()->Reserve(request->size()); - data->mutable_response()->mutable_array()->Resize(request->size(), 0); + data->response.mutable_array()->Reserve(request->size()); + data->response.mutable_array()->Resize(request->size(), 0); auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayBool", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -2350,8 +2350,8 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google data->size = size; data->library = std::shared_ptr(library_); - data->mutable_response()->mutable_array()->Reserve(request->size()); - data->mutable_response()->mutable_array()->Resize(request->size(), 0); + data->response.mutable_array()->Reserve(request->size()); + data->response.mutable_array()->Resize(request->size(), 0); auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayDbl", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -2416,8 +2416,8 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google data->size = size; data->library = std::shared_ptr(library_); - data->mutable_response()->mutable_array()->Reserve(request->size()); - data->mutable_response()->mutable_array()->Resize(request->size(), 0); + data->response.mutable_array()->Reserve(request->size()); + data->response.mutable_array()->Resize(request->size(), 0); auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayI16", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -2474,8 +2474,8 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google data->size = size; data->library = std::shared_ptr(library_); - data->mutable_response()->mutable_array()->Reserve(request->size()); - data->mutable_response()->mutable_array()->Resize(request->size(), 0); + data->response.mutable_array()->Reserve(request->size()); + data->response.mutable_array()->Resize(request->size(), 0); auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayI32", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -2532,8 +2532,8 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google data->size = size; data->library = std::shared_ptr(library_); - data->mutable_response()->mutable_array()->Reserve(request->size()); - data->mutable_response()->mutable_array()->Resize(request->size(), 0); + data->response.mutable_array()->Reserve(request->size()); + data->response.mutable_array()->Resize(request->size(), 0); auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayI64", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -2598,8 +2598,8 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google data->size = size; data->library = std::shared_ptr(library_); - data->mutable_response()->mutable_array()->Reserve(request->size()); - data->mutable_response()->mutable_array()->Resize(request->size(), 0); + data->response.mutable_array()->Reserve(request->size()); + data->response.mutable_array()->Resize(request->size(), 0); auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayI8", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -2656,8 +2656,8 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google data->size = size; data->library = std::shared_ptr(library_); - data->mutable_response()->mutable_array()->Reserve(request->size()); - data->mutable_response()->mutable_array()->Resize(request->size(), 0); + data->response.mutable_array()->Reserve(request->size()); + data->response.mutable_array()->Resize(request->size(), 0); auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArraySgl", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -2722,8 +2722,8 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google data->size = size; data->library = std::shared_ptr(library_); - data->mutable_response()->mutable_array()->Reserve(request->size()); - data->mutable_response()->mutable_array()->Resize(request->size(), 0); + data->response.mutable_array()->Reserve(request->size()); + data->response.mutable_array()->Resize(request->size(), 0); auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayU16", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -2780,8 +2780,8 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google data->size = size; data->library = std::shared_ptr(library_); - data->mutable_response()->mutable_array()->Reserve(request->size()); - data->mutable_response()->mutable_array()->Resize(request->size(), 0); + data->response.mutable_array()->Reserve(request->size()); + data->response.mutable_array()->Resize(request->size(), 0); auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayU32", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -2838,8 +2838,8 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google data->size = size; data->library = std::shared_ptr(library_); - data->mutable_response()->mutable_array()->Reserve(request->size()); - data->mutable_response()->mutable_array()->Resize(request->size(), 0); + data->response.mutable_array()->Reserve(request->size()); + data->response.mutable_array()->Resize(request->size(), 0); auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayU64", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -2904,8 +2904,8 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google data->size = size; data->library = std::shared_ptr(library_); - data->mutable_response()->mutable_array()->Reserve(request->size()); - data->mutable_response()->mutable_array()->Resize(request->size(), 0); + data->response.mutable_array()->Reserve(request->size()); + data->response.mutable_array()->Resize(request->size(), 0); auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayU8", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); diff --git a/source/codegen/templates/service_helpers.mako b/source/codegen/templates/service_helpers.mako index 9f942b9e7..8cfb009de 100644 --- a/source/codegen/templates/service_helpers.mako +++ b/source/codegen/templates/service_helpers.mako @@ -480,8 +480,8 @@ ${initialize_input_param(function_name, param, parameters)}\ <% grpc_field_name = common_helpers.get_grpc_field_name(param) %>\ - data->mutable_response()->mutable_${grpc_field_name}()->Reserve(request->${size_param_name}()); - data->mutable_response()->mutable_${grpc_field_name}()->Resize(request->${size_param_name}(), 0); + data->response.mutable_${grpc_field_name}()->Reserve(request->${size_param_name}()); + data->response.mutable_${grpc_field_name}()->Resize(request->${size_param_name}(), 0); % endif % endfor From c58b2409c66e568277113a3e80bbbf37b212ca45 Mon Sep 17 00:00:00 2001 From: Rohan Doshi Date: Sat, 23 Nov 2024 22:39:14 +0530 Subject: [PATCH 09/25] cleanup scripts --- generated/nidaqmx/nidaqmx_service.cpp | 198 ++------------ generated/nifpga/nifpga_service.cpp | 246 ++---------------- source/codegen/common_helpers.py | 9 +- source/codegen/templates/proto.mako | 2 +- source/codegen/templates/proto_helpers.mako | 5 +- source/codegen/templates/service_helpers.mako | 45 ++-- 6 files changed, 62 insertions(+), 443 deletions(-) diff --git a/generated/nidaqmx/nidaqmx_service.cpp b/generated/nidaqmx/nidaqmx_service.cpp index 91ba98da2..0d40fc7af 100644 --- a/generated/nidaqmx/nidaqmx_service.cpp +++ b/generated/nidaqmx/nidaqmx_service.cpp @@ -381,15 +381,6 @@ ::grpc::Status MonikerReadAnalogF64(void* data, google::protobuf::Arena& arena, auto status = library->ReadAnalogF64(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_samps_per_chan_read(samps_per_chan_read); - */ if (status >= 0) { response->set_status(status); @@ -398,7 +389,7 @@ ::grpc::Status MonikerReadAnalogF64(void* data, google::protobuf::Arena& arena, } else { - // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); } return ::grpc::Status::OK; @@ -416,14 +407,6 @@ ::grpc::Status MonikerReadAnalogScalarF64(void* data, google::protobuf::Arena& a auto status = library->ReadAnalogScalarF64(task, timeout, &value, reserved); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - */ if (status >= 0) { response->set_status(status); @@ -432,7 +415,7 @@ ::grpc::Status MonikerReadAnalogScalarF64(void* data, google::protobuf::Arena& a } else { - // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); } return ::grpc::Status::OK; @@ -454,24 +437,6 @@ ::grpc::Status MonikerReadBinaryI16(void* data, google::protobuf::Arena& arena, auto status = library->ReadBinaryI16(task, num_samps_per_chan, timeout, fill_mode, read_array.data(), array_size_in_samps, &samps_per_chan_read, reserved); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->mutable_read_array()->Clear(); - response->mutable_read_array()->Reserve(array_size_in_samps); - std::transform( - read_array.begin(), - read_array.begin() + array_size_in_samps, - google::protobuf::RepeatedFieldBackInserter(response->mutable_read_array()), - [&](auto x) { - return x; - }); - response->set_samps_per_chan_read(samps_per_chan_read); - */ if (status >= 0) { response->set_status(status); @@ -489,7 +454,7 @@ ::grpc::Status MonikerReadBinaryI16(void* data, google::protobuf::Arena& arena, } else { - // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); } return ::grpc::Status::OK; @@ -512,15 +477,6 @@ ::grpc::Status MonikerReadBinaryI32(void* data, google::protobuf::Arena& arena, auto status = library->ReadBinaryI32(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_samps_per_chan_read(samps_per_chan_read); - */ if (status >= 0) { response->set_status(status); @@ -529,7 +485,7 @@ ::grpc::Status MonikerReadBinaryI32(void* data, google::protobuf::Arena& arena, } else { - // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); } return ::grpc::Status::OK; @@ -551,24 +507,6 @@ ::grpc::Status MonikerReadBinaryU16(void* data, google::protobuf::Arena& arena, auto status = library->ReadBinaryU16(task, num_samps_per_chan, timeout, fill_mode, read_array.data(), array_size_in_samps, &samps_per_chan_read, reserved); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->mutable_read_array()->Clear(); - response->mutable_read_array()->Reserve(array_size_in_samps); - std::transform( - read_array.begin(), - read_array.begin() + array_size_in_samps, - google::protobuf::RepeatedFieldBackInserter(response->mutable_read_array()), - [&](auto x) { - return x; - }); - response->set_samps_per_chan_read(samps_per_chan_read); - */ if (status >= 0) { response->set_status(status); @@ -586,7 +524,7 @@ ::grpc::Status MonikerReadBinaryU16(void* data, google::protobuf::Arena& arena, } else { - // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); } return ::grpc::Status::OK; @@ -609,15 +547,6 @@ ::grpc::Status MonikerReadBinaryU32(void* data, google::protobuf::Arena& arena, auto status = library->ReadBinaryU32(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_samps_per_chan_read(samps_per_chan_read); - */ if (status >= 0) { response->set_status(status); @@ -626,7 +555,7 @@ ::grpc::Status MonikerReadBinaryU32(void* data, google::protobuf::Arena& arena, } else { - // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); } return ::grpc::Status::OK; @@ -648,15 +577,6 @@ ::grpc::Status MonikerReadCounterF64(void* data, google::protobuf::Arena& arena, auto status = library->ReadCounterF64(task, num_samps_per_chan, timeout, read_array, array_size_in_samps, &samps_per_chan_read, reserved); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_samps_per_chan_read(samps_per_chan_read); - */ if (status >= 0) { response->set_status(status); @@ -665,7 +585,7 @@ ::grpc::Status MonikerReadCounterF64(void* data, google::protobuf::Arena& arena, } else { - // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); } return ::grpc::Status::OK; @@ -688,15 +608,6 @@ ::grpc::Status MonikerReadCounterF64Ex(void* data, google::protobuf::Arena& aren auto status = library->ReadCounterF64Ex(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_samps_per_chan_read(samps_per_chan_read); - */ if (status >= 0) { response->set_status(status); @@ -705,7 +616,7 @@ ::grpc::Status MonikerReadCounterF64Ex(void* data, google::protobuf::Arena& aren } else { - // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); } return ::grpc::Status::OK; @@ -723,14 +634,6 @@ ::grpc::Status MonikerReadCounterScalarF64(void* data, google::protobuf::Arena& auto status = library->ReadCounterScalarF64(task, timeout, &value, reserved); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - */ if (status >= 0) { response->set_status(status); @@ -739,7 +642,7 @@ ::grpc::Status MonikerReadCounterScalarF64(void* data, google::protobuf::Arena& } else { - // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); } return ::grpc::Status::OK; @@ -757,14 +660,6 @@ ::grpc::Status MonikerReadCounterScalarU32(void* data, google::protobuf::Arena& auto status = library->ReadCounterScalarU32(task, timeout, &value, reserved); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - */ if (status >= 0) { response->set_status(status); @@ -773,7 +668,7 @@ ::grpc::Status MonikerReadCounterScalarU32(void* data, google::protobuf::Arena& } else { - // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); } return ::grpc::Status::OK; @@ -795,15 +690,6 @@ ::grpc::Status MonikerReadCounterU32(void* data, google::protobuf::Arena& arena, auto status = library->ReadCounterU32(task, num_samps_per_chan, timeout, read_array, array_size_in_samps, &samps_per_chan_read, reserved); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_samps_per_chan_read(samps_per_chan_read); - */ if (status >= 0) { response->set_status(status); @@ -812,7 +698,7 @@ ::grpc::Status MonikerReadCounterU32(void* data, google::protobuf::Arena& arena, } else { - // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); } return ::grpc::Status::OK; @@ -835,15 +721,6 @@ ::grpc::Status MonikerReadCounterU32Ex(void* data, google::protobuf::Arena& aren auto status = library->ReadCounterU32Ex(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_samps_per_chan_read(samps_per_chan_read); - */ if (status >= 0) { response->set_status(status); @@ -852,7 +729,7 @@ ::grpc::Status MonikerReadCounterU32Ex(void* data, google::protobuf::Arena& aren } else { - // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); } return ::grpc::Status::OK; @@ -870,14 +747,6 @@ ::grpc::Status MonikerReadDigitalScalarU32(void* data, google::protobuf::Arena& auto status = library->ReadDigitalScalarU32(task, timeout, &value, reserved); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - */ if (status >= 0) { response->set_status(status); @@ -886,7 +755,7 @@ ::grpc::Status MonikerReadDigitalScalarU32(void* data, google::protobuf::Arena& } else { - // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); } return ::grpc::Status::OK; @@ -908,24 +777,6 @@ ::grpc::Status MonikerReadDigitalU16(void* data, google::protobuf::Arena& arena, auto status = library->ReadDigitalU16(task, num_samps_per_chan, timeout, fill_mode, read_array.data(), array_size_in_samps, &samps_per_chan_read, reserved); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->mutable_read_array()->Clear(); - response->mutable_read_array()->Reserve(array_size_in_samps); - std::transform( - read_array.begin(), - read_array.begin() + array_size_in_samps, - google::protobuf::RepeatedFieldBackInserter(response->mutable_read_array()), - [&](auto x) { - return x; - }); - response->set_samps_per_chan_read(samps_per_chan_read); - */ if (status >= 0) { response->set_status(status); @@ -943,7 +794,7 @@ ::grpc::Status MonikerReadDigitalU16(void* data, google::protobuf::Arena& arena, } else { - // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); } return ::grpc::Status::OK; @@ -966,15 +817,6 @@ ::grpc::Status MonikerReadDigitalU32(void* data, google::protobuf::Arena& arena, auto status = library->ReadDigitalU32(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_samps_per_chan_read(samps_per_chan_read); - */ if (status >= 0) { response->set_status(status); @@ -983,7 +825,7 @@ ::grpc::Status MonikerReadDigitalU32(void* data, google::protobuf::Arena& arena, } else { - // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); } return ::grpc::Status::OK; @@ -1000,14 +842,6 @@ ::grpc::Status MonikerWaitForNextSampleClock(void* data, google::protobuf::Arena auto status = library->WaitForNextSampleClock(task, timeout, &is_late); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_is_late(is_late); - */ if (status >= 0) { response->set_status(status); @@ -1016,7 +850,7 @@ ::grpc::Status MonikerWaitForNextSampleClock(void* data, google::protobuf::Arena } else { - // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); } return ::grpc::Status::OK; diff --git a/generated/nifpga/nifpga_service.cpp b/generated/nifpga/nifpga_service.cpp index cf495f7e2..ee281e704 100644 --- a/generated/nifpga/nifpga_service.cpp +++ b/generated/nifpga/nifpga_service.cpp @@ -487,14 +487,6 @@ ::grpc::Status MonikerReadArrayBool(void* data, google::protobuf::Arena& arena, auto status = library->ReadArrayBool(session, indicator, array.data(), size); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - convert_to_grpc(array, response->mutable_array()); - */ if (status >= 0) { response->set_status(status); @@ -503,7 +495,7 @@ ::grpc::Status MonikerReadArrayBool(void* data, google::protobuf::Arena& arena, } else { - // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); } return ::grpc::Status::OK; @@ -522,13 +514,6 @@ ::grpc::Status MonikerReadArrayDbl(void* data, google::protobuf::Arena& arena, g auto status = library->ReadArrayDbl(session, indicator, array, size); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - */ if (status >= 0) { response->set_status(status); @@ -536,7 +521,7 @@ ::grpc::Status MonikerReadArrayDbl(void* data, google::protobuf::Arena& arena, g } else { - // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); } return ::grpc::Status::OK; @@ -554,22 +539,6 @@ ::grpc::Status MonikerReadArrayI16(void* data, google::protobuf::Arena& arena, g auto status = library->ReadArrayI16(session, indicator, array.data(), size); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->mutable_array()->Clear(); - response->mutable_array()->Reserve(size); - std::transform( - array.begin(), - array.begin() + size, - google::protobuf::RepeatedFieldBackInserter(response->mutable_array()), - [&](auto x) { - return x; - }); - */ if (status >= 0) { response->set_status(status); @@ -586,7 +555,7 @@ ::grpc::Status MonikerReadArrayI16(void* data, google::protobuf::Arena& arena, g } else { - // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); } return ::grpc::Status::OK; @@ -605,13 +574,6 @@ ::grpc::Status MonikerReadArrayI32(void* data, google::protobuf::Arena& arena, g auto status = library->ReadArrayI32(session, indicator, array, size); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - */ if (status >= 0) { response->set_status(status); @@ -619,7 +581,7 @@ ::grpc::Status MonikerReadArrayI32(void* data, google::protobuf::Arena& arena, g } else { - // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); } return ::grpc::Status::OK; @@ -638,13 +600,6 @@ ::grpc::Status MonikerReadArrayI64(void* data, google::protobuf::Arena& arena, g auto status = library->ReadArrayI64(session, indicator, array, size); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - */ if (status >= 0) { response->set_status(status); @@ -652,7 +607,7 @@ ::grpc::Status MonikerReadArrayI64(void* data, google::protobuf::Arena& arena, g } else { - // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); } return ::grpc::Status::OK; @@ -670,22 +625,6 @@ ::grpc::Status MonikerReadArrayI8(void* data, google::protobuf::Arena& arena, go auto status = library->ReadArrayI8(session, indicator, array.data(), size); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->mutable_array()->Clear(); - response->mutable_array()->Reserve(size); - std::transform( - array.begin(), - array.begin() + size, - google::protobuf::RepeatedFieldBackInserter(response->mutable_array()), - [&](auto x) { - return x; - }); - */ if (status >= 0) { response->set_status(status); @@ -702,7 +641,7 @@ ::grpc::Status MonikerReadArrayI8(void* data, google::protobuf::Arena& arena, go } else { - // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); } return ::grpc::Status::OK; @@ -721,13 +660,6 @@ ::grpc::Status MonikerReadArraySgl(void* data, google::protobuf::Arena& arena, g auto status = library->ReadArraySgl(session, indicator, array, size); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - */ if (status >= 0) { response->set_status(status); @@ -735,7 +667,7 @@ ::grpc::Status MonikerReadArraySgl(void* data, google::protobuf::Arena& arena, g } else { - // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); } return ::grpc::Status::OK; @@ -753,22 +685,6 @@ ::grpc::Status MonikerReadArrayU16(void* data, google::protobuf::Arena& arena, g auto status = library->ReadArrayU16(session, indicator, array.data(), size); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->mutable_array()->Clear(); - response->mutable_array()->Reserve(size); - std::transform( - array.begin(), - array.begin() + size, - google::protobuf::RepeatedFieldBackInserter(response->mutable_array()), - [&](auto x) { - return x; - }); - */ if (status >= 0) { response->set_status(status); @@ -785,7 +701,7 @@ ::grpc::Status MonikerReadArrayU16(void* data, google::protobuf::Arena& arena, g } else { - // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); } return ::grpc::Status::OK; @@ -804,13 +720,6 @@ ::grpc::Status MonikerReadArrayU32(void* data, google::protobuf::Arena& arena, g auto status = library->ReadArrayU32(session, indicator, array, size); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - */ if (status >= 0) { response->set_status(status); @@ -818,7 +727,7 @@ ::grpc::Status MonikerReadArrayU32(void* data, google::protobuf::Arena& arena, g } else { - // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); } return ::grpc::Status::OK; @@ -837,13 +746,6 @@ ::grpc::Status MonikerReadArrayU64(void* data, google::protobuf::Arena& arena, g auto status = library->ReadArrayU64(session, indicator, array, size); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - */ if (status >= 0) { response->set_status(status); @@ -851,7 +753,7 @@ ::grpc::Status MonikerReadArrayU64(void* data, google::protobuf::Arena& arena, g } else { - // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); } return ::grpc::Status::OK; @@ -869,22 +771,6 @@ ::grpc::Status MonikerReadArrayU8(void* data, google::protobuf::Arena& arena, go auto status = library->ReadArrayU8(session, indicator, array.data(), size); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->mutable_array()->Clear(); - response->mutable_array()->Reserve(size); - std::transform( - array.begin(), - array.begin() + size, - google::protobuf::RepeatedFieldBackInserter(response->mutable_array()), - [&](auto x) { - return x; - }); - */ if (status >= 0) { response->set_status(status); @@ -901,7 +787,7 @@ ::grpc::Status MonikerReadArrayU8(void* data, google::protobuf::Arena& arena, go } else { - // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); } return ::grpc::Status::OK; @@ -918,14 +804,6 @@ ::grpc::Status MonikerReadBool(void* data, google::protobuf::Arena& arena, googl auto status = library->ReadBool(session, indicator, &value); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_value(value); - */ if (status >= 0) { response->set_status(status); @@ -934,7 +812,7 @@ ::grpc::Status MonikerReadBool(void* data, google::protobuf::Arena& arena, googl } else { - // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); } return ::grpc::Status::OK; @@ -951,14 +829,6 @@ ::grpc::Status MonikerReadDbl(void* data, google::protobuf::Arena& arena, google auto status = library->ReadDbl(session, indicator, &value); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_value(value); - */ if (status >= 0) { response->set_status(status); @@ -967,7 +837,7 @@ ::grpc::Status MonikerReadDbl(void* data, google::protobuf::Arena& arena, google } else { - // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); } return ::grpc::Status::OK; @@ -984,14 +854,6 @@ ::grpc::Status MonikerReadI16(void* data, google::protobuf::Arena& arena, google auto status = library->ReadI16(session, indicator, &value); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_value(value); - */ if (status >= 0) { response->set_status(status); @@ -1000,7 +862,7 @@ ::grpc::Status MonikerReadI16(void* data, google::protobuf::Arena& arena, google } else { - // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); } return ::grpc::Status::OK; @@ -1017,14 +879,6 @@ ::grpc::Status MonikerReadI32(void* data, google::protobuf::Arena& arena, google auto status = library->ReadI32(session, indicator, &value); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_value(value); - */ if (status >= 0) { response->set_status(status); @@ -1033,7 +887,7 @@ ::grpc::Status MonikerReadI32(void* data, google::protobuf::Arena& arena, google } else { - // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); } return ::grpc::Status::OK; @@ -1050,14 +904,6 @@ ::grpc::Status MonikerReadI64(void* data, google::protobuf::Arena& arena, google auto status = library->ReadI64(session, indicator, &value); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_value(value); - */ if (status >= 0) { response->set_status(status); @@ -1066,7 +912,7 @@ ::grpc::Status MonikerReadI64(void* data, google::protobuf::Arena& arena, google } else { - // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); } return ::grpc::Status::OK; @@ -1083,14 +929,6 @@ ::grpc::Status MonikerReadI8(void* data, google::protobuf::Arena& arena, google: auto status = library->ReadI8(session, indicator, &value); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_value(value); - */ if (status >= 0) { response->set_status(status); @@ -1099,7 +937,7 @@ ::grpc::Status MonikerReadI8(void* data, google::protobuf::Arena& arena, google: } else { - // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); } return ::grpc::Status::OK; @@ -1116,14 +954,6 @@ ::grpc::Status MonikerReadSgl(void* data, google::protobuf::Arena& arena, google auto status = library->ReadSgl(session, indicator, &value); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_value(value); - */ if (status >= 0) { response->set_status(status); @@ -1132,7 +962,7 @@ ::grpc::Status MonikerReadSgl(void* data, google::protobuf::Arena& arena, google } else { - // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); } return ::grpc::Status::OK; @@ -1149,14 +979,6 @@ ::grpc::Status MonikerReadU16(void* data, google::protobuf::Arena& arena, google auto status = library->ReadU16(session, indicator, &value); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_value(value); - */ if (status >= 0) { response->set_status(status); @@ -1165,7 +987,7 @@ ::grpc::Status MonikerReadU16(void* data, google::protobuf::Arena& arena, google } else { - // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); } return ::grpc::Status::OK; @@ -1182,14 +1004,6 @@ ::grpc::Status MonikerReadU32(void* data, google::protobuf::Arena& arena, google auto status = library->ReadU32(session, indicator, &value); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_value(value); - */ if (status >= 0) { response->set_status(status); @@ -1198,7 +1012,7 @@ ::grpc::Status MonikerReadU32(void* data, google::protobuf::Arena& arena, google } else { - // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); } return ::grpc::Status::OK; @@ -1215,14 +1029,6 @@ ::grpc::Status MonikerReadU64(void* data, google::protobuf::Arena& arena, google auto status = library->ReadU64(session, indicator, &value); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_value(value); - */ if (status >= 0) { response->set_status(status); @@ -1231,7 +1037,7 @@ ::grpc::Status MonikerReadU64(void* data, google::protobuf::Arena& arena, google } else { - // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); } return ::grpc::Status::OK; @@ -1248,14 +1054,6 @@ ::grpc::Status MonikerReadU8(void* data, google::protobuf::Arena& arena, google: auto status = library->ReadU8(session, indicator, &value); - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_value(value); - */ if (status >= 0) { response->set_status(status); @@ -1264,7 +1062,7 @@ ::grpc::Status MonikerReadU8(void* data, google::protobuf::Arena& arena, google: } else { - // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); } return ::grpc::Status::OK; diff --git a/source/codegen/common_helpers.py b/source/codegen/common_helpers.py index 4c4dfbbc8..4153baa52 100644 --- a/source/codegen/common_helpers.py +++ b/source/codegen/common_helpers.py @@ -1222,7 +1222,7 @@ def get_data_moniker_function_name(function_name): def get_data_moniker_struct_name(begin_function_name): - """Return the Moniker function name.. + """Return the Moniker function name. Input expected is Begin* streaming API name. """ @@ -1277,12 +1277,7 @@ def _is_streaming_param_input_array(streaming_param): def get_input_streaming_params(parameters): """Determine if a parameter should be included based on streaming conditions.""" - streaming_param = None - for param in parameters: - if param.get("is_streaming_type", False): - streaming_param = param - break - + streaming_param = get_first_streaming_parameter(parameters) params = [] for param in parameters: if is_input_parameter(param) and not param.get("is_streaming_type", False): diff --git a/source/codegen/templates/proto.mako b/source/codegen/templates/proto.mako index 8d4d9a897..8bba31343 100644 --- a/source/codegen/templates/proto.mako +++ b/source/codegen/templates/proto.mako @@ -69,7 +69,7 @@ ${mako_helper.define_request_message(function, input_parameters)}\ ${mako_helper.define_response_message(function, output_parameters)}\ % if common_helpers.is_moniker_streaming_function(functions[function]): -${mako_helper.define_moniker_request_response_message(function, functions)}\ +${mako_helper.define_moniker_request_response_messages(function, functions)}\ % endif % endfor \ No newline at end of file diff --git a/source/codegen/templates/proto_helpers.mako b/source/codegen/templates/proto_helpers.mako index c3034a556..92a8cb6c8 100644 --- a/source/codegen/templates/proto_helpers.mako +++ b/source/codegen/templates/proto_helpers.mako @@ -113,12 +113,11 @@ message ${common_helpers.snake_to_pascal(function)}Response { } -## Define a proto message moniker streaming function. -<%def name="define_moniker_request_response_message(begin_function_name, functions)">\ +## Define a proto request and response messages for Moniker function. +<%def name="define_moniker_request_response_messages(begin_function_name, functions)">\ <% non_streaming_function_name = begin_function_name.replace("Begin", "") input_parameters, output_parameters = common_helpers.get_data_moniker_function_parameters(functions[non_streaming_function_name]) - request_parameters = proto_helpers.get_message_parameter_definitions(input_parameters) response_parameters = proto_helpers.get_message_parameter_definitions(output_parameters) request_message_type = common_helpers.get_data_moniker_request_message_type(begin_function_name) diff --git a/source/codegen/templates/service_helpers.mako b/source/codegen/templates/service_helpers.mako index 8cfb009de..2165b020d 100644 --- a/source/codegen/templates/service_helpers.mako +++ b/source/codegen/templates/service_helpers.mako @@ -279,9 +279,9 @@ ${populate_response(function_data=function_data, parameters=parameters)}\ config = data['config'] service_class_prefix = config["service_class_prefix"] struct_name = common_helpers.get_data_moniker_struct_name(begin_function_name) + streaming_params_to_include = common_helpers.get_input_streaming_params(parameters) request_message_type = common_helpers.get_data_moniker_request_message_type(begin_function_name) response_message_type = common_helpers.get_data_moniker_response_message_type(begin_function_name) - streaming_params_to_include = common_helpers.get_input_streaming_params(parameters) %>\ struct ${struct_name} { @@ -305,50 +305,40 @@ ${populate_response(function_data=function_data, parameters=parameters)}\ <%def name="define_moniker_function_body(function_name, functions)">\ <% - config = data['config'] function_data = functions[function_name] struct_name = common_helpers.get_data_moniker_struct_name(function_name) moniker_function_name = common_helpers.get_data_moniker_function_name(function_name) non_streaming_function_name = function_name.replace("Begin", "") + non_streaming_function_parameters = functions[non_streaming_function_name]['parameters'] + arg_string = service_helpers.create_args(non_streaming_function_parameters) streaming_param = common_helpers.get_first_streaming_parameter(function_data['parameters']) - streaming_type = streaming_param['type'] - grpc_streaming_type = streaming_param['grpc_streaming_type'] - moniker_params = function_data['parameters'][:-1] # skip "moniker" param from Begin API - arg_string = service_helpers.create_args(moniker_params) - data_type = streaming_type.replace("[]", "") c_api_name = service_helpers.get_c_api_name(function_name) streaming_params_to_include = common_helpers.get_input_streaming_params(function_data['parameters']) - output_parameters = [p for p in functions[non_streaming_function_name]['parameters'] if common_helpers.is_output_parameter(p)] + output_parameters = [p for p in non_streaming_function_parameters if common_helpers.is_output_parameter(p)] %>\ ::grpc::Status ${moniker_function_name}(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { ${struct_name}* function_data = static_cast<${struct_name}*>(data); auto library = function_data->library; - auto response = &function_data->response;\ + auto response = &function_data->response; ${initialize_moniker_input_parameters(streaming_params_to_include)}\ ${initialize_output_params(output_parameters)}\ % if streaming_param and streaming_param['direction'] == 'in': -${streaming_handle_in_direction(c_api_name, arg_string, data_type, grpc_streaming_type, streaming_type, streaming_param)}\ +${streaming_handle_in_direction(streaming_param)}\ % endif auto status = library->${c_api_name}(${arg_string}); % if streaming_param['direction'] == 'out': - /* TODO context is unavailable to return error the proper way. Also error API is member of service class, this function is not. - ::grpc::ServerContext* context = NULL; -${populate_response(function_data=function_data, parameters=functions[non_streaming_function_name]['parameters'])}\ - */ if (status >= 0) { response->set_status(status); -<%block filter="common_helpers.indent(-1)">\ ${set_response_values(output_parameters=output_parameters, init_method=false)}\ -\ packedData.PackFrom(*response); } else { - // TODO this is not needed if we make populate_response work which returns error through `AddTrailingMetadata` + // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); } % endif @@ -380,14 +370,16 @@ ${initialize_service_output_params(output_params, streaming_param)}\ return ::grpc::Status::OK;\ -<%def name="streaming_handle_in_direction(c_api_name, arg_string, data_type, grpc_streaming_type, streaming_type, streaming_param)"> +<%def name="streaming_handle_in_direction(streaming_param)"> <% + streaming_type = streaming_param['type'] + grpc_streaming_type = streaming_param['grpc_streaming_type'] is_array = common_helpers.is_array(streaming_type) %>\ ${grpc_streaming_type} ${grpc_streaming_type.lower()}_message; packedData.UnpackTo(&${grpc_streaming_type.lower()}_message); // TODO: should unpack to function_data->mutable_request() % if is_array: - ${streaming_handle_in_direction_array(data_type, grpc_streaming_type, streaming_param)}\ + ${streaming_handle_in_direction_array(grpc_streaming_type, streaming_param)}\ % else: ${streaming_handle_in_direction_scaler(grpc_streaming_type, streaming_type, streaming_param)}\ % endif @@ -406,17 +398,18 @@ auto value = ${grpc_streaming_type.lower()}_message.value(); % endif -<%def name="streaming_handle_in_direction_array(data_type, grpc_streaming_type, streaming_param)"> +<%def name="streaming_handle_in_direction_array(grpc_streaming_type, streaming_param)"> <% is_coerced = service_helpers.is_input_array_that_needs_coercion(streaming_param) c_element_type_that_needs_coercion = service_helpers.get_c_element_type_for_array_that_needs_coercion(streaming_param) streaming_param_name = common_helpers.camel_to_snake(streaming_param['name']) - underlying_param_type = common_helpers.get_underlying_type_name(streaming_param["type"]).replace("const ", "") + underlying_param_type = common_helpers.get_underlying_type_name(streaming_param["type"]) + underlying_param_type_with_no_qualifiers = underlying_param_type.replace("const ", "") %>\ % if common_helpers.supports_standard_copy_conversion_routines(streaming_param): auto data_array = ${grpc_streaming_type.lower()}_message.value(); - std::vector<${data_type}> ${streaming_param_name}(data_array.begin(), data_array.end()); + std::vector<${underlying_param_type}> ${streaming_param_name}(data_array.begin(), data_array.end()); auto size = data_array.size(); % elif is_coerced: auto data_array = ${grpc_streaming_type.lower()}_message.value(); @@ -436,10 +429,10 @@ auto value = ${grpc_streaming_type.lower()}_message.value(); }); % else: auto data_array = ${grpc_streaming_type.lower()}_message.value(); -% if common_helpers.is_driver_typedef_with_same_size_but_different_qualifiers(underlying_param_type): - auto ${streaming_param_name} = reinterpret_cast<${data_type}*>(${grpc_streaming_type.lower()}_message.value().data()); +% if common_helpers.is_driver_typedef_with_same_size_but_different_qualifiers(underlying_param_type_with_no_qualifiers): + auto ${streaming_param_name} = reinterpret_cast<${underlying_param_type}*>(${grpc_streaming_type.lower()}_message.value().data()); % else: - auto ${streaming_param_name} = const_cast<${data_type}*>(${grpc_streaming_type.lower()}_message.value().data()); + auto ${streaming_param_name} = const_cast<${underlying_param_type}*>(${grpc_streaming_type.lower()}_message.value().data()); % endif auto size = data_array.size(); % endif @@ -462,7 +455,7 @@ ${initialize_input_param(function_name, param, parameters)}\ % endfor -<%def name="initialize_moniker_input_parameters(streaming_params_to_include)"> +<%def name="initialize_moniker_input_parameters(streaming_params_to_include)">\ % for parameter in streaming_params_to_include: <% parameter_name = common_helpers.get_cpp_local_name(parameter) From 09f34aa16565ea3e771480fee899d11d60ad80e3 Mon Sep 17 00:00:00 2001 From: Rohan Doshi Date: Sat, 23 Nov 2024 23:38:07 +0530 Subject: [PATCH 10/25] fix tests --- .../ni_fake_fpga_streaming_tests.cpp | 40 +++++++++---------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/source/tests/integration/ni_fake_fpga_streaming_tests.cpp b/source/tests/integration/ni_fake_fpga_streaming_tests.cpp index a4026c802..6382a101f 100644 --- a/source/tests/integration/ni_fake_fpga_streaming_tests.cpp +++ b/source/tests/integration/ni_fake_fpga_streaming_tests.cpp @@ -133,8 +133,8 @@ TEST_F(NiFakeFpgaStreamingTests, StreamRead_scalar) for (int i = 0; i < 5; i++) { // Read data - nifpga_grpc::I32Data read_value_i32; - nifpga_grpc::I64Data read_value_i64; + nifpga_grpc::ReadI32StreamingResponse read_value_i32; + nifpga_grpc::ReadI64StreamingResponse read_value_i64; ni::data_monikers::MonikerReadResponse read_result; stream->Read(&read_result); @@ -181,18 +181,18 @@ TEST_F(NiFakeFpgaStreamingTests, StreamRead_Array) for (int i = 0; i < 5; i++) { // Read data - nifpga_grpc::ArrayI32Data read_values_i32; - nifpga_grpc::ArrayI64Data read_values_i64; + nifpga_grpc::ReadArrayI32StreamingResponse read_values_i32; + nifpga_grpc::ReadArrayI64StreamingResponse read_values_i64; ni::data_monikers::MonikerReadResponse read_result; stream->Read(&read_result); read_result.data().values(0).UnpackTo(&read_values_i32); read_result.data().values(1).UnpackTo(&read_values_i64); - ASSERT_THAT(read_values_i32.value(), SizeIs(10)); - ASSERT_THAT(read_values_i32.value(), ElementsAreArray(data_int_i32)); - ASSERT_THAT(read_values_i64.value(), SizeIs(9)); - ASSERT_THAT(read_values_i64.value(), ElementsAreArray(data_int_i64)); + ASSERT_THAT(read_values_i32.array(), SizeIs(10)); + ASSERT_THAT(read_values_i32.array(), ElementsAreArray(data_int_i32)); + ASSERT_THAT(read_values_i64.array(), SizeIs(9)); + ASSERT_THAT(read_values_i64.array(), ElementsAreArray(data_int_i64)); } moniker_context.TryCancel(); @@ -319,18 +319,18 @@ TEST_F(NiFakeFpgaStreamingTests, StreamReadWrite_Array) write_stream->Write(write_data_request); - nifpga_grpc::ArrayI32Data read_values_i32; - nifpga_grpc::ArrayI64Data read_values_i64; + nifpga_grpc::ReadArrayI32StreamingResponse read_values_i32; + nifpga_grpc::ReadArrayI64StreamingResponse read_values_i64; ni::data_monikers::MonikerReadResponse read_result; write_stream->Read(&read_result); read_result.data().values(0).UnpackTo(&read_values_i32); read_result.data().values(1).UnpackTo(&read_values_i64); - ASSERT_THAT(read_values_i32.value(), SizeIs(read_size_i32)); - ASSERT_THAT(read_values_i32.value(), ElementsAreArray(read_data_int32)); - ASSERT_THAT(read_values_i64.value(), SizeIs(read_size_i64)); - ASSERT_THAT(read_values_i64.value(), ElementsAreArray(read_data_int64)); + ASSERT_THAT(read_values_i32.array(), SizeIs(read_size_i32)); + ASSERT_THAT(read_values_i32.array(), ElementsAreArray(read_data_int32)); + ASSERT_THAT(read_values_i64.array(), SizeIs(read_size_i64)); + ASSERT_THAT(read_values_i64.array(), ElementsAreArray(read_data_int64)); } write_stream->WritesDone(); @@ -405,18 +405,18 @@ TEST_F(NiFakeFpgaStreamingTests, DISABLED_SidebandStreamReadWrite_Array) WriteSidebandMessage(sideband_token, write_data_request); - nifpga_grpc::ArrayI32Data read_values_i32; - nifpga_grpc::ArrayI64Data read_values_i64; + nifpga_grpc::ReadArrayI32StreamingResponse read_values_i32; + nifpga_grpc::ReadArrayI64StreamingResponse read_values_i64; ni::data_monikers::SidebandReadResponse read_result; ReadSidebandMessage(sideband_token, &read_result); read_result.values().values(0).UnpackTo(&read_values_i32); read_result.values().values(1).UnpackTo(&read_values_i64); - ASSERT_THAT(read_values_i32.value(), SizeIs(10)); - ASSERT_THAT(read_values_i32.value(), ElementsAreArray(data_int32)); - ASSERT_THAT(read_values_i64.value(), SizeIs(9)); - ASSERT_THAT(read_values_i64.value(), ElementsAreArray(data_int64)); + ASSERT_THAT(read_values_i32.array(), SizeIs(10)); + ASSERT_THAT(read_values_i32.array(), ElementsAreArray(data_int32)); + ASSERT_THAT(read_values_i64.array(), SizeIs(9)); + ASSERT_THAT(read_values_i64.array(), ElementsAreArray(data_int64)); } ni::data_monikers::SidebandWriteRequest cancel_request; From 11fff46a739406609ae38cc9e8be199423153238 Mon Sep 17 00:00:00 2001 From: Rohan Doshi Date: Sun, 24 Nov 2024 02:25:43 +0530 Subject: [PATCH 11/25] script and cpp cleanup --- generated/nidaqmx/nidaqmx_service.cpp | 66 ++++------ generated/nifpga/nifpga_service.cpp | 110 +++++++---------- source/codegen/common_helpers.py | 4 +- source/codegen/templates/service.cpp.mako | 2 +- source/codegen/templates/service_helpers.mako | 114 ++++++++---------- 5 files changed, 124 insertions(+), 172 deletions(-) diff --git a/generated/nidaqmx/nidaqmx_service.cpp b/generated/nidaqmx/nidaqmx_service.cpp index 0d40fc7af..5c9eda6c6 100644 --- a/generated/nidaqmx/nidaqmx_service.cpp +++ b/generated/nidaqmx/nidaqmx_service.cpp @@ -389,8 +389,7 @@ ::grpc::Status MonikerReadAnalogF64(void* data, google::protobuf::Arena& arena, } else { - // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } return ::grpc::Status::OK; } @@ -415,8 +414,7 @@ ::grpc::Status MonikerReadAnalogScalarF64(void* data, google::protobuf::Arena& a } else { - // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } return ::grpc::Status::OK; } @@ -454,8 +452,7 @@ ::grpc::Status MonikerReadBinaryI16(void* data, google::protobuf::Arena& arena, } else { - // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } return ::grpc::Status::OK; } @@ -485,8 +482,7 @@ ::grpc::Status MonikerReadBinaryI32(void* data, google::protobuf::Arena& arena, } else { - // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } return ::grpc::Status::OK; } @@ -524,8 +520,7 @@ ::grpc::Status MonikerReadBinaryU16(void* data, google::protobuf::Arena& arena, } else { - // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } return ::grpc::Status::OK; } @@ -555,8 +550,7 @@ ::grpc::Status MonikerReadBinaryU32(void* data, google::protobuf::Arena& arena, } else { - // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } return ::grpc::Status::OK; } @@ -585,8 +579,7 @@ ::grpc::Status MonikerReadCounterF64(void* data, google::protobuf::Arena& arena, } else { - // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } return ::grpc::Status::OK; } @@ -616,8 +609,7 @@ ::grpc::Status MonikerReadCounterF64Ex(void* data, google::protobuf::Arena& aren } else { - // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } return ::grpc::Status::OK; } @@ -642,8 +634,7 @@ ::grpc::Status MonikerReadCounterScalarF64(void* data, google::protobuf::Arena& } else { - // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } return ::grpc::Status::OK; } @@ -668,8 +659,7 @@ ::grpc::Status MonikerReadCounterScalarU32(void* data, google::protobuf::Arena& } else { - // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } return ::grpc::Status::OK; } @@ -698,8 +688,7 @@ ::grpc::Status MonikerReadCounterU32(void* data, google::protobuf::Arena& arena, } else { - // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } return ::grpc::Status::OK; } @@ -729,8 +718,7 @@ ::grpc::Status MonikerReadCounterU32Ex(void* data, google::protobuf::Arena& aren } else { - // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } return ::grpc::Status::OK; } @@ -755,8 +743,7 @@ ::grpc::Status MonikerReadDigitalScalarU32(void* data, google::protobuf::Arena& } else { - // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } return ::grpc::Status::OK; } @@ -794,8 +781,7 @@ ::grpc::Status MonikerReadDigitalU16(void* data, google::protobuf::Arena& arena, } else { - // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } return ::grpc::Status::OK; } @@ -825,8 +811,7 @@ ::grpc::Status MonikerReadDigitalU32(void* data, google::protobuf::Arena& arena, } else { - // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } return ::grpc::Status::OK; } @@ -850,8 +835,7 @@ ::grpc::Status MonikerWaitForNextSampleClock(void* data, google::protobuf::Arena } else { - // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } return ::grpc::Status::OK; } @@ -870,7 +854,7 @@ ::grpc::Status MonikerWriteAnalogF64(void* data, google::protobuf::Arena& arena, int32 samps_per_chan_written {}; ArrayDoubleData arraydoubledata_message; - packedData.UnpackTo(&arraydoubledata_message); // TODO: should unpack to function_data->mutable_request() + packedData.UnpackTo(&arraydoubledata_message); auto data_array = arraydoubledata_message.value(); auto write_array = const_cast(arraydoubledata_message.value().data()); @@ -892,7 +876,7 @@ ::grpc::Status MonikerWriteAnalogScalarF64(void* data, google::protobuf::Arena& auto reserved = function_data->reserved; DoubleData doubledata_message; - packedData.UnpackTo(&doubledata_message); // TODO: should unpack to function_data->mutable_request() + packedData.UnpackTo(&doubledata_message); auto value = doubledata_message.value(); auto status = library->WriteAnalogScalarF64(task, auto_start, timeout, value, reserved); @@ -914,7 +898,7 @@ ::grpc::Status MonikerWriteBinaryI16(void* data, google::protobuf::Arena& arena, int32 samps_per_chan_written {}; ArrayI16Data arrayi16data_message; - packedData.UnpackTo(&arrayi16data_message); // TODO: should unpack to function_data->mutable_request() + packedData.UnpackTo(&arrayi16data_message); auto data_array = arrayi16data_message.value(); auto write_array = std::vector(); @@ -951,7 +935,7 @@ ::grpc::Status MonikerWriteBinaryI32(void* data, google::protobuf::Arena& arena, int32 samps_per_chan_written {}; ArrayI32Data arrayi32data_message; - packedData.UnpackTo(&arrayi32data_message); // TODO: should unpack to function_data->mutable_request() + packedData.UnpackTo(&arrayi32data_message); auto data_array = arrayi32data_message.value(); auto write_array = reinterpret_cast(arrayi32data_message.value().data()); @@ -976,7 +960,7 @@ ::grpc::Status MonikerWriteBinaryU16(void* data, google::protobuf::Arena& arena, int32 samps_per_chan_written {}; ArrayU16Data arrayu16data_message; - packedData.UnpackTo(&arrayu16data_message); // TODO: should unpack to function_data->mutable_request() + packedData.UnpackTo(&arrayu16data_message); auto data_array = arrayu16data_message.value(); auto write_array = std::vector(); @@ -1013,7 +997,7 @@ ::grpc::Status MonikerWriteBinaryU32(void* data, google::protobuf::Arena& arena, int32 samps_per_chan_written {}; ArrayU32Data arrayu32data_message; - packedData.UnpackTo(&arrayu32data_message); // TODO: should unpack to function_data->mutable_request() + packedData.UnpackTo(&arrayu32data_message); auto data_array = arrayu32data_message.value(); auto write_array = reinterpret_cast(arrayu32data_message.value().data()); @@ -1035,7 +1019,7 @@ ::grpc::Status MonikerWriteDigitalScalarU32(void* data, google::protobuf::Arena& auto reserved = function_data->reserved; U32Data u32data_message; - packedData.UnpackTo(&u32data_message); // TODO: should unpack to function_data->mutable_request() + packedData.UnpackTo(&u32data_message); auto value = u32data_message.value(); auto status = library->WriteDigitalScalarU32(task, auto_start, timeout, value, reserved); @@ -1057,7 +1041,7 @@ ::grpc::Status MonikerWriteDigitalU16(void* data, google::protobuf::Arena& arena int32 samps_per_chan_written {}; ArrayU16Data arrayu16data_message; - packedData.UnpackTo(&arrayu16data_message); // TODO: should unpack to function_data->mutable_request() + packedData.UnpackTo(&arrayu16data_message); auto data_array = arrayu16data_message.value(); auto write_array = std::vector(); @@ -1094,7 +1078,7 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena int32 samps_per_chan_written {}; ArrayU32Data arrayu32data_message; - packedData.UnpackTo(&arrayu32data_message); // TODO: should unpack to function_data->mutable_request() + packedData.UnpackTo(&arrayu32data_message); auto data_array = arrayu32data_message.value(); auto write_array = reinterpret_cast(arrayu32data_message.value().data()); diff --git a/generated/nifpga/nifpga_service.cpp b/generated/nifpga/nifpga_service.cpp index ee281e704..d2bac0d0b 100644 --- a/generated/nifpga/nifpga_service.cpp +++ b/generated/nifpga/nifpga_service.cpp @@ -495,8 +495,7 @@ ::grpc::Status MonikerReadArrayBool(void* data, google::protobuf::Arena& arena, } else { - // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } return ::grpc::Status::OK; } @@ -521,8 +520,7 @@ ::grpc::Status MonikerReadArrayDbl(void* data, google::protobuf::Arena& arena, g } else { - // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } return ::grpc::Status::OK; } @@ -555,8 +553,7 @@ ::grpc::Status MonikerReadArrayI16(void* data, google::protobuf::Arena& arena, g } else { - // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } return ::grpc::Status::OK; } @@ -581,8 +578,7 @@ ::grpc::Status MonikerReadArrayI32(void* data, google::protobuf::Arena& arena, g } else { - // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } return ::grpc::Status::OK; } @@ -607,8 +603,7 @@ ::grpc::Status MonikerReadArrayI64(void* data, google::protobuf::Arena& arena, g } else { - // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } return ::grpc::Status::OK; } @@ -641,8 +636,7 @@ ::grpc::Status MonikerReadArrayI8(void* data, google::protobuf::Arena& arena, go } else { - // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } return ::grpc::Status::OK; } @@ -667,8 +661,7 @@ ::grpc::Status MonikerReadArraySgl(void* data, google::protobuf::Arena& arena, g } else { - // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } return ::grpc::Status::OK; } @@ -701,8 +694,7 @@ ::grpc::Status MonikerReadArrayU16(void* data, google::protobuf::Arena& arena, g } else { - // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } return ::grpc::Status::OK; } @@ -727,8 +719,7 @@ ::grpc::Status MonikerReadArrayU32(void* data, google::protobuf::Arena& arena, g } else { - // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } return ::grpc::Status::OK; } @@ -753,8 +744,7 @@ ::grpc::Status MonikerReadArrayU64(void* data, google::protobuf::Arena& arena, g } else { - // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } return ::grpc::Status::OK; } @@ -787,8 +777,7 @@ ::grpc::Status MonikerReadArrayU8(void* data, google::protobuf::Arena& arena, go } else { - // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } return ::grpc::Status::OK; } @@ -812,8 +801,7 @@ ::grpc::Status MonikerReadBool(void* data, google::protobuf::Arena& arena, googl } else { - // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } return ::grpc::Status::OK; } @@ -837,8 +825,7 @@ ::grpc::Status MonikerReadDbl(void* data, google::protobuf::Arena& arena, google } else { - // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } return ::grpc::Status::OK; } @@ -862,8 +849,7 @@ ::grpc::Status MonikerReadI16(void* data, google::protobuf::Arena& arena, google } else { - // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } return ::grpc::Status::OK; } @@ -887,8 +873,7 @@ ::grpc::Status MonikerReadI32(void* data, google::protobuf::Arena& arena, google } else { - // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } return ::grpc::Status::OK; } @@ -912,8 +897,7 @@ ::grpc::Status MonikerReadI64(void* data, google::protobuf::Arena& arena, google } else { - // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } return ::grpc::Status::OK; } @@ -937,8 +921,7 @@ ::grpc::Status MonikerReadI8(void* data, google::protobuf::Arena& arena, google: } else { - // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } return ::grpc::Status::OK; } @@ -962,8 +945,7 @@ ::grpc::Status MonikerReadSgl(void* data, google::protobuf::Arena& arena, google } else { - // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } return ::grpc::Status::OK; } @@ -987,8 +969,7 @@ ::grpc::Status MonikerReadU16(void* data, google::protobuf::Arena& arena, google } else { - // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } return ::grpc::Status::OK; } @@ -1012,8 +993,7 @@ ::grpc::Status MonikerReadU32(void* data, google::protobuf::Arena& arena, google } else { - // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } return ::grpc::Status::OK; } @@ -1037,8 +1017,7 @@ ::grpc::Status MonikerReadU64(void* data, google::protobuf::Arena& arena, google } else { - // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } return ::grpc::Status::OK; } @@ -1062,8 +1041,7 @@ ::grpc::Status MonikerReadU8(void* data, google::protobuf::Arena& arena, google: } else { - // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } return ::grpc::Status::OK; } @@ -1077,7 +1055,7 @@ ::grpc::Status MonikerWriteArrayBool(void* data, google::protobuf::Arena& arena, auto control = function_data->control; ArrayBoolData arraybooldata_message; - packedData.UnpackTo(&arraybooldata_message); // TODO: should unpack to function_data->mutable_request() + packedData.UnpackTo(&arraybooldata_message); auto data_array = arraybooldata_message.value(); std::vector array(data_array.begin(), data_array.end()); @@ -1097,7 +1075,7 @@ ::grpc::Status MonikerWriteArrayDbl(void* data, google::protobuf::Arena& arena, auto control = function_data->control; ArrayDoubleData arraydoubledata_message; - packedData.UnpackTo(&arraydoubledata_message); // TODO: should unpack to function_data->mutable_request() + packedData.UnpackTo(&arraydoubledata_message); auto data_array = arraydoubledata_message.value(); auto array = const_cast(arraydoubledata_message.value().data()); @@ -1117,7 +1095,7 @@ ::grpc::Status MonikerWriteArrayI16(void* data, google::protobuf::Arena& arena, auto control = function_data->control; ArrayI32Data arrayi32data_message; - packedData.UnpackTo(&arrayi32data_message); // TODO: should unpack to function_data->mutable_request() + packedData.UnpackTo(&arrayi32data_message); auto data_array = arrayi32data_message.value(); auto array = std::vector(); @@ -1149,7 +1127,7 @@ ::grpc::Status MonikerWriteArrayI32(void* data, google::protobuf::Arena& arena, auto control = function_data->control; ArrayI32Data arrayi32data_message; - packedData.UnpackTo(&arrayi32data_message); // TODO: should unpack to function_data->mutable_request() + packedData.UnpackTo(&arrayi32data_message); auto data_array = arrayi32data_message.value(); auto array = const_cast(arrayi32data_message.value().data()); @@ -1169,7 +1147,7 @@ ::grpc::Status MonikerWriteArrayI64(void* data, google::protobuf::Arena& arena, auto control = function_data->control; ArrayI64Data arrayi64data_message; - packedData.UnpackTo(&arrayi64data_message); // TODO: should unpack to function_data->mutable_request() + packedData.UnpackTo(&arrayi64data_message); auto data_array = arrayi64data_message.value(); auto array = const_cast(arrayi64data_message.value().data()); @@ -1189,7 +1167,7 @@ ::grpc::Status MonikerWriteArrayI8(void* data, google::protobuf::Arena& arena, g auto control = function_data->control; ArrayI32Data arrayi32data_message; - packedData.UnpackTo(&arrayi32data_message); // TODO: should unpack to function_data->mutable_request() + packedData.UnpackTo(&arrayi32data_message); auto data_array = arrayi32data_message.value(); auto array = std::vector(); @@ -1221,7 +1199,7 @@ ::grpc::Status MonikerWriteArraySgl(void* data, google::protobuf::Arena& arena, auto control = function_data->control; ArrayFloatData arrayfloatdata_message; - packedData.UnpackTo(&arrayfloatdata_message); // TODO: should unpack to function_data->mutable_request() + packedData.UnpackTo(&arrayfloatdata_message); auto data_array = arrayfloatdata_message.value(); auto array = const_cast(arrayfloatdata_message.value().data()); @@ -1241,7 +1219,7 @@ ::grpc::Status MonikerWriteArrayU16(void* data, google::protobuf::Arena& arena, auto control = function_data->control; ArrayU32Data arrayu32data_message; - packedData.UnpackTo(&arrayu32data_message); // TODO: should unpack to function_data->mutable_request() + packedData.UnpackTo(&arrayu32data_message); auto data_array = arrayu32data_message.value(); auto array = std::vector(); @@ -1273,7 +1251,7 @@ ::grpc::Status MonikerWriteArrayU32(void* data, google::protobuf::Arena& arena, auto control = function_data->control; ArrayU32Data arrayu32data_message; - packedData.UnpackTo(&arrayu32data_message); // TODO: should unpack to function_data->mutable_request() + packedData.UnpackTo(&arrayu32data_message); auto data_array = arrayu32data_message.value(); auto array = const_cast(arrayu32data_message.value().data()); @@ -1293,7 +1271,7 @@ ::grpc::Status MonikerWriteArrayU64(void* data, google::protobuf::Arena& arena, auto control = function_data->control; ArrayU64Data arrayu64data_message; - packedData.UnpackTo(&arrayu64data_message); // TODO: should unpack to function_data->mutable_request() + packedData.UnpackTo(&arrayu64data_message); auto data_array = arrayu64data_message.value(); auto array = const_cast(arrayu64data_message.value().data()); @@ -1313,7 +1291,7 @@ ::grpc::Status MonikerWriteArrayU8(void* data, google::protobuf::Arena& arena, g auto control = function_data->control; ArrayU32Data arrayu32data_message; - packedData.UnpackTo(&arrayu32data_message); // TODO: should unpack to function_data->mutable_request() + packedData.UnpackTo(&arrayu32data_message); auto data_array = arrayu32data_message.value(); auto array = std::vector(); @@ -1345,7 +1323,7 @@ ::grpc::Status MonikerWriteBool(void* data, google::protobuf::Arena& arena, goog auto control = function_data->control; BoolData booldata_message; - packedData.UnpackTo(&booldata_message); // TODO: should unpack to function_data->mutable_request() + packedData.UnpackTo(&booldata_message); auto value = booldata_message.value(); auto status = library->WriteBool(session, control, value); @@ -1362,7 +1340,7 @@ ::grpc::Status MonikerWriteDbl(void* data, google::protobuf::Arena& arena, googl auto control = function_data->control; DoubleData doubledata_message; - packedData.UnpackTo(&doubledata_message); // TODO: should unpack to function_data->mutable_request() + packedData.UnpackTo(&doubledata_message); auto value = doubledata_message.value(); auto status = library->WriteDbl(session, control, value); @@ -1379,7 +1357,7 @@ ::grpc::Status MonikerWriteI16(void* data, google::protobuf::Arena& arena, googl auto control = function_data->control; I32Data i32data_message; - packedData.UnpackTo(&i32data_message); // TODO: should unpack to function_data->mutable_request() + packedData.UnpackTo(&i32data_message); auto value = i32data_message.value(); if (value < std::numeric_limits::min() || value > std::numeric_limits::max()) { std::string message("value " + std::to_string(value) + " doesn't fit in datatype int16_t"); @@ -1400,7 +1378,7 @@ ::grpc::Status MonikerWriteI32(void* data, google::protobuf::Arena& arena, googl auto control = function_data->control; I32Data i32data_message; - packedData.UnpackTo(&i32data_message); // TODO: should unpack to function_data->mutable_request() + packedData.UnpackTo(&i32data_message); auto value = i32data_message.value(); auto status = library->WriteI32(session, control, value); @@ -1417,7 +1395,7 @@ ::grpc::Status MonikerWriteI64(void* data, google::protobuf::Arena& arena, googl auto control = function_data->control; I64Data i64data_message; - packedData.UnpackTo(&i64data_message); // TODO: should unpack to function_data->mutable_request() + packedData.UnpackTo(&i64data_message); auto value = i64data_message.value(); auto status = library->WriteI64(session, control, value); @@ -1434,7 +1412,7 @@ ::grpc::Status MonikerWriteI8(void* data, google::protobuf::Arena& arena, google auto control = function_data->control; I32Data i32data_message; - packedData.UnpackTo(&i32data_message); // TODO: should unpack to function_data->mutable_request() + packedData.UnpackTo(&i32data_message); auto value = i32data_message.value(); if (value < std::numeric_limits::min() || value > std::numeric_limits::max()) { std::string message("value " + std::to_string(value) + " doesn't fit in datatype int8_t"); @@ -1455,7 +1433,7 @@ ::grpc::Status MonikerWriteSgl(void* data, google::protobuf::Arena& arena, googl auto control = function_data->control; FloatData floatdata_message; - packedData.UnpackTo(&floatdata_message); // TODO: should unpack to function_data->mutable_request() + packedData.UnpackTo(&floatdata_message); auto value = floatdata_message.value(); auto status = library->WriteSgl(session, control, value); @@ -1472,7 +1450,7 @@ ::grpc::Status MonikerWriteU16(void* data, google::protobuf::Arena& arena, googl auto control = function_data->control; U32Data u32data_message; - packedData.UnpackTo(&u32data_message); // TODO: should unpack to function_data->mutable_request() + packedData.UnpackTo(&u32data_message); auto value = u32data_message.value(); if (value < std::numeric_limits::min() || value > std::numeric_limits::max()) { std::string message("value " + std::to_string(value) + " doesn't fit in datatype uint16_t"); @@ -1493,7 +1471,7 @@ ::grpc::Status MonikerWriteU32(void* data, google::protobuf::Arena& arena, googl auto control = function_data->control; U32Data u32data_message; - packedData.UnpackTo(&u32data_message); // TODO: should unpack to function_data->mutable_request() + packedData.UnpackTo(&u32data_message); auto value = u32data_message.value(); auto status = library->WriteU32(session, control, value); @@ -1510,7 +1488,7 @@ ::grpc::Status MonikerWriteU64(void* data, google::protobuf::Arena& arena, googl auto control = function_data->control; U64Data u64data_message; - packedData.UnpackTo(&u64data_message); // TODO: should unpack to function_data->mutable_request() + packedData.UnpackTo(&u64data_message); auto value = u64data_message.value(); auto status = library->WriteU64(session, control, value); @@ -1527,7 +1505,7 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google auto control = function_data->control; U32Data u32data_message; - packedData.UnpackTo(&u32data_message); // TODO: should unpack to function_data->mutable_request() + packedData.UnpackTo(&u32data_message); auto value = u32data_message.value(); if (value < std::numeric_limits::min() || value > std::numeric_limits::max()) { std::string message("value " + std::to_string(value) + " doesn't fit in datatype uint8_t"); diff --git a/source/codegen/common_helpers.py b/source/codegen/common_helpers.py index 4153baa52..f3510e890 100644 --- a/source/codegen/common_helpers.py +++ b/source/codegen/common_helpers.py @@ -1275,8 +1275,8 @@ def _is_streaming_param_input_array(streaming_param): ) -def get_input_streaming_params(parameters): - """Determine if a parameter should be included based on streaming conditions.""" +def get_non_streaming_input_parameters(parameters): + """Determine if a parameter should be passed from Begin streaming API to Moniker function.""" streaming_param = get_first_streaming_parameter(parameters) params = [] for param in parameters: diff --git a/source/codegen/templates/service.cpp.mako b/source/codegen/templates/service.cpp.mako index ab113099b..aa55edbd5 100644 --- a/source/codegen/templates/service.cpp.mako +++ b/source/codegen/templates/service.cpp.mako @@ -165,7 +165,7 @@ ${mako_helper.define_ivi_dance_with_a_twist_method_body(function_name=function_n % elif common_helpers.has_repeated_varargs_parameter(parameters): ${mako_helper.define_repeated_varargs_method_body(function_name=function_name, function_data=function_data, parameters=parameters)} % elif common_helpers.is_function_in_streaming_functions(function_name, streaming_functions_to_generate): -${mako_helper.define_streaming_api_body(function_name=function_name, function_data=function_data, parameters=parameters)} +${mako_helper.define_streaming_api_body(function_name=function_name, parameters=parameters)} % else: ${mako_helper.define_simple_method_body(function_name=function_name, function_data=function_data, parameters=parameters)} % endif diff --git a/source/codegen/templates/service_helpers.mako b/source/codegen/templates/service_helpers.mako index 2165b020d..e4c0cd3d9 100644 --- a/source/codegen/templates/service_helpers.mako +++ b/source/codegen/templates/service_helpers.mako @@ -279,13 +279,13 @@ ${populate_response(function_data=function_data, parameters=parameters)}\ config = data['config'] service_class_prefix = config["service_class_prefix"] struct_name = common_helpers.get_data_moniker_struct_name(begin_function_name) - streaming_params_to_include = common_helpers.get_input_streaming_params(parameters) + moniker_input_parameters = common_helpers.get_non_streaming_input_parameters(parameters) request_message_type = common_helpers.get_data_moniker_request_message_type(begin_function_name) response_message_type = common_helpers.get_data_moniker_response_message_type(begin_function_name) %>\ struct ${struct_name} { -% for parameter in streaming_params_to_include: +% for parameter in moniker_input_parameters: <% parameter_name = common_helpers.get_cpp_local_name(parameter) %>\ @@ -308,12 +308,12 @@ ${populate_response(function_data=function_data, parameters=parameters)}\ function_data = functions[function_name] struct_name = common_helpers.get_data_moniker_struct_name(function_name) moniker_function_name = common_helpers.get_data_moniker_function_name(function_name) + moniker_input_parameters = common_helpers.get_non_streaming_input_parameters(function_data['parameters']) + streaming_param = common_helpers.get_first_streaming_parameter(function_data['parameters']) non_streaming_function_name = function_name.replace("Begin", "") non_streaming_function_parameters = functions[non_streaming_function_name]['parameters'] arg_string = service_helpers.create_args(non_streaming_function_parameters) - streaming_param = common_helpers.get_first_streaming_parameter(function_data['parameters']) c_api_name = service_helpers.get_c_api_name(function_name) - streaming_params_to_include = common_helpers.get_input_streaming_params(function_data['parameters']) output_parameters = [p for p in non_streaming_function_parameters if common_helpers.is_output_parameter(p)] %>\ ::grpc::Status ${moniker_function_name}(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) @@ -321,7 +321,7 @@ ${populate_response(function_data=function_data, parameters=parameters)}\ ${struct_name}* function_data = static_cast<${struct_name}*>(data); auto library = function_data->library; auto response = &function_data->response; -${initialize_moniker_input_parameters(streaming_params_to_include)}\ +${initialize_moniker_input_parameters(moniker_input_parameters)}\ ${initialize_output_params(output_parameters)}\ % if streaming_param and streaming_param['direction'] == 'in': ${streaming_handle_in_direction(streaming_param)}\ @@ -329,40 +329,20 @@ ${streaming_handle_in_direction(streaming_param)}\ auto status = library->${c_api_name}(${arg_string}); -% if streaming_param['direction'] == 'out': - if (status >= 0) - { - response->set_status(status); -${set_response_values(output_parameters=output_parameters, init_method=false)}\ - packedData.PackFrom(*response); - } - else - { - // TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata` - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "Error code: " + status); - } -% endif +${populate_moniker_response_for_out_functions(output_parameters, streaming_param)}\ return ::grpc::Status::OK; } -<%def name="define_streaming_api_body(function_name, function_data, parameters)">\ +<%def name="define_streaming_api_body(function_name, parameters)">\ <% - config = data['config'] - output_params = [p for p in parameters if common_helpers.is_output_parameter(p)] - service_class_prefix = config["service_class_prefix"] - request_param = service_helpers.get_request_param(function_name) - response_param = service_helpers.get_response_param(function_name) struct_name = common_helpers.get_data_moniker_struct_name(function_name) moniker_function_name = common_helpers.get_data_moniker_function_name(function_name) - streaming_param = common_helpers.get_first_streaming_parameter(parameters) - streaming_params_to_include = common_helpers.get_input_streaming_params(parameters) + moniker_input_parameters = common_helpers.get_non_streaming_input_parameters(parameters) + output_parameters = [p for p in parameters if common_helpers.is_output_parameter(p)] %>\ -${initialize_streaming_input_param(function_name, streaming_params_to_include, parameters, streaming_param)} - auto data = std::make_unique<${struct_name}>(); -${initialize_begin_input_params(streaming_params_to_include, streaming_param)}\ - data->library = std::shared_ptr<${service_class_prefix}LibraryInterface>(library_); -${initialize_service_output_params(output_params, streaming_param)}\ +${initialize_input_params(function_name, moniker_input_parameters)} +${initialize_moniker_struct(struct_name, moniker_input_parameters, output_parameters)}\ auto moniker = std::make_unique(); ni::data_monikers::DataMonikerService::RegisterMonikerInstance("${moniker_function_name}", data.release(), *moniker); response->set_allocated_moniker(moniker.release()); @@ -377,7 +357,7 @@ ${initialize_service_output_params(output_params, streaming_param)}\ is_array = common_helpers.is_array(streaming_type) %>\ ${grpc_streaming_type} ${grpc_streaming_type.lower()}_message; - packedData.UnpackTo(&${grpc_streaming_type.lower()}_message); // TODO: should unpack to function_data->mutable_request() + packedData.UnpackTo(&${grpc_streaming_type.lower()}_message); % if is_array: ${streaming_handle_in_direction_array(grpc_streaming_type, streaming_param)}\ % else: @@ -438,44 +418,54 @@ auto value = ${grpc_streaming_type.lower()}_message.value(); % endif -## Initialize an bgin input parameter for an API call. -<%def name="initialize_begin_input_params(streaming_params_to_include, streaming_param)">\ -% for parameter in streaming_params_to_include: +<%def name="populate_moniker_response_for_out_functions(output_parameters, streaming_param)">\ +% if streaming_param['direction'] == 'out': + if (status >= 0) + { + response->set_status(status); +${set_response_values(output_parameters=output_parameters, init_method=false)}\ + packedData.PackFrom(*response); + } + else + { + ## TODO this is not needed if we can make populate_response work which returns error through `AddTrailingMetadata`. + ## But that needs `context` parameter which is not available in Moniker functions. + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } +% endif + + +<%def name="initialize_moniker_struct(struct_name, moniker_input_parameters, output_parameters)">\ +<% + config = data['config'] + service_class_prefix = config["service_class_prefix"] + output_array_params = [p for p in output_parameters if common_helpers.is_array(p['type'])] +%>\ + auto data = std::make_unique<${struct_name}>(); +% for parameter in moniker_input_parameters: <% parameter_name = common_helpers.get_cpp_local_name(parameter) %>\ data->${parameter_name} = ${parameter_name}; % endfor - - -## Initialize an bgin input parameter for an API call. -<%def name="initialize_streaming_input_param(function_name, streaming_params_to_include, parameters, streaming_param)">\ -% for param in streaming_params_to_include: -${initialize_input_param(function_name, param, parameters)}\ -% endfor - + data->library = std::shared_ptr<${service_class_prefix}LibraryInterface>(library_); -<%def name="initialize_moniker_input_parameters(streaming_params_to_include)">\ -% for parameter in streaming_params_to_include: +% for param in output_array_params: <% - parameter_name = common_helpers.get_cpp_local_name(parameter) + grpc_field_name = common_helpers.get_grpc_field_name(param) + size_param_name = service_helpers.get_size_param_name(param) %>\ - auto ${parameter_name} = function_data->${parameter_name}; + data->response.mutable_${grpc_field_name}()->Reserve(request->${size_param_name}()); + data->response.mutable_${grpc_field_name}()->Resize(request->${size_param_name}(), 0); % endfor -<%def name="initialize_service_output_params(output_params, streaming_param)">\ -<% - size_param_name = service_helpers.get_size_param_name(streaming_param) -%> -% for param in output_params: -% if common_helpers.is_array(param['type']): +<%def name="initialize_moniker_input_parameters(moniker_input_parameters)">\ +% for parameter in moniker_input_parameters: <% - grpc_field_name = common_helpers.get_grpc_field_name(param) + parameter_name = common_helpers.get_cpp_local_name(parameter) %>\ - data->response.mutable_${grpc_field_name}()->Reserve(request->${size_param_name}()); - data->response.mutable_${grpc_field_name}()->Resize(request->${size_param_name}(), 0); -% endif + auto ${parameter_name} = function_data->${parameter_name}; % endfor @@ -509,11 +499,11 @@ ${initialize_enum_input_param(function_name, parameter)} % elif "determine_size_from" in parameter: ${initialize_len_input_param(parameter, parameters)} % elif common_helpers.is_two_dimension_array_param(parameter): -${initialize_two_dimension_input_param(function_name, parameter, parameters)} +${initialize_two_dimension_input_param(parameter, parameters)} % elif service_helpers.is_size_param_passed_by_ptr(parameter): ${initialize_pointer_input_parameter(parameter)} % else: -${initialize_standard_input_param(function_name, parameter)} +${initialize_standard_input_param(parameter)} % endif @@ -740,14 +730,14 @@ ${initialize_standard_input_param(function_name, parameter)} ## Initialize an input parameter with the 'two-dimension' size mechanism. -<%def name="initialize_two_dimension_input_param(function_name, parameter, parameters)">\ +<%def name="initialize_two_dimension_input_param(parameter, parameters)">\ <% parameter_name = common_helpers.get_cpp_local_name(parameter) size_param_name = common_helpers.get_size_param(parameter) size_param = common_helpers.get_param_with_name(parameters, size_param_name) size_field_name = common_helpers.get_grpc_field_name(size_param) %>\ -${initialize_standard_input_param(function_name, parameter)} +${initialize_standard_input_param(parameter)} auto total_length = std::accumulate(request->${size_field_name}().cbegin(), request->${size_field_name}().cend(), 0); if (total_length != request->${parameter_name}_size()) { @@ -768,7 +758,7 @@ ${initialize_standard_input_param(function_name, parameter)} ## Initialize an input parameter for an API call. -<%def name="initialize_standard_input_param(function_name, parameter)">\ +<%def name="initialize_standard_input_param(parameter)">\ <% config = data['config'] parameter_name = common_helpers.get_cpp_local_name(parameter) From f59d24fe384635fe241fd86aceb4985a8e986fc0 Mon Sep 17 00:00:00 2001 From: Raghav Rawat Date: Mon, 25 Nov 2024 17:47:44 +0530 Subject: [PATCH 12/25] codegen for read apis with multiple out params --- generated/nidaqmx/nidaqmx.proto | 256 ++++ generated/nidaqmx/nidaqmx_client.cpp | 288 ++++ generated/nidaqmx/nidaqmx_client.h | 12 + generated/nidaqmx/nidaqmx_service.cpp | 1265 ++++++++++++++++-- generated/nidaqmx/nidaqmx_service.h | 24 + source/codegen/metadata/nidaqmx/functions.py | 134 +- 6 files changed, 1853 insertions(+), 126 deletions(-) diff --git a/generated/nidaqmx/nidaqmx.proto b/generated/nidaqmx/nidaqmx.proto index 53f244e73..75d0eed40 100644 --- a/generated/nidaqmx/nidaqmx.proto +++ b/generated/nidaqmx/nidaqmx.proto @@ -289,12 +289,19 @@ service NiDAQmx { rpc ReadCounterU32Ex(ReadCounterU32ExRequest) returns (ReadCounterU32ExResponse); rpc BeginReadCounterU32Ex(BeginReadCounterU32ExRequest) returns (BeginReadCounterU32ExResponse); rpc ReadCtrFreq(ReadCtrFreqRequest) returns (ReadCtrFreqResponse); + rpc BeginReadCtrFreq(BeginReadCtrFreqRequest) returns (BeginReadCtrFreqResponse); rpc ReadCtrFreqScalar(ReadCtrFreqScalarRequest) returns (ReadCtrFreqScalarResponse); + rpc BeginReadCtrFreqScalar(BeginReadCtrFreqScalarRequest) returns (BeginReadCtrFreqScalarResponse); rpc ReadCtrTicks(ReadCtrTicksRequest) returns (ReadCtrTicksResponse); + rpc BeginReadCtrTicks(BeginReadCtrTicksRequest) returns (BeginReadCtrTicksResponse); rpc ReadCtrTicksScalar(ReadCtrTicksScalarRequest) returns (ReadCtrTicksScalarResponse); + rpc BeginReadCtrTicksScalar(BeginReadCtrTicksScalarRequest) returns (BeginReadCtrTicksScalarResponse); rpc ReadCtrTime(ReadCtrTimeRequest) returns (ReadCtrTimeResponse); + rpc BeginReadCtrTime(BeginReadCtrTimeRequest) returns (BeginReadCtrTimeResponse); rpc ReadCtrTimeScalar(ReadCtrTimeScalarRequest) returns (ReadCtrTimeScalarResponse); + rpc BeginReadCtrTimeScalar(BeginReadCtrTimeScalarRequest) returns (BeginReadCtrTimeScalarResponse); rpc ReadDigitalLines(ReadDigitalLinesRequest) returns (ReadDigitalLinesResponse); + rpc BeginReadDigitalLines(BeginReadDigitalLinesRequest) returns (BeginReadDigitalLinesResponse); rpc ReadDigitalScalarU32(ReadDigitalScalarU32Request) returns (ReadDigitalScalarU32Response); rpc BeginReadDigitalScalarU32(BeginReadDigitalScalarU32Request) returns (BeginReadDigitalScalarU32Response); rpc ReadDigitalU16(ReadDigitalU16Request) returns (ReadDigitalU16Response); @@ -302,10 +309,15 @@ service NiDAQmx { rpc ReadDigitalU32(ReadDigitalU32Request) returns (ReadDigitalU32Response); rpc BeginReadDigitalU32(BeginReadDigitalU32Request) returns (BeginReadDigitalU32Response); rpc ReadDigitalU8(ReadDigitalU8Request) returns (ReadDigitalU8Response); + rpc BeginReadDigitalU8(BeginReadDigitalU8Request) returns (BeginReadDigitalU8Response); rpc ReadPowerBinaryI16(ReadPowerBinaryI16Request) returns (ReadPowerBinaryI16Response); + rpc BeginReadPowerBinaryI16(BeginReadPowerBinaryI16Request) returns (BeginReadPowerBinaryI16Response); rpc ReadPowerF64(ReadPowerF64Request) returns (ReadPowerF64Response); + rpc BeginReadPowerF64(BeginReadPowerF64Request) returns (BeginReadPowerF64Response); rpc ReadPowerScalarF64(ReadPowerScalarF64Request) returns (ReadPowerScalarF64Response); + rpc BeginReadPowerScalarF64(BeginReadPowerScalarF64Request) returns (BeginReadPowerScalarF64Response); rpc ReadRaw(ReadRawRequest) returns (ReadRawResponse); + rpc BeginReadRaw(BeginReadRawRequest) returns (BeginReadRawResponse); rpc RegisterDoneEvent(RegisterDoneEventRequest) returns (stream RegisterDoneEventResponse); rpc RegisterEveryNSamplesEvent(RegisterEveryNSamplesEventRequest) returns (stream RegisterEveryNSamplesEventResponse); rpc RegisterSignalEvent(RegisterSignalEventRequest) returns (stream RegisterSignalEventResponse); @@ -8913,6 +8925,29 @@ message ReadCtrFreqResponse { int32 samps_per_chan_read = 4; } +message BeginReadCtrFreqRequest { + nidevice_grpc.Session task = 1; + int32 num_samps_per_chan = 2; + double timeout = 3; + oneof interleaved_enum { + GroupBy interleaved = 4; + int32 interleaved_raw = 5; + } + uint32 array_size_in_samps = 6; +} + +message BeginReadCtrFreqResponse { + int32 status = 1; + ni.data_monikers.Moniker moniker = 2; +} + +message ReadCtrFreqStreamingResponse { + int32 status = 1; + repeated double read_array_frequency = 2; + repeated double read_array_duty_cycle = 3; + int32 samps_per_chan_read = 4; +} + message ReadCtrFreqScalarRequest { nidevice_grpc.Session task = 1; double timeout = 2; @@ -8924,6 +8959,22 @@ message ReadCtrFreqScalarResponse { double duty_cycle = 3; } +message BeginReadCtrFreqScalarRequest { + nidevice_grpc.Session task = 1; + double timeout = 2; +} + +message BeginReadCtrFreqScalarResponse { + int32 status = 1; + ni.data_monikers.Moniker moniker = 2; +} + +message ReadCtrFreqScalarStreamingResponse { + int32 status = 1; + double frequency = 2; + double duty_cycle = 3; +} + message ReadCtrTicksRequest { nidevice_grpc.Session task = 1; int32 num_samps_per_chan = 2; @@ -8942,6 +8993,29 @@ message ReadCtrTicksResponse { int32 samps_per_chan_read = 4; } +message BeginReadCtrTicksRequest { + nidevice_grpc.Session task = 1; + int32 num_samps_per_chan = 2; + double timeout = 3; + oneof interleaved_enum { + GroupBy interleaved = 4; + int32 interleaved_raw = 5; + } + uint32 array_size_in_samps = 6; +} + +message BeginReadCtrTicksResponse { + int32 status = 1; + ni.data_monikers.Moniker moniker = 2; +} + +message ReadCtrTicksStreamingResponse { + int32 status = 1; + repeated uint32 read_array_high_ticks = 2; + repeated uint32 read_array_low_ticks = 3; + int32 samps_per_chan_read = 4; +} + message ReadCtrTicksScalarRequest { nidevice_grpc.Session task = 1; double timeout = 2; @@ -8953,6 +9027,22 @@ message ReadCtrTicksScalarResponse { uint32 low_ticks = 3; } +message BeginReadCtrTicksScalarRequest { + nidevice_grpc.Session task = 1; + double timeout = 2; +} + +message BeginReadCtrTicksScalarResponse { + int32 status = 1; + ni.data_monikers.Moniker moniker = 2; +} + +message ReadCtrTicksScalarStreamingResponse { + int32 status = 1; + uint32 high_ticks = 2; + uint32 low_ticks = 3; +} + message ReadCtrTimeRequest { nidevice_grpc.Session task = 1; int32 num_samps_per_chan = 2; @@ -8971,6 +9061,29 @@ message ReadCtrTimeResponse { int32 samps_per_chan_read = 4; } +message BeginReadCtrTimeRequest { + nidevice_grpc.Session task = 1; + int32 num_samps_per_chan = 2; + double timeout = 3; + oneof interleaved_enum { + GroupBy interleaved = 4; + int32 interleaved_raw = 5; + } + uint32 array_size_in_samps = 6; +} + +message BeginReadCtrTimeResponse { + int32 status = 1; + ni.data_monikers.Moniker moniker = 2; +} + +message ReadCtrTimeStreamingResponse { + int32 status = 1; + repeated double read_array_high_time = 2; + repeated double read_array_low_time = 3; + int32 samps_per_chan_read = 4; +} + message ReadCtrTimeScalarRequest { nidevice_grpc.Session task = 1; double timeout = 2; @@ -8982,6 +9095,22 @@ message ReadCtrTimeScalarResponse { double low_time = 3; } +message BeginReadCtrTimeScalarRequest { + nidevice_grpc.Session task = 1; + double timeout = 2; +} + +message BeginReadCtrTimeScalarResponse { + int32 status = 1; + ni.data_monikers.Moniker moniker = 2; +} + +message ReadCtrTimeScalarStreamingResponse { + int32 status = 1; + double high_time = 2; + double low_time = 3; +} + message ReadDigitalLinesRequest { nidevice_grpc.Session task = 1; int32 num_samps_per_chan = 2; @@ -9000,6 +9129,30 @@ message ReadDigitalLinesResponse { int32 num_bytes_per_samp = 4; } +message BeginReadDigitalLinesRequest { + nidevice_grpc.Session task = 1; + int32 num_samps_per_chan = 2; + double timeout = 3; + oneof fill_mode_enum { + GroupBy fill_mode = 4; + int32 fill_mode_raw = 5; + } + uint32 array_size_in_bytes = 6; +} + +message BeginReadDigitalLinesResponse { + int32 status = 1; + int32 num_bytes_per_samp = 2; + ni.data_monikers.Moniker moniker = 3; +} + +message ReadDigitalLinesStreamingResponse { + int32 status = 1; + bytes read_array = 2; + int32 samps_per_chan_read = 3; + int32 num_bytes_per_samp = 4; +} + message ReadDigitalScalarU32Request { nidevice_grpc.Session task = 1; double timeout = 2; @@ -9120,6 +9273,28 @@ message ReadDigitalU8Response { int32 samps_per_chan_read = 3; } +message BeginReadDigitalU8Request { + nidevice_grpc.Session task = 1; + int32 num_samps_per_chan = 2; + double timeout = 3; + oneof fill_mode_enum { + GroupBy fill_mode = 4; + int32 fill_mode_raw = 5; + } + uint32 array_size_in_samps = 6; +} + +message BeginReadDigitalU8Response { + int32 status = 1; + ni.data_monikers.Moniker moniker = 2; +} + +message ReadDigitalU8StreamingResponse { + int32 status = 1; + bytes read_array = 2; + int32 samps_per_chan_read = 3; +} + message ReadPowerBinaryI16Request { nidevice_grpc.Session task = 1; int32 num_samps_per_chan = 2; @@ -9138,6 +9313,29 @@ message ReadPowerBinaryI16Response { int32 samps_per_chan_read = 4; } +message BeginReadPowerBinaryI16Request { + nidevice_grpc.Session task = 1; + int32 num_samps_per_chan = 2; + double timeout = 3; + oneof fill_mode_enum { + GroupBy fill_mode = 4; + int32 fill_mode_raw = 5; + } + uint32 array_size_in_samps = 6; +} + +message BeginReadPowerBinaryI16Response { + int32 status = 1; + ni.data_monikers.Moniker moniker = 2; +} + +message ReadPowerBinaryI16StreamingResponse { + int32 status = 1; + repeated int32 read_array_voltage = 2; + repeated int32 read_array_current = 3; + int32 samps_per_chan_read = 4; +} + message ReadPowerF64Request { nidevice_grpc.Session task = 1; int32 num_samps_per_chan = 2; @@ -9156,6 +9354,29 @@ message ReadPowerF64Response { int32 samps_per_chan_read = 4; } +message BeginReadPowerF64Request { + nidevice_grpc.Session task = 1; + int32 num_samps_per_chan = 2; + double timeout = 3; + oneof fill_mode_enum { + GroupBy fill_mode = 4; + int32 fill_mode_raw = 5; + } + uint32 array_size_in_samps = 6; +} + +message BeginReadPowerF64Response { + int32 status = 1; + ni.data_monikers.Moniker moniker = 2; +} + +message ReadPowerF64StreamingResponse { + int32 status = 1; + repeated double read_array_voltage = 2; + repeated double read_array_current = 3; + int32 samps_per_chan_read = 4; +} + message ReadPowerScalarF64Request { nidevice_grpc.Session task = 1; double timeout = 2; @@ -9167,6 +9388,22 @@ message ReadPowerScalarF64Response { double current = 3; } +message BeginReadPowerScalarF64Request { + nidevice_grpc.Session task = 1; + double timeout = 2; +} + +message BeginReadPowerScalarF64Response { + int32 status = 1; + ni.data_monikers.Moniker moniker = 2; +} + +message ReadPowerScalarF64StreamingResponse { + int32 status = 1; + double voltage = 2; + double current = 3; +} + message ReadRawRequest { nidevice_grpc.Session task = 1; int32 num_samps_per_chan = 2; @@ -9181,6 +9418,25 @@ message ReadRawResponse { int32 num_bytes_per_samp = 4; } +message BeginReadRawRequest { + nidevice_grpc.Session task = 1; + int32 num_samps_per_chan = 2; + double timeout = 3; + uint32 array_size_in_bytes = 4; +} + +message BeginReadRawResponse { + int32 status = 1; + ni.data_monikers.Moniker moniker = 2; +} + +message ReadRawStreamingResponse { + int32 status = 1; + bytes read_array = 2; + int32 samps_read = 3; + int32 num_bytes_per_samp = 4; +} + message RegisterDoneEventRequest { nidevice_grpc.Session task = 1; } diff --git a/generated/nidaqmx/nidaqmx_client.cpp b/generated/nidaqmx/nidaqmx_client.cpp index e3aa0f60d..ac5dd5f34 100644 --- a/generated/nidaqmx/nidaqmx_client.cpp +++ b/generated/nidaqmx/nidaqmx_client.cpp @@ -8072,6 +8072,34 @@ read_ctr_freq(const StubPtr& stub, const nidevice_grpc::Session& task, const pb: return response; } +BeginReadCtrFreqResponse +begin_read_ctr_freq(const StubPtr& stub, const nidevice_grpc::Session& task, const pb::int32& num_samps_per_chan, const double& timeout, const simple_variant& interleaved, const pb::uint32& array_size_in_samps) +{ + ::grpc::ClientContext context; + + auto request = BeginReadCtrFreqRequest{}; + request.mutable_task()->CopyFrom(task); + request.set_num_samps_per_chan(num_samps_per_chan); + request.set_timeout(timeout); + const auto interleaved_ptr = interleaved.get_if(); + const auto interleaved_raw_ptr = interleaved.get_if(); + if (interleaved_ptr) { + request.set_interleaved(*interleaved_ptr); + } + else if (interleaved_raw_ptr) { + request.set_interleaved_raw(*interleaved_raw_ptr); + } + request.set_array_size_in_samps(array_size_in_samps); + + auto response = BeginReadCtrFreqResponse{}; + + raise_if_error( + stub->BeginReadCtrFreq(&context, request, &response), + context); + + return response; +} + ReadCtrFreqScalarResponse read_ctr_freq_scalar(const StubPtr& stub, const nidevice_grpc::Session& task, const double& timeout) { @@ -8090,6 +8118,24 @@ read_ctr_freq_scalar(const StubPtr& stub, const nidevice_grpc::Session& task, co return response; } +BeginReadCtrFreqScalarResponse +begin_read_ctr_freq_scalar(const StubPtr& stub, const nidevice_grpc::Session& task, const double& timeout) +{ + ::grpc::ClientContext context; + + auto request = BeginReadCtrFreqScalarRequest{}; + request.mutable_task()->CopyFrom(task); + request.set_timeout(timeout); + + auto response = BeginReadCtrFreqScalarResponse{}; + + raise_if_error( + stub->BeginReadCtrFreqScalar(&context, request, &response), + context); + + return response; +} + ReadCtrTicksResponse read_ctr_ticks(const StubPtr& stub, const nidevice_grpc::Session& task, const pb::int32& num_samps_per_chan, const double& timeout, const simple_variant& interleaved, const pb::uint32& array_size_in_samps) { @@ -8118,6 +8164,34 @@ read_ctr_ticks(const StubPtr& stub, const nidevice_grpc::Session& task, const pb return response; } +BeginReadCtrTicksResponse +begin_read_ctr_ticks(const StubPtr& stub, const nidevice_grpc::Session& task, const pb::int32& num_samps_per_chan, const double& timeout, const simple_variant& interleaved, const pb::uint32& array_size_in_samps) +{ + ::grpc::ClientContext context; + + auto request = BeginReadCtrTicksRequest{}; + request.mutable_task()->CopyFrom(task); + request.set_num_samps_per_chan(num_samps_per_chan); + request.set_timeout(timeout); + const auto interleaved_ptr = interleaved.get_if(); + const auto interleaved_raw_ptr = interleaved.get_if(); + if (interleaved_ptr) { + request.set_interleaved(*interleaved_ptr); + } + else if (interleaved_raw_ptr) { + request.set_interleaved_raw(*interleaved_raw_ptr); + } + request.set_array_size_in_samps(array_size_in_samps); + + auto response = BeginReadCtrTicksResponse{}; + + raise_if_error( + stub->BeginReadCtrTicks(&context, request, &response), + context); + + return response; +} + ReadCtrTicksScalarResponse read_ctr_ticks_scalar(const StubPtr& stub, const nidevice_grpc::Session& task, const double& timeout) { @@ -8136,6 +8210,24 @@ read_ctr_ticks_scalar(const StubPtr& stub, const nidevice_grpc::Session& task, c return response; } +BeginReadCtrTicksScalarResponse +begin_read_ctr_ticks_scalar(const StubPtr& stub, const nidevice_grpc::Session& task, const double& timeout) +{ + ::grpc::ClientContext context; + + auto request = BeginReadCtrTicksScalarRequest{}; + request.mutable_task()->CopyFrom(task); + request.set_timeout(timeout); + + auto response = BeginReadCtrTicksScalarResponse{}; + + raise_if_error( + stub->BeginReadCtrTicksScalar(&context, request, &response), + context); + + return response; +} + ReadCtrTimeResponse read_ctr_time(const StubPtr& stub, const nidevice_grpc::Session& task, const pb::int32& num_samps_per_chan, const double& timeout, const simple_variant& interleaved, const pb::uint32& array_size_in_samps) { @@ -8164,6 +8256,34 @@ read_ctr_time(const StubPtr& stub, const nidevice_grpc::Session& task, const pb: return response; } +BeginReadCtrTimeResponse +begin_read_ctr_time(const StubPtr& stub, const nidevice_grpc::Session& task, const pb::int32& num_samps_per_chan, const double& timeout, const simple_variant& interleaved, const pb::uint32& array_size_in_samps) +{ + ::grpc::ClientContext context; + + auto request = BeginReadCtrTimeRequest{}; + request.mutable_task()->CopyFrom(task); + request.set_num_samps_per_chan(num_samps_per_chan); + request.set_timeout(timeout); + const auto interleaved_ptr = interleaved.get_if(); + const auto interleaved_raw_ptr = interleaved.get_if(); + if (interleaved_ptr) { + request.set_interleaved(*interleaved_ptr); + } + else if (interleaved_raw_ptr) { + request.set_interleaved_raw(*interleaved_raw_ptr); + } + request.set_array_size_in_samps(array_size_in_samps); + + auto response = BeginReadCtrTimeResponse{}; + + raise_if_error( + stub->BeginReadCtrTime(&context, request, &response), + context); + + return response; +} + ReadCtrTimeScalarResponse read_ctr_time_scalar(const StubPtr& stub, const nidevice_grpc::Session& task, const double& timeout) { @@ -8182,6 +8302,24 @@ read_ctr_time_scalar(const StubPtr& stub, const nidevice_grpc::Session& task, co return response; } +BeginReadCtrTimeScalarResponse +begin_read_ctr_time_scalar(const StubPtr& stub, const nidevice_grpc::Session& task, const double& timeout) +{ + ::grpc::ClientContext context; + + auto request = BeginReadCtrTimeScalarRequest{}; + request.mutable_task()->CopyFrom(task); + request.set_timeout(timeout); + + auto response = BeginReadCtrTimeScalarResponse{}; + + raise_if_error( + stub->BeginReadCtrTimeScalar(&context, request, &response), + context); + + return response; +} + ReadDigitalLinesResponse read_digital_lines(const StubPtr& stub, const nidevice_grpc::Session& task, const pb::int32& num_samps_per_chan, const double& timeout, const simple_variant& fill_mode, const pb::uint32& array_size_in_bytes) { @@ -8210,6 +8348,34 @@ read_digital_lines(const StubPtr& stub, const nidevice_grpc::Session& task, cons return response; } +BeginReadDigitalLinesResponse +begin_read_digital_lines(const StubPtr& stub, const nidevice_grpc::Session& task, const pb::int32& num_samps_per_chan, const double& timeout, const simple_variant& fill_mode, const pb::uint32& array_size_in_bytes) +{ + ::grpc::ClientContext context; + + auto request = BeginReadDigitalLinesRequest{}; + request.mutable_task()->CopyFrom(task); + request.set_num_samps_per_chan(num_samps_per_chan); + request.set_timeout(timeout); + const auto fill_mode_ptr = fill_mode.get_if(); + const auto fill_mode_raw_ptr = fill_mode.get_if(); + if (fill_mode_ptr) { + request.set_fill_mode(*fill_mode_ptr); + } + else if (fill_mode_raw_ptr) { + request.set_fill_mode_raw(*fill_mode_raw_ptr); + } + request.set_array_size_in_bytes(array_size_in_bytes); + + auto response = BeginReadDigitalLinesResponse{}; + + raise_if_error( + stub->BeginReadDigitalLines(&context, request, &response), + context); + + return response; +} + ReadDigitalScalarU32Response read_digital_scalar_u32(const StubPtr& stub, const nidevice_grpc::Session& task, const double& timeout) { @@ -8386,6 +8552,34 @@ read_digital_u8(const StubPtr& stub, const nidevice_grpc::Session& task, const p return response; } +BeginReadDigitalU8Response +begin_read_digital_u8(const StubPtr& stub, const nidevice_grpc::Session& task, const pb::int32& num_samps_per_chan, const double& timeout, const simple_variant& fill_mode, const pb::uint32& array_size_in_samps) +{ + ::grpc::ClientContext context; + + auto request = BeginReadDigitalU8Request{}; + request.mutable_task()->CopyFrom(task); + request.set_num_samps_per_chan(num_samps_per_chan); + request.set_timeout(timeout); + const auto fill_mode_ptr = fill_mode.get_if(); + const auto fill_mode_raw_ptr = fill_mode.get_if(); + if (fill_mode_ptr) { + request.set_fill_mode(*fill_mode_ptr); + } + else if (fill_mode_raw_ptr) { + request.set_fill_mode_raw(*fill_mode_raw_ptr); + } + request.set_array_size_in_samps(array_size_in_samps); + + auto response = BeginReadDigitalU8Response{}; + + raise_if_error( + stub->BeginReadDigitalU8(&context, request, &response), + context); + + return response; +} + ReadPowerBinaryI16Response read_power_binary_i16(const StubPtr& stub, const nidevice_grpc::Session& task, const pb::int32& num_samps_per_chan, const double& timeout, const simple_variant& fill_mode, const pb::uint32& array_size_in_samps) { @@ -8414,6 +8608,34 @@ read_power_binary_i16(const StubPtr& stub, const nidevice_grpc::Session& task, c return response; } +BeginReadPowerBinaryI16Response +begin_read_power_binary_i16(const StubPtr& stub, const nidevice_grpc::Session& task, const pb::int32& num_samps_per_chan, const double& timeout, const simple_variant& fill_mode, const pb::uint32& array_size_in_samps) +{ + ::grpc::ClientContext context; + + auto request = BeginReadPowerBinaryI16Request{}; + request.mutable_task()->CopyFrom(task); + request.set_num_samps_per_chan(num_samps_per_chan); + request.set_timeout(timeout); + const auto fill_mode_ptr = fill_mode.get_if(); + const auto fill_mode_raw_ptr = fill_mode.get_if(); + if (fill_mode_ptr) { + request.set_fill_mode(*fill_mode_ptr); + } + else if (fill_mode_raw_ptr) { + request.set_fill_mode_raw(*fill_mode_raw_ptr); + } + request.set_array_size_in_samps(array_size_in_samps); + + auto response = BeginReadPowerBinaryI16Response{}; + + raise_if_error( + stub->BeginReadPowerBinaryI16(&context, request, &response), + context); + + return response; +} + ReadPowerF64Response read_power_f64(const StubPtr& stub, const nidevice_grpc::Session& task, const pb::int32& num_samps_per_chan, const double& timeout, const simple_variant& fill_mode, const pb::uint32& array_size_in_samps) { @@ -8442,6 +8664,34 @@ read_power_f64(const StubPtr& stub, const nidevice_grpc::Session& task, const pb return response; } +BeginReadPowerF64Response +begin_read_power_f64(const StubPtr& stub, const nidevice_grpc::Session& task, const pb::int32& num_samps_per_chan, const double& timeout, const simple_variant& fill_mode, const pb::uint32& array_size_in_samps) +{ + ::grpc::ClientContext context; + + auto request = BeginReadPowerF64Request{}; + request.mutable_task()->CopyFrom(task); + request.set_num_samps_per_chan(num_samps_per_chan); + request.set_timeout(timeout); + const auto fill_mode_ptr = fill_mode.get_if(); + const auto fill_mode_raw_ptr = fill_mode.get_if(); + if (fill_mode_ptr) { + request.set_fill_mode(*fill_mode_ptr); + } + else if (fill_mode_raw_ptr) { + request.set_fill_mode_raw(*fill_mode_raw_ptr); + } + request.set_array_size_in_samps(array_size_in_samps); + + auto response = BeginReadPowerF64Response{}; + + raise_if_error( + stub->BeginReadPowerF64(&context, request, &response), + context); + + return response; +} + ReadPowerScalarF64Response read_power_scalar_f64(const StubPtr& stub, const nidevice_grpc::Session& task, const double& timeout) { @@ -8460,6 +8710,24 @@ read_power_scalar_f64(const StubPtr& stub, const nidevice_grpc::Session& task, c return response; } +BeginReadPowerScalarF64Response +begin_read_power_scalar_f64(const StubPtr& stub, const nidevice_grpc::Session& task, const double& timeout) +{ + ::grpc::ClientContext context; + + auto request = BeginReadPowerScalarF64Request{}; + request.mutable_task()->CopyFrom(task); + request.set_timeout(timeout); + + auto response = BeginReadPowerScalarF64Response{}; + + raise_if_error( + stub->BeginReadPowerScalarF64(&context, request, &response), + context); + + return response; +} + ReadRawResponse read_raw(const StubPtr& stub, const nidevice_grpc::Session& task, const pb::int32& num_samps_per_chan, const double& timeout, const pb::uint32& array_size_in_bytes) { @@ -8480,6 +8748,26 @@ read_raw(const StubPtr& stub, const nidevice_grpc::Session& task, const pb::int3 return response; } +BeginReadRawResponse +begin_read_raw(const StubPtr& stub, const nidevice_grpc::Session& task, const pb::int32& num_samps_per_chan, const double& timeout, const pb::uint32& array_size_in_bytes) +{ + ::grpc::ClientContext context; + + auto request = BeginReadRawRequest{}; + request.mutable_task()->CopyFrom(task); + request.set_num_samps_per_chan(num_samps_per_chan); + request.set_timeout(timeout); + request.set_array_size_in_bytes(array_size_in_bytes); + + auto response = BeginReadRawResponse{}; + + raise_if_error( + stub->BeginReadRaw(&context, request, &response), + context); + + return response; +} + std::unique_ptr> register_done_event(const StubPtr& stub, ::grpc::ClientContext& context, const nidevice_grpc::Session& task) { diff --git a/generated/nidaqmx/nidaqmx_client.h b/generated/nidaqmx/nidaqmx_client.h index 3ecc1e4f4..ee3164265 100644 --- a/generated/nidaqmx/nidaqmx_client.h +++ b/generated/nidaqmx/nidaqmx_client.h @@ -292,12 +292,19 @@ BeginReadCounterU32Response begin_read_counter_u32(const StubPtr& stub, const ni ReadCounterU32ExResponse read_counter_u32_ex(const StubPtr& stub, const nidevice_grpc::Session& task, const pb::int32& num_samps_per_chan, const double& timeout, const simple_variant& fill_mode, const pb::uint32& array_size_in_samps); BeginReadCounterU32ExResponse begin_read_counter_u32_ex(const StubPtr& stub, const nidevice_grpc::Session& task, const pb::int32& num_samps_per_chan, const double& timeout, const simple_variant& fill_mode, const pb::uint32& array_size_in_samps); ReadCtrFreqResponse read_ctr_freq(const StubPtr& stub, const nidevice_grpc::Session& task, const pb::int32& num_samps_per_chan, const double& timeout, const simple_variant& interleaved, const pb::uint32& array_size_in_samps); +BeginReadCtrFreqResponse begin_read_ctr_freq(const StubPtr& stub, const nidevice_grpc::Session& task, const pb::int32& num_samps_per_chan, const double& timeout, const simple_variant& interleaved, const pb::uint32& array_size_in_samps); ReadCtrFreqScalarResponse read_ctr_freq_scalar(const StubPtr& stub, const nidevice_grpc::Session& task, const double& timeout); +BeginReadCtrFreqScalarResponse begin_read_ctr_freq_scalar(const StubPtr& stub, const nidevice_grpc::Session& task, const double& timeout); ReadCtrTicksResponse read_ctr_ticks(const StubPtr& stub, const nidevice_grpc::Session& task, const pb::int32& num_samps_per_chan, const double& timeout, const simple_variant& interleaved, const pb::uint32& array_size_in_samps); +BeginReadCtrTicksResponse begin_read_ctr_ticks(const StubPtr& stub, const nidevice_grpc::Session& task, const pb::int32& num_samps_per_chan, const double& timeout, const simple_variant& interleaved, const pb::uint32& array_size_in_samps); ReadCtrTicksScalarResponse read_ctr_ticks_scalar(const StubPtr& stub, const nidevice_grpc::Session& task, const double& timeout); +BeginReadCtrTicksScalarResponse begin_read_ctr_ticks_scalar(const StubPtr& stub, const nidevice_grpc::Session& task, const double& timeout); ReadCtrTimeResponse read_ctr_time(const StubPtr& stub, const nidevice_grpc::Session& task, const pb::int32& num_samps_per_chan, const double& timeout, const simple_variant& interleaved, const pb::uint32& array_size_in_samps); +BeginReadCtrTimeResponse begin_read_ctr_time(const StubPtr& stub, const nidevice_grpc::Session& task, const pb::int32& num_samps_per_chan, const double& timeout, const simple_variant& interleaved, const pb::uint32& array_size_in_samps); ReadCtrTimeScalarResponse read_ctr_time_scalar(const StubPtr& stub, const nidevice_grpc::Session& task, const double& timeout); +BeginReadCtrTimeScalarResponse begin_read_ctr_time_scalar(const StubPtr& stub, const nidevice_grpc::Session& task, const double& timeout); ReadDigitalLinesResponse read_digital_lines(const StubPtr& stub, const nidevice_grpc::Session& task, const pb::int32& num_samps_per_chan, const double& timeout, const simple_variant& fill_mode, const pb::uint32& array_size_in_bytes); +BeginReadDigitalLinesResponse begin_read_digital_lines(const StubPtr& stub, const nidevice_grpc::Session& task, const pb::int32& num_samps_per_chan, const double& timeout, const simple_variant& fill_mode, const pb::uint32& array_size_in_bytes); ReadDigitalScalarU32Response read_digital_scalar_u32(const StubPtr& stub, const nidevice_grpc::Session& task, const double& timeout); BeginReadDigitalScalarU32Response begin_read_digital_scalar_u32(const StubPtr& stub, const nidevice_grpc::Session& task, const double& timeout); ReadDigitalU16Response read_digital_u16(const StubPtr& stub, const nidevice_grpc::Session& task, const pb::int32& num_samps_per_chan, const double& timeout, const simple_variant& fill_mode, const pb::uint32& array_size_in_samps); @@ -305,10 +312,15 @@ BeginReadDigitalU16Response begin_read_digital_u16(const StubPtr& stub, const ni ReadDigitalU32Response read_digital_u32(const StubPtr& stub, const nidevice_grpc::Session& task, const pb::int32& num_samps_per_chan, const double& timeout, const simple_variant& fill_mode, const pb::uint32& array_size_in_samps); BeginReadDigitalU32Response begin_read_digital_u32(const StubPtr& stub, const nidevice_grpc::Session& task, const pb::int32& num_samps_per_chan, const double& timeout, const simple_variant& fill_mode, const pb::uint32& array_size_in_samps); ReadDigitalU8Response read_digital_u8(const StubPtr& stub, const nidevice_grpc::Session& task, const pb::int32& num_samps_per_chan, const double& timeout, const simple_variant& fill_mode, const pb::uint32& array_size_in_samps); +BeginReadDigitalU8Response begin_read_digital_u8(const StubPtr& stub, const nidevice_grpc::Session& task, const pb::int32& num_samps_per_chan, const double& timeout, const simple_variant& fill_mode, const pb::uint32& array_size_in_samps); ReadPowerBinaryI16Response read_power_binary_i16(const StubPtr& stub, const nidevice_grpc::Session& task, const pb::int32& num_samps_per_chan, const double& timeout, const simple_variant& fill_mode, const pb::uint32& array_size_in_samps); +BeginReadPowerBinaryI16Response begin_read_power_binary_i16(const StubPtr& stub, const nidevice_grpc::Session& task, const pb::int32& num_samps_per_chan, const double& timeout, const simple_variant& fill_mode, const pb::uint32& array_size_in_samps); ReadPowerF64Response read_power_f64(const StubPtr& stub, const nidevice_grpc::Session& task, const pb::int32& num_samps_per_chan, const double& timeout, const simple_variant& fill_mode, const pb::uint32& array_size_in_samps); +BeginReadPowerF64Response begin_read_power_f64(const StubPtr& stub, const nidevice_grpc::Session& task, const pb::int32& num_samps_per_chan, const double& timeout, const simple_variant& fill_mode, const pb::uint32& array_size_in_samps); ReadPowerScalarF64Response read_power_scalar_f64(const StubPtr& stub, const nidevice_grpc::Session& task, const double& timeout); +BeginReadPowerScalarF64Response begin_read_power_scalar_f64(const StubPtr& stub, const nidevice_grpc::Session& task, const double& timeout); ReadRawResponse read_raw(const StubPtr& stub, const nidevice_grpc::Session& task, const pb::int32& num_samps_per_chan, const double& timeout, const pb::uint32& array_size_in_bytes); +BeginReadRawResponse begin_read_raw(const StubPtr& stub, const nidevice_grpc::Session& task, const pb::int32& num_samps_per_chan, const double& timeout, const pb::uint32& array_size_in_bytes); std::unique_ptr> register_done_event(const StubPtr& stub, ::grpc::ClientContext& context, const nidevice_grpc::Session& task); std::unique_ptr> register_every_n_samples_event(const StubPtr& stub, ::grpc::ClientContext& context, const nidevice_grpc::Session& task, const simple_variant& every_n_samples_event_type, const pb::uint32& n_samples); std::unique_ptr> register_signal_event(const StubPtr& stub, ::grpc::ClientContext& context, const nidevice_grpc::Session& task, const simple_variant& signal_id); diff --git a/generated/nidaqmx/nidaqmx_service.cpp b/generated/nidaqmx/nidaqmx_service.cpp index 5c9eda6c6..fa085d3df 100644 --- a/generated/nidaqmx/nidaqmx_service.cpp +++ b/generated/nidaqmx/nidaqmx_service.cpp @@ -158,6 +158,81 @@ namespace nidaqmx_grpc { std::shared_ptr library; }; + struct MonikerReadCtrFreqData + { + TaskHandle task; + int32 num_samps_per_chan; + float64 timeout; + int32 interleaved; + uInt32 array_size_in_samps; + bool32* reserved; + nidaqmx_grpc::ReadCtrFreqStreamingResponse response; + std::shared_ptr library; + }; + + struct MonikerReadCtrFreqScalarData + { + TaskHandle task; + float64 timeout; + bool32* reserved; + nidaqmx_grpc::ReadCtrFreqScalarStreamingResponse response; + std::shared_ptr library; + }; + + struct MonikerReadCtrTicksData + { + TaskHandle task; + int32 num_samps_per_chan; + float64 timeout; + int32 interleaved; + uInt32 array_size_in_samps; + bool32* reserved; + nidaqmx_grpc::ReadCtrTicksStreamingResponse response; + std::shared_ptr library; + }; + + struct MonikerReadCtrTicksScalarData + { + TaskHandle task; + float64 timeout; + bool32* reserved; + nidaqmx_grpc::ReadCtrTicksScalarStreamingResponse response; + std::shared_ptr library; + }; + + struct MonikerReadCtrTimeData + { + TaskHandle task; + int32 num_samps_per_chan; + float64 timeout; + int32 interleaved; + uInt32 array_size_in_samps; + bool32* reserved; + nidaqmx_grpc::ReadCtrTimeStreamingResponse response; + std::shared_ptr library; + }; + + struct MonikerReadCtrTimeScalarData + { + TaskHandle task; + float64 timeout; + bool32* reserved; + nidaqmx_grpc::ReadCtrTimeScalarStreamingResponse response; + std::shared_ptr library; + }; + + struct MonikerReadDigitalLinesData + { + TaskHandle task; + int32 num_samps_per_chan; + float64 timeout; + int32 fill_mode; + uInt32 array_size_in_bytes; + bool32* reserved; + nidaqmx_grpc::ReadDigitalLinesStreamingResponse response; + std::shared_ptr library; + }; + struct MonikerReadDigitalScalarU32Data { TaskHandle task; @@ -191,6 +266,62 @@ namespace nidaqmx_grpc { std::shared_ptr library; }; + struct MonikerReadDigitalU8Data + { + TaskHandle task; + int32 num_samps_per_chan; + float64 timeout; + int32 fill_mode; + uInt32 array_size_in_samps; + bool32* reserved; + nidaqmx_grpc::ReadDigitalU8StreamingResponse response; + std::shared_ptr library; + }; + + struct MonikerReadPowerBinaryI16Data + { + TaskHandle task; + int32 num_samps_per_chan; + float64 timeout; + int32 fill_mode; + uInt32 array_size_in_samps; + bool32* reserved; + nidaqmx_grpc::ReadPowerBinaryI16StreamingResponse response; + std::shared_ptr library; + }; + + struct MonikerReadPowerF64Data + { + TaskHandle task; + int32 num_samps_per_chan; + float64 timeout; + int32 fill_mode; + uInt32 array_size_in_samps; + bool32* reserved; + nidaqmx_grpc::ReadPowerF64StreamingResponse response; + std::shared_ptr library; + }; + + struct MonikerReadPowerScalarF64Data + { + TaskHandle task; + float64 timeout; + bool32* reserved; + nidaqmx_grpc::ReadPowerScalarF64StreamingResponse response; + std::shared_ptr library; + }; + + struct MonikerReadRawData + { + TaskHandle task; + int32 num_samps_per_chan; + float64 timeout; + uInt32 array_size_in_bytes; + bool32* reserved; + nidaqmx_grpc::ReadRawStreamingResponse response; + std::shared_ptr library; + }; + struct MonikerWaitForNextSampleClockData { TaskHandle task; @@ -349,9 +480,21 @@ namespace nidaqmx_grpc { ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadCounterScalarU32", MonikerReadCounterScalarU32); ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadCounterU32", MonikerReadCounterU32); ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadCounterU32Ex", MonikerReadCounterU32Ex); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadCtrFreq", MonikerReadCtrFreq); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadCtrFreqScalar", MonikerReadCtrFreqScalar); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadCtrTicks", MonikerReadCtrTicks); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadCtrTicksScalar", MonikerReadCtrTicksScalar); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadCtrTime", MonikerReadCtrTime); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadCtrTimeScalar", MonikerReadCtrTimeScalar); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadDigitalLines", MonikerReadDigitalLines); ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadDigitalScalarU32", MonikerReadDigitalScalarU32); ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadDigitalU16", MonikerReadDigitalU16); ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadDigitalU32", MonikerReadDigitalU32); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadDigitalU8", MonikerReadDigitalU8); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadPowerBinaryI16", MonikerReadPowerBinaryI16); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadPowerF64", MonikerReadPowerF64); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadPowerScalarF64", MonikerReadPowerScalarF64); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadRaw", MonikerReadRaw); ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWaitForNextSampleClock", MonikerWaitForNextSampleClock); ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteAnalogF64", MonikerWriteAnalogF64); ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteAnalogScalarF64", MonikerWriteAnalogScalarF64); @@ -723,22 +866,29 @@ ::grpc::Status MonikerReadCounterU32Ex(void* data, google::protobuf::Arena& aren return ::grpc::Status::OK; } -::grpc::Status MonikerReadDigitalScalarU32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) +::grpc::Status MonikerReadCtrFreq(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadDigitalScalarU32Data* function_data = static_cast(data); + MonikerReadCtrFreqData* function_data = static_cast(data); auto library = function_data->library; auto response = &function_data->response; auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; auto timeout = function_data->timeout; + auto interleaved = function_data->interleaved; + auto array_size_in_samps = function_data->array_size_in_samps; auto reserved = function_data->reserved; - uInt32 value {}; + response->mutable_read_array_frequency()->Resize(array_size_in_samps, 0); + float64* read_array_frequency = response->mutable_read_array_frequency()->mutable_data(); + response->mutable_read_array_duty_cycle()->Resize(array_size_in_samps, 0); + float64* read_array_duty_cycle = response->mutable_read_array_duty_cycle()->mutable_data(); + int32 samps_per_chan_read {}; - auto status = library->ReadDigitalScalarU32(task, timeout, &value, reserved); + auto status = library->ReadCtrFreq(task, num_samps_per_chan, timeout, interleaved, read_array_frequency, read_array_duty_cycle, array_size_in_samps, &samps_per_chan_read, reserved); if (status >= 0) { response->set_status(status); - response->set_value(value); + response->set_samps_per_chan_read(samps_per_chan_read); packedData.PackFrom(*response); } else @@ -748,35 +898,24 @@ ::grpc::Status MonikerReadDigitalScalarU32(void* data, google::protobuf::Arena& return ::grpc::Status::OK; } -::grpc::Status MonikerReadDigitalU16(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) +::grpc::Status MonikerReadCtrFreqScalar(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadDigitalU16Data* function_data = static_cast(data); + MonikerReadCtrFreqScalarData* function_data = static_cast(data); auto library = function_data->library; auto response = &function_data->response; auto task = function_data->task; - auto num_samps_per_chan = function_data->num_samps_per_chan; auto timeout = function_data->timeout; - auto fill_mode = function_data->fill_mode; - auto array_size_in_samps = function_data->array_size_in_samps; auto reserved = function_data->reserved; - std::vector read_array(array_size_in_samps); - int32 samps_per_chan_read {}; + float64 frequency {}; + float64 duty_cycle {}; - auto status = library->ReadDigitalU16(task, num_samps_per_chan, timeout, fill_mode, read_array.data(), array_size_in_samps, &samps_per_chan_read, reserved); + auto status = library->ReadCtrFreqScalar(task, timeout, &frequency, &duty_cycle, reserved); if (status >= 0) { response->set_status(status); - response->mutable_read_array()->Clear(); - response->mutable_read_array()->Reserve(array_size_in_samps); - std::transform( - read_array.begin(), - read_array.begin() + array_size_in_samps, - google::protobuf::RepeatedFieldBackInserter(response->mutable_read_array()), - [&](auto x) { - return x; - }); - response->set_samps_per_chan_read(samps_per_chan_read); + response->set_frequency(frequency); + response->set_duty_cycle(duty_cycle); packedData.PackFrom(*response); } else @@ -786,22 +925,24 @@ ::grpc::Status MonikerReadDigitalU16(void* data, google::protobuf::Arena& arena, return ::grpc::Status::OK; } -::grpc::Status MonikerReadDigitalU32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) +::grpc::Status MonikerReadCtrTicks(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadDigitalU32Data* function_data = static_cast(data); + MonikerReadCtrTicksData* function_data = static_cast(data); auto library = function_data->library; auto response = &function_data->response; auto task = function_data->task; auto num_samps_per_chan = function_data->num_samps_per_chan; auto timeout = function_data->timeout; - auto fill_mode = function_data->fill_mode; + auto interleaved = function_data->interleaved; auto array_size_in_samps = function_data->array_size_in_samps; auto reserved = function_data->reserved; - response->mutable_read_array()->Resize(array_size_in_samps, 0); - uInt32* read_array = reinterpret_cast(response->mutable_read_array()->mutable_data()); + response->mutable_read_array_high_ticks()->Resize(array_size_in_samps, 0); + uInt32* read_array_high_ticks = reinterpret_cast(response->mutable_read_array_high_ticks()->mutable_data()); + response->mutable_read_array_low_ticks()->Resize(array_size_in_samps, 0); + uInt32* read_array_low_ticks = reinterpret_cast(response->mutable_read_array_low_ticks()->mutable_data()); int32 samps_per_chan_read {}; - auto status = library->ReadDigitalU32(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); + auto status = library->ReadCtrTicks(task, num_samps_per_chan, timeout, interleaved, read_array_high_ticks, read_array_low_ticks, array_size_in_samps, &samps_per_chan_read, reserved); if (status >= 0) { @@ -816,21 +957,24 @@ ::grpc::Status MonikerReadDigitalU32(void* data, google::protobuf::Arena& arena, return ::grpc::Status::OK; } -::grpc::Status MonikerWaitForNextSampleClock(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) +::grpc::Status MonikerReadCtrTicksScalar(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWaitForNextSampleClockData* function_data = static_cast(data); + MonikerReadCtrTicksScalarData* function_data = static_cast(data); auto library = function_data->library; auto response = &function_data->response; auto task = function_data->task; auto timeout = function_data->timeout; - bool32 is_late {}; + auto reserved = function_data->reserved; + uInt32 high_ticks {}; + uInt32 low_ticks {}; - auto status = library->WaitForNextSampleClock(task, timeout, &is_late); + auto status = library->ReadCtrTicksScalar(task, timeout, &high_ticks, &low_ticks, reserved); if (status >= 0) { response->set_status(status); - response->set_is_late(is_late); + response->set_high_ticks(high_ticks); + response->set_low_ticks(low_ticks); packedData.PackFrom(*response); } else @@ -840,108 +984,484 @@ ::grpc::Status MonikerWaitForNextSampleClock(void* data, google::protobuf::Arena return ::grpc::Status::OK; } -::grpc::Status MonikerWriteAnalogF64(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) +::grpc::Status MonikerReadCtrTime(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteAnalogF64Data* function_data = static_cast(data); + MonikerReadCtrTimeData* function_data = static_cast(data); auto library = function_data->library; auto response = &function_data->response; auto task = function_data->task; auto num_samps_per_chan = function_data->num_samps_per_chan; - auto auto_start = function_data->auto_start; auto timeout = function_data->timeout; - auto data_layout = function_data->data_layout; + auto interleaved = function_data->interleaved; + auto array_size_in_samps = function_data->array_size_in_samps; auto reserved = function_data->reserved; - int32 samps_per_chan_written {}; - - ArrayDoubleData arraydoubledata_message; - packedData.UnpackTo(&arraydoubledata_message); - - auto data_array = arraydoubledata_message.value(); - auto write_array = const_cast(arraydoubledata_message.value().data()); - auto size = data_array.size(); + response->mutable_read_array_high_time()->Resize(array_size_in_samps, 0); + float64* read_array_high_time = response->mutable_read_array_high_time()->mutable_data(); + response->mutable_read_array_low_time()->Resize(array_size_in_samps, 0); + float64* read_array_low_time = response->mutable_read_array_low_time()->mutable_data(); + int32 samps_per_chan_read {}; - auto status = library->WriteAnalogF64(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array, &samps_per_chan_written, reserved); + auto status = library->ReadCtrTime(task, num_samps_per_chan, timeout, interleaved, read_array_high_time, read_array_low_time, array_size_in_samps, &samps_per_chan_read, reserved); + if (status >= 0) + { + response->set_status(status); + response->set_samps_per_chan_read(samps_per_chan_read); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } return ::grpc::Status::OK; } -::grpc::Status MonikerWriteAnalogScalarF64(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) +::grpc::Status MonikerReadCtrTimeScalar(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteAnalogScalarF64Data* function_data = static_cast(data); + MonikerReadCtrTimeScalarData* function_data = static_cast(data); auto library = function_data->library; auto response = &function_data->response; auto task = function_data->task; - auto auto_start = function_data->auto_start; auto timeout = function_data->timeout; auto reserved = function_data->reserved; + float64 high_time {}; + float64 low_time {}; - DoubleData doubledata_message; - packedData.UnpackTo(&doubledata_message); - auto value = doubledata_message.value(); - - auto status = library->WriteAnalogScalarF64(task, auto_start, timeout, value, reserved); + auto status = library->ReadCtrTimeScalar(task, timeout, &high_time, &low_time, reserved); + if (status >= 0) + { + response->set_status(status); + response->set_high_time(high_time); + response->set_low_time(low_time); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } return ::grpc::Status::OK; } -::grpc::Status MonikerWriteBinaryI16(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) +::grpc::Status MonikerReadDigitalLines(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteBinaryI16Data* function_data = static_cast(data); + MonikerReadDigitalLinesData* function_data = static_cast(data); auto library = function_data->library; auto response = &function_data->response; auto task = function_data->task; auto num_samps_per_chan = function_data->num_samps_per_chan; - auto auto_start = function_data->auto_start; auto timeout = function_data->timeout; - auto data_layout = function_data->data_layout; + auto fill_mode = function_data->fill_mode; + auto array_size_in_bytes = function_data->array_size_in_bytes; auto reserved = function_data->reserved; - int32 samps_per_chan_written {}; - - ArrayI16Data arrayi16data_message; - packedData.UnpackTo(&arrayi16data_message); - - auto data_array = arrayi16data_message.value(); - auto write_array = std::vector(); - auto size = data_array.size(); - write_array.reserve(size); - std::transform( - data_array.begin(), - data_array.end(), - std::back_inserter(write_array), - [](auto x) { - if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { - std::string message("value " + std::to_string(x) + " doesn't fit in datatype int16"); - throw nidevice_grpc::ValueOutOfRangeException(message); - } - return static_cast(x); - }); + std::string read_array(array_size_in_bytes, '\0'); + int32 samps_per_chan_read {}; + int32 num_bytes_per_samp {}; - auto status = library->WriteBinaryI16(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array.data(), &samps_per_chan_written, reserved); + auto status = library->ReadDigitalLines(task, num_samps_per_chan, timeout, fill_mode, (uInt8*)read_array.data(), array_size_in_bytes, &samps_per_chan_read, &num_bytes_per_samp, reserved); + if (status >= 0) + { + response->set_status(status); + response->set_read_array(read_array); + response->set_samps_per_chan_read(samps_per_chan_read); + response->set_num_bytes_per_samp(num_bytes_per_samp); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } return ::grpc::Status::OK; } -::grpc::Status MonikerWriteBinaryI32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) +::grpc::Status MonikerReadDigitalScalarU32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteBinaryI32Data* function_data = static_cast(data); + MonikerReadDigitalScalarU32Data* function_data = static_cast(data); auto library = function_data->library; auto response = &function_data->response; auto task = function_data->task; - auto num_samps_per_chan = function_data->num_samps_per_chan; - auto auto_start = function_data->auto_start; auto timeout = function_data->timeout; - auto data_layout = function_data->data_layout; auto reserved = function_data->reserved; - int32 samps_per_chan_written {}; - - ArrayI32Data arrayi32data_message; - packedData.UnpackTo(&arrayi32data_message); - - auto data_array = arrayi32data_message.value(); - auto write_array = reinterpret_cast(arrayi32data_message.value().data()); - auto size = data_array.size(); + uInt32 value {}; - auto status = library->WriteBinaryI32(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array, &samps_per_chan_written, reserved); + auto status = library->ReadDigitalScalarU32(task, timeout, &value, reserved); + + if (status >= 0) + { + response->set_status(status); + response->set_value(value); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; +} + +::grpc::Status MonikerReadDigitalU16(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) +{ + MonikerReadDigitalU16Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto timeout = function_data->timeout; + auto fill_mode = function_data->fill_mode; + auto array_size_in_samps = function_data->array_size_in_samps; + auto reserved = function_data->reserved; + std::vector read_array(array_size_in_samps); + int32 samps_per_chan_read {}; + + auto status = library->ReadDigitalU16(task, num_samps_per_chan, timeout, fill_mode, read_array.data(), array_size_in_samps, &samps_per_chan_read, reserved); + + if (status >= 0) + { + response->set_status(status); + response->mutable_read_array()->Clear(); + response->mutable_read_array()->Reserve(array_size_in_samps); + std::transform( + read_array.begin(), + read_array.begin() + array_size_in_samps, + google::protobuf::RepeatedFieldBackInserter(response->mutable_read_array()), + [&](auto x) { + return x; + }); + response->set_samps_per_chan_read(samps_per_chan_read); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; +} + +::grpc::Status MonikerReadDigitalU32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) +{ + MonikerReadDigitalU32Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto timeout = function_data->timeout; + auto fill_mode = function_data->fill_mode; + auto array_size_in_samps = function_data->array_size_in_samps; + auto reserved = function_data->reserved; + response->mutable_read_array()->Resize(array_size_in_samps, 0); + uInt32* read_array = reinterpret_cast(response->mutable_read_array()->mutable_data()); + int32 samps_per_chan_read {}; + + auto status = library->ReadDigitalU32(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); + + if (status >= 0) + { + response->set_status(status); + response->set_samps_per_chan_read(samps_per_chan_read); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; +} + +::grpc::Status MonikerReadDigitalU8(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) +{ + MonikerReadDigitalU8Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto timeout = function_data->timeout; + auto fill_mode = function_data->fill_mode; + auto array_size_in_samps = function_data->array_size_in_samps; + auto reserved = function_data->reserved; + std::string read_array(array_size_in_samps, '\0'); + int32 samps_per_chan_read {}; + + auto status = library->ReadDigitalU8(task, num_samps_per_chan, timeout, fill_mode, (uInt8*)read_array.data(), array_size_in_samps, &samps_per_chan_read, reserved); + + if (status >= 0) + { + response->set_status(status); + response->set_read_array(read_array); + response->set_samps_per_chan_read(samps_per_chan_read); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; +} + +::grpc::Status MonikerReadPowerBinaryI16(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) +{ + MonikerReadPowerBinaryI16Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto timeout = function_data->timeout; + auto fill_mode = function_data->fill_mode; + auto array_size_in_samps = function_data->array_size_in_samps; + auto reserved = function_data->reserved; + std::vector read_array_voltage(array_size_in_samps); + std::vector read_array_current(array_size_in_samps); + int32 samps_per_chan_read {}; + + auto status = library->ReadPowerBinaryI16(task, num_samps_per_chan, timeout, fill_mode, read_array_voltage.data(), read_array_current.data(), array_size_in_samps, &samps_per_chan_read, reserved); + + if (status >= 0) + { + response->set_status(status); + response->mutable_read_array_voltage()->Clear(); + response->mutable_read_array_voltage()->Reserve(array_size_in_samps); + std::transform( + read_array_voltage.begin(), + read_array_voltage.begin() + array_size_in_samps, + google::protobuf::RepeatedFieldBackInserter(response->mutable_read_array_voltage()), + [&](auto x) { + return x; + }); + response->mutable_read_array_current()->Clear(); + response->mutable_read_array_current()->Reserve(array_size_in_samps); + std::transform( + read_array_current.begin(), + read_array_current.begin() + array_size_in_samps, + google::protobuf::RepeatedFieldBackInserter(response->mutable_read_array_current()), + [&](auto x) { + return x; + }); + response->set_samps_per_chan_read(samps_per_chan_read); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; +} + +::grpc::Status MonikerReadPowerF64(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) +{ + MonikerReadPowerF64Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto timeout = function_data->timeout; + auto fill_mode = function_data->fill_mode; + auto array_size_in_samps = function_data->array_size_in_samps; + auto reserved = function_data->reserved; + response->mutable_read_array_voltage()->Resize(array_size_in_samps, 0); + float64* read_array_voltage = response->mutable_read_array_voltage()->mutable_data(); + response->mutable_read_array_current()->Resize(array_size_in_samps, 0); + float64* read_array_current = response->mutable_read_array_current()->mutable_data(); + int32 samps_per_chan_read {}; + + auto status = library->ReadPowerF64(task, num_samps_per_chan, timeout, fill_mode, read_array_voltage, read_array_current, array_size_in_samps, &samps_per_chan_read, reserved); + + if (status >= 0) + { + response->set_status(status); + response->set_samps_per_chan_read(samps_per_chan_read); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; +} + +::grpc::Status MonikerReadPowerScalarF64(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) +{ + MonikerReadPowerScalarF64Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto timeout = function_data->timeout; + auto reserved = function_data->reserved; + float64 voltage {}; + float64 current {}; + + auto status = library->ReadPowerScalarF64(task, timeout, &voltage, ¤t, reserved); + + if (status >= 0) + { + response->set_status(status); + response->set_voltage(voltage); + response->set_current(current); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; +} + +::grpc::Status MonikerReadRaw(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) +{ + MonikerReadRawData* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto timeout = function_data->timeout; + auto array_size_in_bytes = function_data->array_size_in_bytes; + auto reserved = function_data->reserved; + std::string read_array(array_size_in_bytes, '\0'); + int32 samps_read {}; + int32 num_bytes_per_samp {}; + + auto status = library->ReadRaw(task, num_samps_per_chan, timeout, (uInt8*)read_array.data(), array_size_in_bytes, &samps_read, &num_bytes_per_samp, reserved); + + if (status >= 0) + { + response->set_status(status); + response->set_read_array(read_array); + response->set_samps_read(samps_read); + response->set_num_bytes_per_samp(num_bytes_per_samp); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; +} + +::grpc::Status MonikerWaitForNextSampleClock(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) +{ + MonikerWaitForNextSampleClockData* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto timeout = function_data->timeout; + bool32 is_late {}; + + auto status = library->WaitForNextSampleClock(task, timeout, &is_late); + + if (status >= 0) + { + response->set_status(status); + response->set_is_late(is_late); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; +} + +::grpc::Status MonikerWriteAnalogF64(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) +{ + MonikerWriteAnalogF64Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto auto_start = function_data->auto_start; + auto timeout = function_data->timeout; + auto data_layout = function_data->data_layout; + auto reserved = function_data->reserved; + int32 samps_per_chan_written {}; + + ArrayDoubleData arraydoubledata_message; + packedData.UnpackTo(&arraydoubledata_message); + + auto data_array = arraydoubledata_message.value(); + auto write_array = const_cast(arraydoubledata_message.value().data()); + auto size = data_array.size(); + + auto status = library->WriteAnalogF64(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array, &samps_per_chan_written, reserved); + + return ::grpc::Status::OK; +} + +::grpc::Status MonikerWriteAnalogScalarF64(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) +{ + MonikerWriteAnalogScalarF64Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto auto_start = function_data->auto_start; + auto timeout = function_data->timeout; + auto reserved = function_data->reserved; + + DoubleData doubledata_message; + packedData.UnpackTo(&doubledata_message); + auto value = doubledata_message.value(); + + auto status = library->WriteAnalogScalarF64(task, auto_start, timeout, value, reserved); + + return ::grpc::Status::OK; +} + +::grpc::Status MonikerWriteBinaryI16(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) +{ + MonikerWriteBinaryI16Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto auto_start = function_data->auto_start; + auto timeout = function_data->timeout; + auto data_layout = function_data->data_layout; + auto reserved = function_data->reserved; + int32 samps_per_chan_written {}; + + ArrayI16Data arrayi16data_message; + packedData.UnpackTo(&arrayi16data_message); + + auto data_array = arrayi16data_message.value(); + auto write_array = std::vector(); + auto size = data_array.size(); + write_array.reserve(size); + std::transform( + data_array.begin(), + data_array.end(), + std::back_inserter(write_array), + [](auto x) { + if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { + std::string message("value " + std::to_string(x) + " doesn't fit in datatype int16"); + throw nidevice_grpc::ValueOutOfRangeException(message); + } + return static_cast(x); + }); + + auto status = library->WriteBinaryI16(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array.data(), &samps_per_chan_written, reserved); + + return ::grpc::Status::OK; +} + +::grpc::Status MonikerWriteBinaryI32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) +{ + MonikerWriteBinaryI32Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto auto_start = function_data->auto_start; + auto timeout = function_data->timeout; + auto data_layout = function_data->data_layout; + auto reserved = function_data->reserved; + int32 samps_per_chan_written {}; + + ArrayI32Data arrayi32data_message; + packedData.UnpackTo(&arrayi32data_message); + + auto data_array = arrayi32data_message.value(); + auto write_array = reinterpret_cast(arrayi32data_message.value().data()); + auto size = data_array.size(); + + auto status = library->WriteBinaryI32(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array, &samps_per_chan_written, reserved); return ::grpc::Status::OK; } @@ -15269,6 +15789,61 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena } } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginReadCtrFreq(::grpc::ServerContext* context, const BeginReadCtrFreqRequest* request, BeginReadCtrFreqResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 interleaved; + switch (request->interleaved_enum_case()) { + case nidaqmx_grpc::BeginReadCtrFreqRequest::InterleavedEnumCase::kInterleaved: { + interleaved = static_cast(request->interleaved()); + break; + } + case nidaqmx_grpc::BeginReadCtrFreqRequest::InterleavedEnumCase::kInterleavedRaw: { + interleaved = static_cast(request->interleaved_raw()); + break; + } + case nidaqmx_grpc::BeginReadCtrFreqRequest::InterleavedEnumCase::INTERLEAVED_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for interleaved was not specified or out of range"); + break; + } + } + + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->timeout = timeout; + data->interleaved = interleaved; + data->array_size_in_samps = array_size_in_samps; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + data->response.mutable_read_array_frequency()->Reserve(request->array_size_in_samps()); + data->response.mutable_read_array_frequency()->Resize(request->array_size_in_samps(), 0); + data->response.mutable_read_array_duty_cycle()->Reserve(request->array_size_in_samps()); + data->response.mutable_read_array_duty_cycle()->Resize(request->array_size_in_samps(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCtrFreq", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + //--------------------------------------------------------------------- //--------------------------------------------------------------------- ::grpc::Status NiDAQmxService::ReadCtrFreqScalar(::grpc::ServerContext* context, const ReadCtrFreqScalarRequest* request, ReadCtrFreqScalarResponse* response) @@ -15297,6 +15872,36 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena } } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginReadCtrFreqScalar(::grpc::ServerContext* context, const BeginReadCtrFreqScalarRequest* request, BeginReadCtrFreqScalarResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + float64 timeout = request->timeout(); + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->timeout = timeout; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCtrFreqScalar", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + //--------------------------------------------------------------------- //--------------------------------------------------------------------- ::grpc::Status NiDAQmxService::ReadCtrTicks(::grpc::ServerContext* context, const ReadCtrTicksRequest* request, ReadCtrTicksResponse* response) @@ -15346,6 +15951,61 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena } } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginReadCtrTicks(::grpc::ServerContext* context, const BeginReadCtrTicksRequest* request, BeginReadCtrTicksResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 interleaved; + switch (request->interleaved_enum_case()) { + case nidaqmx_grpc::BeginReadCtrTicksRequest::InterleavedEnumCase::kInterleaved: { + interleaved = static_cast(request->interleaved()); + break; + } + case nidaqmx_grpc::BeginReadCtrTicksRequest::InterleavedEnumCase::kInterleavedRaw: { + interleaved = static_cast(request->interleaved_raw()); + break; + } + case nidaqmx_grpc::BeginReadCtrTicksRequest::InterleavedEnumCase::INTERLEAVED_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for interleaved was not specified or out of range"); + break; + } + } + + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->timeout = timeout; + data->interleaved = interleaved; + data->array_size_in_samps = array_size_in_samps; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + data->response.mutable_read_array_high_ticks()->Reserve(request->array_size_in_samps()); + data->response.mutable_read_array_high_ticks()->Resize(request->array_size_in_samps(), 0); + data->response.mutable_read_array_low_ticks()->Reserve(request->array_size_in_samps()); + data->response.mutable_read_array_low_ticks()->Resize(request->array_size_in_samps(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCtrTicks", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + //--------------------------------------------------------------------- //--------------------------------------------------------------------- ::grpc::Status NiDAQmxService::ReadCtrTicksScalar(::grpc::ServerContext* context, const ReadCtrTicksScalarRequest* request, ReadCtrTicksScalarResponse* response) @@ -15374,6 +16034,36 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena } } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginReadCtrTicksScalar(::grpc::ServerContext* context, const BeginReadCtrTicksScalarRequest* request, BeginReadCtrTicksScalarResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + float64 timeout = request->timeout(); + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->timeout = timeout; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCtrTicksScalar", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + //--------------------------------------------------------------------- //--------------------------------------------------------------------- ::grpc::Status NiDAQmxService::ReadCtrTime(::grpc::ServerContext* context, const ReadCtrTimeRequest* request, ReadCtrTimeResponse* response) @@ -15425,7 +16115,90 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena //--------------------------------------------------------------------- //--------------------------------------------------------------------- - ::grpc::Status NiDAQmxService::ReadCtrTimeScalar(::grpc::ServerContext* context, const ReadCtrTimeScalarRequest* request, ReadCtrTimeScalarResponse* response) + ::grpc::Status NiDAQmxService::BeginReadCtrTime(::grpc::ServerContext* context, const BeginReadCtrTimeRequest* request, BeginReadCtrTimeResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 interleaved; + switch (request->interleaved_enum_case()) { + case nidaqmx_grpc::BeginReadCtrTimeRequest::InterleavedEnumCase::kInterleaved: { + interleaved = static_cast(request->interleaved()); + break; + } + case nidaqmx_grpc::BeginReadCtrTimeRequest::InterleavedEnumCase::kInterleavedRaw: { + interleaved = static_cast(request->interleaved_raw()); + break; + } + case nidaqmx_grpc::BeginReadCtrTimeRequest::InterleavedEnumCase::INTERLEAVED_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for interleaved was not specified or out of range"); + break; + } + } + + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->timeout = timeout; + data->interleaved = interleaved; + data->array_size_in_samps = array_size_in_samps; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + data->response.mutable_read_array_high_time()->Reserve(request->array_size_in_samps()); + data->response.mutable_read_array_high_time()->Resize(request->array_size_in_samps(), 0); + data->response.mutable_read_array_low_time()->Reserve(request->array_size_in_samps()); + data->response.mutable_read_array_low_time()->Resize(request->array_size_in_samps(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCtrTime", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ReadCtrTimeScalar(::grpc::ServerContext* context, const ReadCtrTimeScalarRequest* request, ReadCtrTimeScalarResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + float64 timeout = request->timeout(); + auto reserved = nullptr; + float64 high_time {}; + float64 low_time {}; + auto status = library_->ReadCtrTimeScalar(task, timeout, &high_time, &low_time, reserved); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + response->set_high_time(high_time); + response->set_low_time(low_time); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginReadCtrTimeScalar(::grpc::ServerContext* context, const BeginReadCtrTimeScalarRequest* request, BeginReadCtrTimeScalarResponse* response) { if (context->IsCancelled()) { return ::grpc::Status::CANCELLED; @@ -15435,15 +16208,17 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena TaskHandle task = session_repository_->access_session(task_grpc_session.name()); float64 timeout = request->timeout(); auto reserved = nullptr; - float64 high_time {}; - float64 low_time {}; - auto status = library_->ReadCtrTimeScalar(task, timeout, &high_time, &low_time, reserved); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_high_time(high_time); - response->set_low_time(low_time); + + auto data = std::make_unique(); + data->task = task; + data->timeout = timeout; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCtrTimeScalar", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); return ::grpc::Status::OK; } catch (nidevice_grpc::NonDriverException& ex) { @@ -15500,6 +16275,59 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena } } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginReadDigitalLines(::grpc::ServerContext* context, const BeginReadDigitalLinesRequest* request, BeginReadDigitalLinesResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 fill_mode; + switch (request->fill_mode_enum_case()) { + case nidaqmx_grpc::BeginReadDigitalLinesRequest::FillModeEnumCase::kFillMode: { + fill_mode = static_cast(request->fill_mode()); + break; + } + case nidaqmx_grpc::BeginReadDigitalLinesRequest::FillModeEnumCase::kFillModeRaw: { + fill_mode = static_cast(request->fill_mode_raw()); + break; + } + case nidaqmx_grpc::BeginReadDigitalLinesRequest::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); + break; + } + } + + uInt32 array_size_in_bytes = request->array_size_in_bytes(); + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->timeout = timeout; + data->fill_mode = fill_mode; + data->array_size_in_bytes = array_size_in_bytes; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + data->response.mutable_read_array()->reserve(request->array_size_in_bytes()); + data->response.mutable_read_array()->resize(request->array_size_in_bytes(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadDigitalLines", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + //--------------------------------------------------------------------- //--------------------------------------------------------------------- ::grpc::Status NiDAQmxService::ReadDigitalScalarU32(::grpc::ServerContext* context, const ReadDigitalScalarU32Request* request, ReadDigitalScalarU32Response* response) @@ -15811,6 +16639,59 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena } } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginReadDigitalU8(::grpc::ServerContext* context, const BeginReadDigitalU8Request* request, BeginReadDigitalU8Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 fill_mode; + switch (request->fill_mode_enum_case()) { + case nidaqmx_grpc::BeginReadDigitalU8Request::FillModeEnumCase::kFillMode: { + fill_mode = static_cast(request->fill_mode()); + break; + } + case nidaqmx_grpc::BeginReadDigitalU8Request::FillModeEnumCase::kFillModeRaw: { + fill_mode = static_cast(request->fill_mode_raw()); + break; + } + case nidaqmx_grpc::BeginReadDigitalU8Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); + break; + } + } + + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->timeout = timeout; + data->fill_mode = fill_mode; + data->array_size_in_samps = array_size_in_samps; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + data->response.mutable_read_array()->reserve(request->array_size_in_samps()); + data->response.mutable_read_array()->resize(request->array_size_in_samps(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadDigitalU8", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + //--------------------------------------------------------------------- //--------------------------------------------------------------------- ::grpc::Status NiDAQmxService::ReadPowerBinaryI16(::grpc::ServerContext* context, const ReadPowerBinaryI16Request* request, ReadPowerBinaryI16Response* response) @@ -15876,6 +16757,61 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena } } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginReadPowerBinaryI16(::grpc::ServerContext* context, const BeginReadPowerBinaryI16Request* request, BeginReadPowerBinaryI16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 fill_mode; + switch (request->fill_mode_enum_case()) { + case nidaqmx_grpc::BeginReadPowerBinaryI16Request::FillModeEnumCase::kFillMode: { + fill_mode = static_cast(request->fill_mode()); + break; + } + case nidaqmx_grpc::BeginReadPowerBinaryI16Request::FillModeEnumCase::kFillModeRaw: { + fill_mode = static_cast(request->fill_mode_raw()); + break; + } + case nidaqmx_grpc::BeginReadPowerBinaryI16Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); + break; + } + } + + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->timeout = timeout; + data->fill_mode = fill_mode; + data->array_size_in_samps = array_size_in_samps; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + data->response.mutable_read_array_voltage()->Reserve(request->array_size_in_samps()); + data->response.mutable_read_array_voltage()->Resize(request->array_size_in_samps(), 0); + data->response.mutable_read_array_current()->Reserve(request->array_size_in_samps()); + data->response.mutable_read_array_current()->Resize(request->array_size_in_samps(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadPowerBinaryI16", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + //--------------------------------------------------------------------- //--------------------------------------------------------------------- ::grpc::Status NiDAQmxService::ReadPowerF64(::grpc::ServerContext* context, const ReadPowerF64Request* request, ReadPowerF64Response* response) @@ -15925,6 +16861,61 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena } } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginReadPowerF64(::grpc::ServerContext* context, const BeginReadPowerF64Request* request, BeginReadPowerF64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 fill_mode; + switch (request->fill_mode_enum_case()) { + case nidaqmx_grpc::BeginReadPowerF64Request::FillModeEnumCase::kFillMode: { + fill_mode = static_cast(request->fill_mode()); + break; + } + case nidaqmx_grpc::BeginReadPowerF64Request::FillModeEnumCase::kFillModeRaw: { + fill_mode = static_cast(request->fill_mode_raw()); + break; + } + case nidaqmx_grpc::BeginReadPowerF64Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); + break; + } + } + + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->timeout = timeout; + data->fill_mode = fill_mode; + data->array_size_in_samps = array_size_in_samps; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + data->response.mutable_read_array_voltage()->Reserve(request->array_size_in_samps()); + data->response.mutable_read_array_voltage()->Resize(request->array_size_in_samps(), 0); + data->response.mutable_read_array_current()->Reserve(request->array_size_in_samps()); + data->response.mutable_read_array_current()->Resize(request->array_size_in_samps(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadPowerF64", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + //--------------------------------------------------------------------- //--------------------------------------------------------------------- ::grpc::Status NiDAQmxService::ReadPowerScalarF64(::grpc::ServerContext* context, const ReadPowerScalarF64Request* request, ReadPowerScalarF64Response* response) @@ -15953,6 +16944,36 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena } } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginReadPowerScalarF64(::grpc::ServerContext* context, const BeginReadPowerScalarF64Request* request, BeginReadPowerScalarF64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + float64 timeout = request->timeout(); + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->timeout = timeout; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadPowerScalarF64", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + //--------------------------------------------------------------------- //--------------------------------------------------------------------- ::grpc::Status NiDAQmxService::ReadRaw(::grpc::ServerContext* context, const ReadRawRequest* request, ReadRawResponse* response) @@ -15986,6 +17007,42 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena } } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginReadRaw(::grpc::ServerContext* context, const BeginReadRawRequest* request, BeginReadRawResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + uInt32 array_size_in_bytes = request->array_size_in_bytes(); + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->timeout = timeout; + data->array_size_in_bytes = array_size_in_bytes; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + data->response.mutable_read_array()->reserve(request->array_size_in_bytes()); + data->response.mutable_read_array()->resize(request->array_size_in_bytes(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadRaw", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + //--------------------------------------------------------------------- //--------------------------------------------------------------------- ::grpc::ServerWriteReactor* diff --git a/generated/nidaqmx/nidaqmx_service.h b/generated/nidaqmx/nidaqmx_service.h index 03c2324d1..fa8045f32 100644 --- a/generated/nidaqmx/nidaqmx_service.h +++ b/generated/nidaqmx/nidaqmx_service.h @@ -46,9 +46,21 @@ ::grpc::Status MonikerReadCounterScalarF64(void* data, google::protobuf::Arena& ::grpc::Status MonikerReadCounterScalarU32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData); ::grpc::Status MonikerReadCounterU32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData); ::grpc::Status MonikerReadCounterU32Ex(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData); +::grpc::Status MonikerReadCtrFreq(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData); +::grpc::Status MonikerReadCtrFreqScalar(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData); +::grpc::Status MonikerReadCtrTicks(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData); +::grpc::Status MonikerReadCtrTicksScalar(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData); +::grpc::Status MonikerReadCtrTime(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData); +::grpc::Status MonikerReadCtrTimeScalar(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData); +::grpc::Status MonikerReadDigitalLines(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData); ::grpc::Status MonikerReadDigitalScalarU32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData); ::grpc::Status MonikerReadDigitalU16(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData); ::grpc::Status MonikerReadDigitalU32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData); +::grpc::Status MonikerReadDigitalU8(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData); +::grpc::Status MonikerReadPowerBinaryI16(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData); +::grpc::Status MonikerReadPowerF64(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData); +::grpc::Status MonikerReadPowerScalarF64(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData); +::grpc::Status MonikerReadRaw(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData); ::grpc::Status MonikerWaitForNextSampleClock(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData); ::grpc::Status MonikerWriteAnalogF64(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData); ::grpc::Status MonikerWriteAnalogScalarF64(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData); @@ -341,12 +353,19 @@ class NiDAQmxService final : public NiDAQmx::WithCallbackMethod_RegisterSignalEv ::grpc::Status ReadCounterU32Ex(::grpc::ServerContext* context, const ReadCounterU32ExRequest* request, ReadCounterU32ExResponse* response) override; ::grpc::Status BeginReadCounterU32Ex(::grpc::ServerContext* context, const BeginReadCounterU32ExRequest* request, BeginReadCounterU32ExResponse* response) override; ::grpc::Status ReadCtrFreq(::grpc::ServerContext* context, const ReadCtrFreqRequest* request, ReadCtrFreqResponse* response) override; + ::grpc::Status BeginReadCtrFreq(::grpc::ServerContext* context, const BeginReadCtrFreqRequest* request, BeginReadCtrFreqResponse* response) override; ::grpc::Status ReadCtrFreqScalar(::grpc::ServerContext* context, const ReadCtrFreqScalarRequest* request, ReadCtrFreqScalarResponse* response) override; + ::grpc::Status BeginReadCtrFreqScalar(::grpc::ServerContext* context, const BeginReadCtrFreqScalarRequest* request, BeginReadCtrFreqScalarResponse* response) override; ::grpc::Status ReadCtrTicks(::grpc::ServerContext* context, const ReadCtrTicksRequest* request, ReadCtrTicksResponse* response) override; + ::grpc::Status BeginReadCtrTicks(::grpc::ServerContext* context, const BeginReadCtrTicksRequest* request, BeginReadCtrTicksResponse* response) override; ::grpc::Status ReadCtrTicksScalar(::grpc::ServerContext* context, const ReadCtrTicksScalarRequest* request, ReadCtrTicksScalarResponse* response) override; + ::grpc::Status BeginReadCtrTicksScalar(::grpc::ServerContext* context, const BeginReadCtrTicksScalarRequest* request, BeginReadCtrTicksScalarResponse* response) override; ::grpc::Status ReadCtrTime(::grpc::ServerContext* context, const ReadCtrTimeRequest* request, ReadCtrTimeResponse* response) override; + ::grpc::Status BeginReadCtrTime(::grpc::ServerContext* context, const BeginReadCtrTimeRequest* request, BeginReadCtrTimeResponse* response) override; ::grpc::Status ReadCtrTimeScalar(::grpc::ServerContext* context, const ReadCtrTimeScalarRequest* request, ReadCtrTimeScalarResponse* response) override; + ::grpc::Status BeginReadCtrTimeScalar(::grpc::ServerContext* context, const BeginReadCtrTimeScalarRequest* request, BeginReadCtrTimeScalarResponse* response) override; ::grpc::Status ReadDigitalLines(::grpc::ServerContext* context, const ReadDigitalLinesRequest* request, ReadDigitalLinesResponse* response) override; + ::grpc::Status BeginReadDigitalLines(::grpc::ServerContext* context, const BeginReadDigitalLinesRequest* request, BeginReadDigitalLinesResponse* response) override; ::grpc::Status ReadDigitalScalarU32(::grpc::ServerContext* context, const ReadDigitalScalarU32Request* request, ReadDigitalScalarU32Response* response) override; ::grpc::Status BeginReadDigitalScalarU32(::grpc::ServerContext* context, const BeginReadDigitalScalarU32Request* request, BeginReadDigitalScalarU32Response* response) override; ::grpc::Status ReadDigitalU16(::grpc::ServerContext* context, const ReadDigitalU16Request* request, ReadDigitalU16Response* response) override; @@ -354,10 +373,15 @@ class NiDAQmxService final : public NiDAQmx::WithCallbackMethod_RegisterSignalEv ::grpc::Status ReadDigitalU32(::grpc::ServerContext* context, const ReadDigitalU32Request* request, ReadDigitalU32Response* response) override; ::grpc::Status BeginReadDigitalU32(::grpc::ServerContext* context, const BeginReadDigitalU32Request* request, BeginReadDigitalU32Response* response) override; ::grpc::Status ReadDigitalU8(::grpc::ServerContext* context, const ReadDigitalU8Request* request, ReadDigitalU8Response* response) override; + ::grpc::Status BeginReadDigitalU8(::grpc::ServerContext* context, const BeginReadDigitalU8Request* request, BeginReadDigitalU8Response* response) override; ::grpc::Status ReadPowerBinaryI16(::grpc::ServerContext* context, const ReadPowerBinaryI16Request* request, ReadPowerBinaryI16Response* response) override; + ::grpc::Status BeginReadPowerBinaryI16(::grpc::ServerContext* context, const BeginReadPowerBinaryI16Request* request, BeginReadPowerBinaryI16Response* response) override; ::grpc::Status ReadPowerF64(::grpc::ServerContext* context, const ReadPowerF64Request* request, ReadPowerF64Response* response) override; + ::grpc::Status BeginReadPowerF64(::grpc::ServerContext* context, const BeginReadPowerF64Request* request, BeginReadPowerF64Response* response) override; ::grpc::Status ReadPowerScalarF64(::grpc::ServerContext* context, const ReadPowerScalarF64Request* request, ReadPowerScalarF64Response* response) override; + ::grpc::Status BeginReadPowerScalarF64(::grpc::ServerContext* context, const BeginReadPowerScalarF64Request* request, BeginReadPowerScalarF64Response* response) override; ::grpc::Status ReadRaw(::grpc::ServerContext* context, const ReadRawRequest* request, ReadRawResponse* response) override; + ::grpc::Status BeginReadRaw(::grpc::ServerContext* context, const BeginReadRawRequest* request, BeginReadRawResponse* response) override; ::grpc::ServerWriteReactor* RegisterDoneEvent(::grpc::CallbackServerContext* context, const RegisterDoneEventRequest* request) override; ::grpc::ServerWriteReactor* RegisterEveryNSamplesEvent(::grpc::CallbackServerContext* context, const RegisterEveryNSamplesEventRequest* request) override; ::grpc::ServerWriteReactor* RegisterSignalEvent(::grpc::CallbackServerContext* context, const RegisterSignalEventRequest* request) override; diff --git a/source/codegen/metadata/nidaqmx/functions.py b/source/codegen/metadata/nidaqmx/functions.py index 13867797c..ec89562b3 100644 --- a/source/codegen/metadata/nidaqmx/functions.py +++ b/source/codegen/metadata/nidaqmx/functions.py @@ -17612,9 +17612,10 @@ { 'ctypes_data_type': 'ctypes.c_int', 'direction': 'out', + 'grpc_streaming_type': 'I32Data', 'is_optional_in_python': False, - 'name': 'sampsPerChanRead', 'is_streaming_type': True, + 'name': 'sampsPerChanRead', 'python_data_type': 'int', 'python_description': '', 'python_type_annotation': 'int', @@ -17765,9 +17766,10 @@ { 'ctypes_data_type': 'ctypes.c_int', 'direction': 'out', + 'grpc_streaming_type': 'I32Data', 'is_optional_in_python': False, - 'name': 'sampsPerChanRead', 'is_streaming_type': True, + 'name': 'sampsPerChanRead', 'python_data_type': 'int', 'python_description': '', 'python_type_annotation': 'int', @@ -17864,9 +17866,10 @@ { 'ctypes_data_type': 'ctypes.c_int', 'direction': 'out', + 'grpc_streaming_type': 'I32Data', 'is_optional_in_python': False, - 'name': 'sampsPerChanRead', 'is_streaming_type': True, + 'name': 'sampsPerChanRead', 'python_data_type': 'int', 'python_description': '', 'python_type_annotation': 'int', @@ -17964,9 +17967,10 @@ { 'ctypes_data_type': 'ctypes.c_int', 'direction': 'out', + 'grpc_streaming_type': 'I32Data', 'is_optional_in_python': False, - 'name': 'sampsPerChanRead', 'is_streaming_type': True, + 'name': 'sampsPerChanRead', 'python_data_type': 'int', 'python_description': '', 'python_type_annotation': 'int', @@ -18063,9 +18067,10 @@ { 'ctypes_data_type': 'ctypes.c_int', 'direction': 'out', + 'grpc_streaming_type': 'I32Data', 'is_optional_in_python': False, - 'name': 'sampsPerChanRead', 'is_streaming_type': True, + 'name': 'sampsPerChanRead', 'python_data_type': 'int', 'python_description': '', 'python_type_annotation': 'int', @@ -18151,9 +18156,10 @@ { 'ctypes_data_type': 'ctypes.c_int', 'direction': 'out', + 'grpc_streaming_type': 'I32Data', 'is_optional_in_python': False, - 'name': 'sampsPerChanRead', 'is_streaming_type': True, + 'name': 'sampsPerChanRead', 'python_data_type': 'int', 'python_description': '', 'python_type_annotation': 'int', @@ -18250,9 +18256,10 @@ { 'ctypes_data_type': 'ctypes.c_int', 'direction': 'out', + 'grpc_streaming_type': 'I32Data', 'is_optional_in_python': False, - 'name': 'sampsPerChanRead', 'is_streaming_type': True, + 'name': 'sampsPerChanRead', 'python_data_type': 'int', 'python_description': '', 'python_type_annotation': 'int', @@ -18444,9 +18451,10 @@ { 'ctypes_data_type': 'ctypes.c_int', 'direction': 'out', + 'grpc_streaming_type': 'I32Data', 'is_optional_in_python': False, - 'name': 'sampsPerChanRead', 'is_streaming_type': True, + 'name': 'sampsPerChanRead', 'python_data_type': 'int', 'python_description': '', 'python_type_annotation': 'int', @@ -18543,9 +18551,10 @@ { 'ctypes_data_type': 'ctypes.c_int', 'direction': 'out', + 'grpc_streaming_type': 'I32Data', 'is_optional_in_python': False, - 'name': 'sampsPerChanRead', 'is_streaming_type': True, + 'name': 'sampsPerChanRead', 'python_data_type': 'int', 'python_description': '', 'python_type_annotation': 'int', @@ -18618,8 +18627,10 @@ { 'ctypes_data_type': 'numpy.float64', 'direction': 'out', + 'grpc_streaming_type': 'ArrayDoubleData', 'is_list': True, 'is_optional_in_python': False, + 'is_streaming_type': True, 'name': 'readArrayFrequency', 'python_data_type': 'float', 'python_type_annotation': 'List[float]', @@ -18632,8 +18643,10 @@ { 'ctypes_data_type': 'numpy.float64', 'direction': 'out', + 'grpc_streaming_type': 'ArrayDoubleData', 'is_list': True, 'is_optional_in_python': False, + 'is_streaming_type': True, 'name': 'readArrayDutyCycle', 'python_data_type': 'float', 'python_type_annotation': 'List[float]', @@ -18652,7 +18665,9 @@ { 'ctypes_data_type': 'ctypes.c_int', 'direction': 'out', + 'grpc_streaming_type': 'I32Data', 'is_optional_in_python': False, + 'is_streaming_type': True, 'name': 'sampsPerChanRead', 'python_data_type': 'int', 'python_description': '', @@ -18676,6 +18691,7 @@ ], 'python_codegen_method': 'CustomCode', 'returns': 'int32', + 'supports_streaming': True, 'timeout_error': 'DAQmxErrorSamplesNotYetAvailable' }, 'ReadCtrFreqScalar': { @@ -18704,7 +18720,9 @@ { 'ctypes_data_type': 'ctypes.c_double', 'direction': 'out', + 'grpc_streaming_type': 'DoubleData', 'is_optional_in_python': False, + 'is_streaming_type': True, 'name': 'frequency', 'python_data_type': 'float', 'python_type_annotation': 'float', @@ -18713,7 +18731,9 @@ { 'ctypes_data_type': 'ctypes.c_double', 'direction': 'out', + 'grpc_streaming_type': 'DoubleData', 'is_optional_in_python': False, + 'is_streaming_type': True, 'name': 'dutyCycle', 'python_data_type': 'float', 'python_type_annotation': 'float', @@ -18734,7 +18754,8 @@ } ], 'python_codegen_method': 'CustomCode', - 'returns': 'int32' + 'returns': 'int32', + 'supports_streaming': True }, 'ReadCtrTicks': { 'calling_convention': 'StdCall', @@ -18783,8 +18804,10 @@ { 'ctypes_data_type': 'numpy.uint32', 'direction': 'out', + 'grpc_streaming_type': 'ArrayU32Data', 'is_list': True, 'is_optional_in_python': False, + 'is_streaming_type': True, 'name': 'readArrayHighTicks', 'python_data_type': 'int', 'python_type_annotation': 'List[int]', @@ -18797,8 +18820,10 @@ { 'ctypes_data_type': 'numpy.uint32', 'direction': 'out', + 'grpc_streaming_type': 'ArrayU32Data', 'is_list': True, 'is_optional_in_python': False, + 'is_streaming_type': True, 'name': 'readArrayLowTicks', 'python_data_type': 'int', 'python_type_annotation': 'List[int]', @@ -18817,7 +18842,9 @@ { 'ctypes_data_type': 'ctypes.c_int', 'direction': 'out', + 'grpc_streaming_type': 'I32Data', 'is_optional_in_python': False, + 'is_streaming_type': True, 'name': 'sampsPerChanRead', 'python_data_type': 'int', 'python_description': '', @@ -18841,6 +18868,7 @@ ], 'python_codegen_method': 'CustomCode', 'returns': 'int32', + 'supports_streaming': True, 'timeout_error': 'DAQmxErrorSamplesNotYetAvailable' }, 'ReadCtrTicksScalar': { @@ -18869,6 +18897,8 @@ { 'ctypes_data_type': 'ctypes.c_uint32', 'direction': 'out', + 'grpc_streaming_type': 'U32Data', + 'is_streaming_type': True, 'name': 'highTicks', 'python_data_type': 'int', 'type': 'uInt32' @@ -18876,6 +18906,8 @@ { 'ctypes_data_type': 'ctypes.c_uint32', 'direction': 'out', + 'grpc_streaming_type': 'U32Data', + 'is_streaming_type': True, 'name': 'lowTicks', 'python_data_type': 'int', 'type': 'uInt32' @@ -18895,7 +18927,8 @@ } ], 'python_codegen_method': 'CustomCode', - 'returns': 'int32' + 'returns': 'int32', + 'supports_streaming': True }, 'ReadCtrTime': { 'calling_convention': 'StdCall', @@ -18944,8 +18977,10 @@ { 'ctypes_data_type': 'numpy.float64', 'direction': 'out', + 'grpc_streaming_type': 'ArrayDoubleData', 'is_list': True, 'is_optional_in_python': False, + 'is_streaming_type': True, 'name': 'readArrayHighTime', 'python_data_type': 'float', 'python_type_annotation': 'List[float]', @@ -18958,8 +18993,10 @@ { 'ctypes_data_type': 'numpy.float64', 'direction': 'out', + 'grpc_streaming_type': 'ArrayDoubleData', 'is_list': True, 'is_optional_in_python': False, + 'is_streaming_type': True, 'name': 'readArrayLowTime', 'python_data_type': 'float', 'python_type_annotation': 'List[float]', @@ -18978,7 +19015,9 @@ { 'ctypes_data_type': 'ctypes.c_int', 'direction': 'out', + 'grpc_streaming_type': 'I32Data', 'is_optional_in_python': False, + 'is_streaming_type': True, 'name': 'sampsPerChanRead', 'python_data_type': 'int', 'python_description': '', @@ -19002,6 +19041,7 @@ ], 'python_codegen_method': 'CustomCode', 'returns': 'int32', + 'supports_streaming': True, 'timeout_error': 'DAQmxErrorSamplesNotYetAvailable' }, 'ReadCtrTimeScalar': { @@ -19030,7 +19070,9 @@ { 'ctypes_data_type': 'ctypes.c_double', 'direction': 'out', + 'grpc_streaming_type': 'DoubleData', 'is_optional_in_python': False, + 'is_streaming_type': True, 'name': 'highTime', 'python_data_type': 'float', 'python_type_annotation': 'float', @@ -19039,7 +19081,9 @@ { 'ctypes_data_type': 'ctypes.c_double', 'direction': 'out', + 'grpc_streaming_type': 'DoubleData', 'is_optional_in_python': False, + 'is_streaming_type': True, 'name': 'lowTime', 'python_data_type': 'float', 'python_type_annotation': 'float', @@ -19060,7 +19104,8 @@ } ], 'python_codegen_method': 'CustomCode', - 'returns': 'int32' + 'returns': 'int32', + 'supports_streaming': True }, 'ReadDigitalLines': { 'calling_convention': 'StdCall', @@ -19109,9 +19154,11 @@ { 'ctypes_data_type': 'numpy.bool', 'direction': 'out', + 'grpc_streaming_type': 'ArrayU8Data', 'has_explicit_buffer_size': True, 'is_list': True, 'is_optional_in_python': False, + 'is_streaming_type': True, 'name': 'readArray', 'python_data_type': 'int', 'python_description': '', @@ -19131,7 +19178,9 @@ { 'ctypes_data_type': 'ctypes.c_int', 'direction': 'out', + 'grpc_streaming_type': 'I32Data', 'is_optional_in_python': False, + 'is_streaming_type': True, 'name': 'sampsPerChanRead', 'python_data_type': 'int', 'python_description': '', @@ -19165,6 +19214,7 @@ ], 'python_codegen_method': 'CustomCode', 'returns': 'int32', + 'supports_streaming': True, 'timeout_error': 'DAQmxErrorSamplesNotYetAvailable' }, 'ReadDigitalScalarU32': { @@ -19292,9 +19342,10 @@ { 'ctypes_data_type': 'ctypes.c_int', 'direction': 'out', + 'grpc_streaming_type': 'I32Data', 'is_optional_in_python': False, - 'name': 'sampsPerChanRead', 'is_streaming_type': True, + 'name': 'sampsPerChanRead', 'python_data_type': 'int', 'python_description': '', 'python_type_annotation': 'int', @@ -19391,9 +19442,10 @@ { 'ctypes_data_type': 'ctypes.c_int', 'direction': 'out', + 'grpc_streaming_type': 'I32Data', 'is_optional_in_python': False, - 'name': 'sampsPerChanRead', 'is_streaming_type': True, + 'name': 'sampsPerChanRead', 'python_data_type': 'int', 'python_description': '', 'python_type_annotation': 'int', @@ -19466,9 +19518,11 @@ { 'ctypes_data_type': 'numpy.uint8', 'direction': 'out', + 'grpc_streaming_type': 'ArrayU8Data', 'has_explicit_buffer_size': True, 'is_list': True, 'is_optional_in_python': False, + 'is_streaming_type': True, 'name': 'readArray', 'python_data_type': 'int', 'python_description': '', @@ -19488,7 +19542,9 @@ { 'ctypes_data_type': 'ctypes.c_int', 'direction': 'out', + 'grpc_streaming_type': 'I32Data', 'is_optional_in_python': False, + 'is_streaming_type': True, 'name': 'sampsPerChanRead', 'python_data_type': 'int', 'python_description': '', @@ -19512,6 +19568,7 @@ ], 'python_codegen_method': 'CustomCode', 'returns': 'int32', + 'supports_streaming': True, 'timeout_error': 'DAQmxErrorSamplesNotYetAvailable' }, 'ReadPowerBinaryI16': { @@ -19562,7 +19619,9 @@ 'coerced': True, 'ctypes_data_type': 'numpy.generic', 'direction': 'out', + 'grpc_streaming_type': 'ArrayI16Data', 'is_list': True, + 'is_streaming_type': True, 'name': 'readArrayVoltage', 'python_data_type': 'object', 'size': { @@ -19575,7 +19634,9 @@ 'coerced': True, 'ctypes_data_type': 'numpy.generic', 'direction': 'out', + 'grpc_streaming_type': 'ArrayI16Data', 'is_list': True, + 'is_streaming_type': True, 'name': 'readArrayCurrent', 'python_data_type': 'object', 'size': { @@ -19594,7 +19655,9 @@ { 'ctypes_data_type': 'ctypes.c_int', 'direction': 'out', + 'grpc_streaming_type': 'I32Data', 'is_optional_in_python': False, + 'is_streaming_type': True, 'name': 'sampsPerChanRead', 'python_data_type': 'int', 'python_description': '', @@ -19618,6 +19681,7 @@ ], 'python_codegen_method': 'CustomCode', 'returns': 'int32', + 'supports_streaming': True, 'timeout_error': 'DAQmxErrorSamplesNotYetAvailable' }, 'ReadPowerF64': { @@ -19667,7 +19731,9 @@ { 'ctypes_data_type': 'numpy.float64', 'direction': 'out', + 'grpc_streaming_type': 'ArrayDoubleData', 'is_list': True, + 'is_streaming_type': True, 'name': 'readArrayVoltage', 'python_data_type': 'float', 'size': { @@ -19679,7 +19745,9 @@ { 'ctypes_data_type': 'numpy.float64', 'direction': 'out', + 'grpc_streaming_type': 'ArrayDoubleData', 'is_list': True, + 'is_streaming_type': True, 'name': 'readArrayCurrent', 'python_data_type': 'float', 'size': { @@ -19698,7 +19766,9 @@ { 'ctypes_data_type': 'ctypes.c_int', 'direction': 'out', + 'grpc_streaming_type': 'I32Data', 'is_optional_in_python': False, + 'is_streaming_type': True, 'name': 'sampsPerChanRead', 'python_data_type': 'int', 'python_description': '', @@ -19722,6 +19792,7 @@ ], 'python_codegen_method': 'CustomCode', 'returns': 'int32', + 'supports_streaming': True, 'timeout_error': 'DAQmxErrorSamplesNotYetAvailable' }, 'ReadPowerScalarF64': { @@ -19750,7 +19821,9 @@ { 'ctypes_data_type': 'ctypes.c_double', 'direction': 'out', + 'grpc_streaming_type': 'DoubleData', 'is_optional_in_python': False, + 'is_streaming_type': True, 'name': 'voltage', 'python_data_type': 'float', 'python_description': '', @@ -19760,7 +19833,9 @@ { 'ctypes_data_type': 'ctypes.c_double', 'direction': 'out', + 'grpc_streaming_type': 'DoubleData', 'is_optional_in_python': False, + 'is_streaming_type': True, 'name': 'current', 'python_data_type': 'float', 'python_description': '', @@ -19782,7 +19857,8 @@ } ], 'python_codegen_method': 'CustomCode', - 'returns': 'int32' + 'returns': 'int32', + 'supports_streaming': True }, 'ReadRaw': { 'calling_convention': 'StdCall', @@ -19820,9 +19896,11 @@ { 'ctypes_data_type': 'numpy.generic', 'direction': 'out', + 'grpc_streaming_type': 'ArrayU8Data', 'has_explicit_buffer_size': True, 'is_list': True, 'is_optional_in_python': False, + 'is_streaming_type': True, 'name': 'readArray', 'python_data_type': 'dynamic', 'python_description': '', @@ -19841,7 +19919,9 @@ { 'ctypes_data_type': 'ctypes.c_int', 'direction': 'out', + 'grpc_streaming_type': 'I32Data', 'is_optional_in_python': False, + 'is_streaming_type': True, 'name': 'sampsRead', 'python_data_type': 'int', 'python_description': '', @@ -19852,7 +19932,9 @@ { 'ctypes_data_type': 'ctypes.c_int', 'direction': 'out', + 'grpc_streaming_type': 'I32Data', 'is_optional_in_python': False, + 'is_streaming_type': True, 'name': 'numBytesPerSamp', 'python_data_type': 'int', 'python_description': '', @@ -19875,6 +19957,7 @@ ], 'python_codegen_method': 'no', 'returns': 'int32', + 'supports_streaming': True, 'timeout_error': 'DAQmxErrorSamplesNotYetAvailable' }, 'RegisterDoneEvent': { @@ -24146,9 +24229,10 @@ { 'ctypes_data_type': 'ctypes.c_int', 'direction': 'out', + 'grpc_streaming_type': 'I32Data', 'is_optional_in_python': False, - 'name': 'sampsPerChanWritten', 'is_streaming_type': True, + 'name': 'sampsPerChanWritten', 'python_data_type': 'int', 'python_description': '', 'python_type_annotation': 'int', @@ -24307,9 +24391,10 @@ { 'ctypes_data_type': 'ctypes.c_int', 'direction': 'out', + 'grpc_streaming_type': 'I32Data', 'is_optional_in_python': False, - 'name': 'sampsPerChanWritten', 'is_streaming_type': True, + 'name': 'sampsPerChanWritten', 'python_data_type': 'int', 'python_description': '', 'python_type_annotation': 'int', @@ -24404,9 +24489,10 @@ { 'ctypes_data_type': 'ctypes.c_int', 'direction': 'out', + 'grpc_streaming_type': 'I32Data', 'is_optional_in_python': False, - 'name': 'sampsPerChanWritten', 'is_streaming_type': True, + 'name': 'sampsPerChanWritten', 'python_data_type': 'int', 'python_description': '', 'python_type_annotation': 'int', @@ -24502,9 +24588,10 @@ { 'ctypes_data_type': 'ctypes.c_int', 'direction': 'out', + 'grpc_streaming_type': 'I32Data', 'is_optional_in_python': False, - 'name': 'sampsPerChanWritten', 'is_streaming_type': True, + 'name': 'sampsPerChanWritten', 'python_data_type': 'int', 'python_description': '', 'python_type_annotation': 'int', @@ -24599,9 +24686,10 @@ { 'ctypes_data_type': 'ctypes.c_int', 'direction': 'out', + 'grpc_streaming_type': 'I32Data', 'is_optional_in_python': False, - 'name': 'sampsPerChanWritten', 'is_streaming_type': True, + 'name': 'sampsPerChanWritten', 'python_data_type': 'int', 'python_description': '', 'python_type_annotation': 'int', @@ -25359,9 +25447,10 @@ { 'ctypes_data_type': 'ctypes.c_int', 'direction': 'out', + 'grpc_streaming_type': 'I32Data', 'is_optional_in_python': False, - 'name': 'sampsPerChanWritten', 'is_streaming_type': True, + 'name': 'sampsPerChanWritten', 'python_data_type': 'int', 'python_description': '', 'python_type_annotation': 'int', @@ -25456,9 +25545,10 @@ { 'ctypes_data_type': 'ctypes.c_int', 'direction': 'out', + 'grpc_streaming_type': 'I32Data', 'is_optional_in_python': False, - 'name': 'sampsPerChanWritten', 'is_streaming_type': True, + 'name': 'sampsPerChanWritten', 'python_data_type': 'int', 'python_description': '', 'python_type_annotation': 'int', From 1a15f05f7f19fc274da35bb055eceef436880aee Mon Sep 17 00:00:00 2001 From: Raghav Rawat Date: Mon, 25 Nov 2024 18:04:23 +0530 Subject: [PATCH 13/25] added condition to call reserve and resize functions for some param types --- source/codegen/templates/service_helpers.mako | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/source/codegen/templates/service_helpers.mako b/source/codegen/templates/service_helpers.mako index e4c0cd3d9..662717c30 100644 --- a/source/codegen/templates/service_helpers.mako +++ b/source/codegen/templates/service_helpers.mako @@ -455,8 +455,13 @@ ${set_response_values(output_parameters=output_parameters, init_method=false)}\ grpc_field_name = common_helpers.get_grpc_field_name(param) size_param_name = service_helpers.get_size_param_name(param) %>\ +% if common_helpers.is_string_arg(param): + data->response.mutable_${grpc_field_name}()->reserve(request->${size_param_name}()); + data->response.mutable_${grpc_field_name}()->resize(request->${size_param_name}(), 0); +% else: data->response.mutable_${grpc_field_name}()->Reserve(request->${size_param_name}()); data->response.mutable_${grpc_field_name}()->Resize(request->${size_param_name}(), 0); +% endif % endfor From 54e6850e4398194fb016465e8cc232b8a3c1a1c5 Mon Sep 17 00:00:00 2001 From: Rohan Doshi Date: Tue, 26 Nov 2024 14:04:49 +0530 Subject: [PATCH 14/25] add type hints for python helpers --- source/codegen/common_helpers.py | 20 +++++++++---------- source/codegen/service_helpers.py | 18 +---------------- source/codegen/templates/service_helpers.mako | 3 +-- 3 files changed, 12 insertions(+), 29 deletions(-) diff --git a/source/codegen/common_helpers.py b/source/codegen/common_helpers.py index f3510e890..d63681469 100644 --- a/source/codegen/common_helpers.py +++ b/source/codegen/common_helpers.py @@ -1204,24 +1204,24 @@ def get_params_needing_initialization(parameters: List[dict]) -> List[dict]: return [p for p in parameters if not (is_return_value(p) or is_get_last_error_output_param(p))] -def filter_moniker_streaming_functions(functions, functions_to_generate): +def filter_moniker_streaming_functions(functions: dict, functions_to_generate: List[str]) -> List[str]: """Return streaming functions that need to be generated.""" return [ name for name in functions_to_generate if is_moniker_streaming_function(functions[name]) ] -def is_moniker_streaming_function(function): +def is_moniker_streaming_function(function: dict) -> bool: """Whether this function is for streaming data through moniker.""" return function.get("is_streaming_api", False) -def get_data_moniker_function_name(function_name): +def get_data_moniker_function_name(function_name: str) -> str: """Return the corresponding moniker function name for the given C API function.""" return function_name.replace("Begin", "Moniker") -def get_data_moniker_struct_name(begin_function_name): +def get_data_moniker_struct_name(begin_function_name: str) -> str: """Return the Moniker function name. Input expected is Begin* streaming API name. @@ -1229,7 +1229,7 @@ def get_data_moniker_struct_name(begin_function_name): return f"{begin_function_name.replace('Begin', 'Moniker')}Data" -def get_data_moniker_request_message_type(begin_function_name): +def get_data_moniker_request_message_type(begin_function_name: str) -> str: """Return the request message type for Moniker functions. Input expected is Begin* streaming API name. @@ -1237,7 +1237,7 @@ def get_data_moniker_request_message_type(begin_function_name): return f"{begin_function_name.replace('Begin', '')}StreamingRequest" -def get_data_moniker_response_message_type(begin_function_name): +def get_data_moniker_response_message_type(begin_function_name: str) -> str: """Return the response message type for Moniker functions. Input expected is Begin* streaming API name. @@ -1245,7 +1245,7 @@ def get_data_moniker_response_message_type(begin_function_name): return f"{begin_function_name.replace('Begin', '')}StreamingResponse" -def get_data_moniker_function_parameters(function): +def get_data_moniker_function_parameters(function: dict) -> tuple[List[dict], List[dict]]: """Return moniker function parameters split into input/output. Input expected is equivalent non-streaming function. @@ -1261,12 +1261,12 @@ def get_data_moniker_function_parameters(function): return (input_parameters, output_parameters) -def is_function_in_streaming_functions(function_name, streaming_functions_to_generate): +def is_function_in_streaming_functions(function_name: str, streaming_functions_to_generate: List[str]): """Check if a function name is in the streaming functions to generate.""" return function_name in streaming_functions_to_generate -def _is_streaming_param_input_array(streaming_param): +def _is_streaming_param_input_array(streaming_param: dict) -> bool: """Check if the streaming parameter is an input array.""" return ( streaming_param @@ -1275,7 +1275,7 @@ def _is_streaming_param_input_array(streaming_param): ) -def get_non_streaming_input_parameters(parameters): +def get_non_streaming_input_parameters(parameters: List[dict]) -> List[dict]: """Determine if a parameter should be passed from Begin streaming API to Moniker function.""" streaming_param = get_first_streaming_parameter(parameters) params = [] diff --git a/source/codegen/service_helpers.py b/source/codegen/service_helpers.py index 66aa66251..7ba907666 100644 --- a/source/codegen/service_helpers.py +++ b/source/codegen/service_helpers.py @@ -709,15 +709,7 @@ def get_protobuf_cpplib_type(grpc_type: str) -> str: return grpc_type -def get_streaming_type(parameters) -> str: - """Get the streaming type from the function data.""" - for param in parameters: - if param.get("is_streaming_type", False): - return param["type"] - return None - - -def get_size_param_name(streaming_param) -> str: +def get_size_param_name(streaming_param: dict) -> str: """Get the size parameter name for the given streaming parameter. The size is only present for read arrays, which have an "out" direction. @@ -726,11 +718,3 @@ def get_size_param_name(streaming_param) -> str: return common_helpers.camel_to_snake(streaming_param["size"]["value"]) else: return None - - -def get_c_api_name(function_name) -> str: - """Get the C API name for the given function name.""" - if function_name.startswith("Begin"): - base_name = function_name[len("Begin") :] - return f"{base_name}" - return f"{function_name}" diff --git a/source/codegen/templates/service_helpers.mako b/source/codegen/templates/service_helpers.mako index e4c0cd3d9..ce9c77fdf 100644 --- a/source/codegen/templates/service_helpers.mako +++ b/source/codegen/templates/service_helpers.mako @@ -313,7 +313,6 @@ ${populate_response(function_data=function_data, parameters=parameters)}\ non_streaming_function_name = function_name.replace("Begin", "") non_streaming_function_parameters = functions[non_streaming_function_name]['parameters'] arg_string = service_helpers.create_args(non_streaming_function_parameters) - c_api_name = service_helpers.get_c_api_name(function_name) output_parameters = [p for p in non_streaming_function_parameters if common_helpers.is_output_parameter(p)] %>\ ::grpc::Status ${moniker_function_name}(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) @@ -327,7 +326,7 @@ ${initialize_output_params(output_parameters)}\ ${streaming_handle_in_direction(streaming_param)}\ % endif - auto status = library->${c_api_name}(${arg_string}); + auto status = library->${non_streaming_function_name}(${arg_string}); ${populate_moniker_response_for_out_functions(output_parameters, streaming_param)}\ return ::grpc::Status::OK; From f9c5ce5610d3970c413234c7d1af9c6c419f7481 Mon Sep 17 00:00:00 2001 From: Rohan Doshi Date: Tue, 26 Nov 2024 14:08:23 +0530 Subject: [PATCH 15/25] fix black formatter issues --- source/codegen/common_helpers.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/source/codegen/common_helpers.py b/source/codegen/common_helpers.py index d63681469..7126cd100 100644 --- a/source/codegen/common_helpers.py +++ b/source/codegen/common_helpers.py @@ -1204,7 +1204,9 @@ def get_params_needing_initialization(parameters: List[dict]) -> List[dict]: return [p for p in parameters if not (is_return_value(p) or is_get_last_error_output_param(p))] -def filter_moniker_streaming_functions(functions: dict, functions_to_generate: List[str]) -> List[str]: +def filter_moniker_streaming_functions( + functions: dict, functions_to_generate: List[str] +) -> List[str]: """Return streaming functions that need to be generated.""" return [ name for name in functions_to_generate if is_moniker_streaming_function(functions[name]) @@ -1261,7 +1263,9 @@ def get_data_moniker_function_parameters(function: dict) -> tuple[List[dict], Li return (input_parameters, output_parameters) -def is_function_in_streaming_functions(function_name: str, streaming_functions_to_generate: List[str]): +def is_function_in_streaming_functions( + function_name: str, streaming_functions_to_generate: List[str] +): """Check if a function name is in the streaming functions to generate.""" return function_name in streaming_functions_to_generate From 314eb0e0ec85f7cbd17bb93882d9e648c997f15e Mon Sep 17 00:00:00 2001 From: Rohan Doshi Date: Tue, 26 Nov 2024 14:49:27 +0530 Subject: [PATCH 16/25] return error status from Write* moniker functions --- generated/nidaqmx/nidaqmx_service.cpp | 36 ++++++++ generated/nifpga/nifpga_service.cpp | 88 +++++++++++++++++++ source/codegen/templates/service_helpers.mako | 5 ++ 3 files changed, 129 insertions(+) diff --git a/generated/nidaqmx/nidaqmx_service.cpp b/generated/nidaqmx/nidaqmx_service.cpp index 5c9eda6c6..fc96c1d36 100644 --- a/generated/nidaqmx/nidaqmx_service.cpp +++ b/generated/nidaqmx/nidaqmx_service.cpp @@ -862,6 +862,10 @@ ::grpc::Status MonikerWriteAnalogF64(void* data, google::protobuf::Arena& arena, auto status = library->WriteAnalogF64(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array, &samps_per_chan_written, reserved); + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } return ::grpc::Status::OK; } @@ -881,6 +885,10 @@ ::grpc::Status MonikerWriteAnalogScalarF64(void* data, google::protobuf::Arena& auto status = library->WriteAnalogScalarF64(task, auto_start, timeout, value, reserved); + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } return ::grpc::Status::OK; } @@ -918,6 +926,10 @@ ::grpc::Status MonikerWriteBinaryI16(void* data, google::protobuf::Arena& arena, auto status = library->WriteBinaryI16(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array.data(), &samps_per_chan_written, reserved); + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } return ::grpc::Status::OK; } @@ -943,6 +955,10 @@ ::grpc::Status MonikerWriteBinaryI32(void* data, google::protobuf::Arena& arena, auto status = library->WriteBinaryI32(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array, &samps_per_chan_written, reserved); + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } return ::grpc::Status::OK; } @@ -980,6 +996,10 @@ ::grpc::Status MonikerWriteBinaryU16(void* data, google::protobuf::Arena& arena, auto status = library->WriteBinaryU16(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array.data(), &samps_per_chan_written, reserved); + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } return ::grpc::Status::OK; } @@ -1005,6 +1025,10 @@ ::grpc::Status MonikerWriteBinaryU32(void* data, google::protobuf::Arena& arena, auto status = library->WriteBinaryU32(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array, &samps_per_chan_written, reserved); + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } return ::grpc::Status::OK; } @@ -1024,6 +1048,10 @@ ::grpc::Status MonikerWriteDigitalScalarU32(void* data, google::protobuf::Arena& auto status = library->WriteDigitalScalarU32(task, auto_start, timeout, value, reserved); + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } return ::grpc::Status::OK; } @@ -1061,6 +1089,10 @@ ::grpc::Status MonikerWriteDigitalU16(void* data, google::protobuf::Arena& arena auto status = library->WriteDigitalU16(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array.data(), &samps_per_chan_written, reserved); + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } return ::grpc::Status::OK; } @@ -1086,6 +1118,10 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena auto status = library->WriteDigitalU32(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array, &samps_per_chan_written, reserved); + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } return ::grpc::Status::OK; } diff --git a/generated/nifpga/nifpga_service.cpp b/generated/nifpga/nifpga_service.cpp index d2bac0d0b..78671d3cc 100644 --- a/generated/nifpga/nifpga_service.cpp +++ b/generated/nifpga/nifpga_service.cpp @@ -1063,6 +1063,10 @@ ::grpc::Status MonikerWriteArrayBool(void* data, google::protobuf::Arena& arena, auto status = library->WriteArrayBool(session, control, array.data(), size); + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } return ::grpc::Status::OK; } @@ -1083,6 +1087,10 @@ ::grpc::Status MonikerWriteArrayDbl(void* data, google::protobuf::Arena& arena, auto status = library->WriteArrayDbl(session, control, array, size); + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } return ::grpc::Status::OK; } @@ -1115,6 +1123,10 @@ ::grpc::Status MonikerWriteArrayI16(void* data, google::protobuf::Arena& arena, auto status = library->WriteArrayI16(session, control, array.data(), size); + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } return ::grpc::Status::OK; } @@ -1135,6 +1147,10 @@ ::grpc::Status MonikerWriteArrayI32(void* data, google::protobuf::Arena& arena, auto status = library->WriteArrayI32(session, control, array, size); + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } return ::grpc::Status::OK; } @@ -1155,6 +1171,10 @@ ::grpc::Status MonikerWriteArrayI64(void* data, google::protobuf::Arena& arena, auto status = library->WriteArrayI64(session, control, array, size); + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } return ::grpc::Status::OK; } @@ -1187,6 +1207,10 @@ ::grpc::Status MonikerWriteArrayI8(void* data, google::protobuf::Arena& arena, g auto status = library->WriteArrayI8(session, control, array.data(), size); + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } return ::grpc::Status::OK; } @@ -1207,6 +1231,10 @@ ::grpc::Status MonikerWriteArraySgl(void* data, google::protobuf::Arena& arena, auto status = library->WriteArraySgl(session, control, array, size); + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } return ::grpc::Status::OK; } @@ -1239,6 +1267,10 @@ ::grpc::Status MonikerWriteArrayU16(void* data, google::protobuf::Arena& arena, auto status = library->WriteArrayU16(session, control, array.data(), size); + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } return ::grpc::Status::OK; } @@ -1259,6 +1291,10 @@ ::grpc::Status MonikerWriteArrayU32(void* data, google::protobuf::Arena& arena, auto status = library->WriteArrayU32(session, control, array, size); + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } return ::grpc::Status::OK; } @@ -1279,6 +1315,10 @@ ::grpc::Status MonikerWriteArrayU64(void* data, google::protobuf::Arena& arena, auto status = library->WriteArrayU64(session, control, array, size); + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } return ::grpc::Status::OK; } @@ -1311,6 +1351,10 @@ ::grpc::Status MonikerWriteArrayU8(void* data, google::protobuf::Arena& arena, g auto status = library->WriteArrayU8(session, control, array.data(), size); + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } return ::grpc::Status::OK; } @@ -1328,6 +1372,10 @@ ::grpc::Status MonikerWriteBool(void* data, google::protobuf::Arena& arena, goog auto status = library->WriteBool(session, control, value); + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } return ::grpc::Status::OK; } @@ -1345,6 +1393,10 @@ ::grpc::Status MonikerWriteDbl(void* data, google::protobuf::Arena& arena, googl auto status = library->WriteDbl(session, control, value); + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } return ::grpc::Status::OK; } @@ -1366,6 +1418,10 @@ ::grpc::Status MonikerWriteI16(void* data, google::protobuf::Arena& arena, googl auto status = library->WriteI16(session, control, value); + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } return ::grpc::Status::OK; } @@ -1383,6 +1439,10 @@ ::grpc::Status MonikerWriteI32(void* data, google::protobuf::Arena& arena, googl auto status = library->WriteI32(session, control, value); + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } return ::grpc::Status::OK; } @@ -1400,6 +1460,10 @@ ::grpc::Status MonikerWriteI64(void* data, google::protobuf::Arena& arena, googl auto status = library->WriteI64(session, control, value); + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } return ::grpc::Status::OK; } @@ -1421,6 +1485,10 @@ ::grpc::Status MonikerWriteI8(void* data, google::protobuf::Arena& arena, google auto status = library->WriteI8(session, control, value); + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } return ::grpc::Status::OK; } @@ -1438,6 +1506,10 @@ ::grpc::Status MonikerWriteSgl(void* data, google::protobuf::Arena& arena, googl auto status = library->WriteSgl(session, control, value); + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } return ::grpc::Status::OK; } @@ -1459,6 +1531,10 @@ ::grpc::Status MonikerWriteU16(void* data, google::protobuf::Arena& arena, googl auto status = library->WriteU16(session, control, value); + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } return ::grpc::Status::OK; } @@ -1476,6 +1552,10 @@ ::grpc::Status MonikerWriteU32(void* data, google::protobuf::Arena& arena, googl auto status = library->WriteU32(session, control, value); + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } return ::grpc::Status::OK; } @@ -1493,6 +1573,10 @@ ::grpc::Status MonikerWriteU64(void* data, google::protobuf::Arena& arena, googl auto status = library->WriteU64(session, control, value); + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } return ::grpc::Status::OK; } @@ -1514,6 +1598,10 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google auto status = library->WriteU8(session, control, value); + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } return ::grpc::Status::OK; } diff --git a/source/codegen/templates/service_helpers.mako b/source/codegen/templates/service_helpers.mako index ce9c77fdf..666f52e88 100644 --- a/source/codegen/templates/service_helpers.mako +++ b/source/codegen/templates/service_helpers.mako @@ -431,6 +431,11 @@ ${set_response_values(output_parameters=output_parameters, init_method=false)}\ ## But that needs `context` parameter which is not available in Moniker functions. return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } +% else: + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } % endif From e7b2305c8af4211c109dad256715965bf243da7a Mon Sep 17 00:00:00 2001 From: Rohan Doshi Date: Tue, 26 Nov 2024 15:07:19 +0530 Subject: [PATCH 17/25] fix type hints --- source/codegen/common_helpers.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/codegen/common_helpers.py b/source/codegen/common_helpers.py index 7126cd100..fdb42bb64 100644 --- a/source/codegen/common_helpers.py +++ b/source/codegen/common_helpers.py @@ -3,7 +3,7 @@ import os import re from collections import defaultdict, namedtuple -from typing import Any, Dict, List, NamedTuple, Optional +from typing import Any, Dict, List, NamedTuple, Optional, Tuple _NIDEVICE_COMMON_MESSAGE_TYPES = ( "nidevice_grpc.NIComplexNumber", @@ -1247,7 +1247,7 @@ def get_data_moniker_response_message_type(begin_function_name: str) -> str: return f"{begin_function_name.replace('Begin', '')}StreamingResponse" -def get_data_moniker_function_parameters(function: dict) -> tuple[List[dict], List[dict]]: +def get_data_moniker_function_parameters(function: dict) -> Tuple[List[dict], List[dict]]: """Return moniker function parameters split into input/output. Input expected is equivalent non-streaming function. From 5f8b1c2999f905d6071b1f463039534e6f99203b Mon Sep 17 00:00:00 2001 From: Raghav Rawat Date: Tue, 26 Nov 2024 18:00:28 +0530 Subject: [PATCH 18/25] codegen for write apis with multiple out params --- generated/nidaqmx/nidaqmx.proto | 219 ++++ generated/nidaqmx/nidaqmx_client.cpp | 217 ++++ generated/nidaqmx/nidaqmx_client.h | 9 + generated/nidaqmx/nidaqmx_service.cpp | 1126 ++++++++++++++--- generated/nidaqmx/nidaqmx_service.h | 18 + generated/nifpga/nifpga_service.cpp | 344 ++--- source/codegen/common_helpers.py | 8 + source/codegen/metadata/nidaqmx/functions.py | 67 +- source/codegen/service_helpers.py | 11 - source/codegen/templates/service_helpers.mako | 76 +- 10 files changed, 1647 insertions(+), 448 deletions(-) diff --git a/generated/nidaqmx/nidaqmx.proto b/generated/nidaqmx/nidaqmx.proto index 75d0eed40..9d7d3d4ff 100644 --- a/generated/nidaqmx/nidaqmx.proto +++ b/generated/nidaqmx/nidaqmx.proto @@ -438,12 +438,19 @@ service NiDAQmx { rpc WriteBinaryU32(WriteBinaryU32Request) returns (WriteBinaryU32Response); rpc BeginWriteBinaryU32(BeginWriteBinaryU32Request) returns (BeginWriteBinaryU32Response); rpc WriteCtrFreq(WriteCtrFreqRequest) returns (WriteCtrFreqResponse); + rpc BeginWriteCtrFreq(BeginWriteCtrFreqRequest) returns (BeginWriteCtrFreqResponse); rpc WriteCtrFreqScalar(WriteCtrFreqScalarRequest) returns (WriteCtrFreqScalarResponse); + rpc BeginWriteCtrFreqScalar(BeginWriteCtrFreqScalarRequest) returns (BeginWriteCtrFreqScalarResponse); rpc WriteCtrTicks(WriteCtrTicksRequest) returns (WriteCtrTicksResponse); + rpc BeginWriteCtrTicks(BeginWriteCtrTicksRequest) returns (BeginWriteCtrTicksResponse); rpc WriteCtrTicksScalar(WriteCtrTicksScalarRequest) returns (WriteCtrTicksScalarResponse); + rpc BeginWriteCtrTicksScalar(BeginWriteCtrTicksScalarRequest) returns (BeginWriteCtrTicksScalarResponse); rpc WriteCtrTime(WriteCtrTimeRequest) returns (WriteCtrTimeResponse); + rpc BeginWriteCtrTime(BeginWriteCtrTimeRequest) returns (BeginWriteCtrTimeResponse); rpc WriteCtrTimeScalar(WriteCtrTimeScalarRequest) returns (WriteCtrTimeScalarResponse); + rpc BeginWriteCtrTimeScalar(BeginWriteCtrTimeScalarRequest) returns (BeginWriteCtrTimeScalarResponse); rpc WriteDigitalLines(WriteDigitalLinesRequest) returns (WriteDigitalLinesResponse); + rpc BeginWriteDigitalLines(BeginWriteDigitalLinesRequest) returns (BeginWriteDigitalLinesResponse); rpc WriteDigitalScalarU32(WriteDigitalScalarU32Request) returns (WriteDigitalScalarU32Response); rpc BeginWriteDigitalScalarU32(BeginWriteDigitalScalarU32Request) returns (BeginWriteDigitalScalarU32Response); rpc WriteDigitalU16(WriteDigitalU16Request) returns (WriteDigitalU16Response); @@ -451,7 +458,9 @@ service NiDAQmx { rpc WriteDigitalU32(WriteDigitalU32Request) returns (WriteDigitalU32Response); rpc BeginWriteDigitalU32(BeginWriteDigitalU32Request) returns (BeginWriteDigitalU32Response); rpc WriteDigitalU8(WriteDigitalU8Request) returns (WriteDigitalU8Response); + rpc BeginWriteDigitalU8(BeginWriteDigitalU8Request) returns (BeginWriteDigitalU8Response); rpc WriteRaw(WriteRawRequest) returns (WriteRawResponse); + rpc BeginWriteRaw(BeginWriteRawRequest) returns (BeginWriteRawResponse); rpc WriteToTEDSFromArray(WriteToTEDSFromArrayRequest) returns (WriteToTEDSFromArrayResponse); rpc WriteToTEDSFromFile(WriteToTEDSFromFileRequest) returns (WriteToTEDSFromFileResponse); } @@ -11033,6 +11042,32 @@ message WriteCtrFreqResponse { int32 num_samps_per_chan_written = 2; } +message BeginWriteCtrFreqRequest { + nidevice_grpc.Session task = 1; + int32 num_samps_per_chan = 2; + bool auto_start = 3; + double timeout = 4; + oneof data_layout_enum { + GroupBy data_layout = 5; + int32 data_layout_raw = 6; + } +} + +message BeginWriteCtrFreqResponse { + int32 status = 1; + ni.data_monikers.Moniker moniker = 2; +} + +message WriteCtrFreqStreamingRequest { + repeated double frequency = 1; + repeated double duty_cycle = 2; +} + +message WriteCtrFreqStreamingResponse { + int32 status = 1; + int32 num_samps_per_chan_written = 2; +} + message WriteCtrFreqScalarRequest { nidevice_grpc.Session task = 1; bool auto_start = 2; @@ -11045,6 +11080,26 @@ message WriteCtrFreqScalarResponse { int32 status = 1; } +message BeginWriteCtrFreqScalarRequest { + nidevice_grpc.Session task = 1; + bool auto_start = 2; + double timeout = 3; +} + +message BeginWriteCtrFreqScalarResponse { + int32 status = 1; + ni.data_monikers.Moniker moniker = 2; +} + +message WriteCtrFreqScalarStreamingRequest { + double frequency = 1; + double duty_cycle = 2; +} + +message WriteCtrFreqScalarStreamingResponse { + int32 status = 1; +} + message WriteCtrTicksRequest { nidevice_grpc.Session task = 1; int32 num_samps_per_chan = 2; @@ -11063,6 +11118,32 @@ message WriteCtrTicksResponse { int32 num_samps_per_chan_written = 2; } +message BeginWriteCtrTicksRequest { + nidevice_grpc.Session task = 1; + int32 num_samps_per_chan = 2; + bool auto_start = 3; + double timeout = 4; + oneof data_layout_enum { + GroupBy data_layout = 5; + int32 data_layout_raw = 6; + } +} + +message BeginWriteCtrTicksResponse { + int32 status = 1; + ni.data_monikers.Moniker moniker = 2; +} + +message WriteCtrTicksStreamingRequest { + repeated uint32 high_ticks = 1; + repeated uint32 low_ticks = 2; +} + +message WriteCtrTicksStreamingResponse { + int32 status = 1; + int32 num_samps_per_chan_written = 2; +} + message WriteCtrTicksScalarRequest { nidevice_grpc.Session task = 1; bool auto_start = 2; @@ -11075,6 +11156,26 @@ message WriteCtrTicksScalarResponse { int32 status = 1; } +message BeginWriteCtrTicksScalarRequest { + nidevice_grpc.Session task = 1; + bool auto_start = 2; + double timeout = 3; +} + +message BeginWriteCtrTicksScalarResponse { + int32 status = 1; + ni.data_monikers.Moniker moniker = 2; +} + +message WriteCtrTicksScalarStreamingRequest { + uint32 high_ticks = 1; + uint32 low_ticks = 2; +} + +message WriteCtrTicksScalarStreamingResponse { + int32 status = 1; +} + message WriteCtrTimeRequest { nidevice_grpc.Session task = 1; int32 num_samps_per_chan = 2; @@ -11093,6 +11194,32 @@ message WriteCtrTimeResponse { int32 num_samps_per_chan_written = 2; } +message BeginWriteCtrTimeRequest { + nidevice_grpc.Session task = 1; + int32 num_samps_per_chan = 2; + bool auto_start = 3; + double timeout = 4; + oneof data_layout_enum { + GroupBy data_layout = 5; + int32 data_layout_raw = 6; + } +} + +message BeginWriteCtrTimeResponse { + int32 status = 1; + ni.data_monikers.Moniker moniker = 2; +} + +message WriteCtrTimeStreamingRequest { + repeated double high_time = 1; + repeated double low_time = 2; +} + +message WriteCtrTimeStreamingResponse { + int32 status = 1; + int32 num_samps_per_chan_written = 2; +} + message WriteCtrTimeScalarRequest { nidevice_grpc.Session task = 1; bool auto_start = 2; @@ -11105,6 +11232,26 @@ message WriteCtrTimeScalarResponse { int32 status = 1; } +message BeginWriteCtrTimeScalarRequest { + nidevice_grpc.Session task = 1; + bool auto_start = 2; + double timeout = 3; +} + +message BeginWriteCtrTimeScalarResponse { + int32 status = 1; + ni.data_monikers.Moniker moniker = 2; +} + +message WriteCtrTimeScalarStreamingRequest { + double high_time = 1; + double low_time = 2; +} + +message WriteCtrTimeScalarStreamingResponse { + int32 status = 1; +} + message WriteDigitalLinesRequest { nidevice_grpc.Session task = 1; int32 num_samps_per_chan = 2; @@ -11122,6 +11269,31 @@ message WriteDigitalLinesResponse { int32 samps_per_chan_written = 2; } +message BeginWriteDigitalLinesRequest { + nidevice_grpc.Session task = 1; + int32 num_samps_per_chan = 2; + bool auto_start = 3; + double timeout = 4; + oneof data_layout_enum { + GroupBy data_layout = 5; + int32 data_layout_raw = 6; + } +} + +message BeginWriteDigitalLinesResponse { + int32 status = 1; + ni.data_monikers.Moniker moniker = 2; +} + +message WriteDigitalLinesStreamingRequest { + bytes write_array = 1; +} + +message WriteDigitalLinesStreamingResponse { + int32 status = 1; + int32 samps_per_chan_written = 2; +} + message WriteDigitalScalarU32Request { nidevice_grpc.Session task = 1; bool auto_start = 2; @@ -11253,6 +11425,31 @@ message WriteDigitalU8Response { int32 samps_per_chan_written = 2; } +message BeginWriteDigitalU8Request { + nidevice_grpc.Session task = 1; + int32 num_samps_per_chan = 2; + bool auto_start = 3; + double timeout = 4; + oneof data_layout_enum { + GroupBy data_layout = 5; + int32 data_layout_raw = 6; + } +} + +message BeginWriteDigitalU8Response { + int32 status = 1; + ni.data_monikers.Moniker moniker = 2; +} + +message WriteDigitalU8StreamingRequest { + bytes write_array = 1; +} + +message WriteDigitalU8StreamingResponse { + int32 status = 1; + int32 samps_per_chan_written = 2; +} + message WriteRawRequest { nidevice_grpc.Session task = 1; int32 num_samps = 2; @@ -11266,6 +11463,28 @@ message WriteRawResponse { int32 samps_per_chan_written = 2; } +message BeginWriteRawRequest { + nidevice_grpc.Session task = 1; + int32 num_samps = 2; + bool auto_start = 3; + double timeout = 4; +} + +message BeginWriteRawResponse { + int32 status = 1; + int32 samps_per_chan_written = 2; + ni.data_monikers.Moniker moniker = 3; +} + +message WriteRawStreamingRequest { + bytes write_array = 1; +} + +message WriteRawStreamingResponse { + int32 status = 1; + int32 samps_per_chan_written = 2; +} + message WriteToTEDSFromArrayRequest { string physical_channel = 1; bytes bit_stream = 2; diff --git a/generated/nidaqmx/nidaqmx_client.cpp b/generated/nidaqmx/nidaqmx_client.cpp index ac5dd5f34..f7e4f9956 100644 --- a/generated/nidaqmx/nidaqmx_client.cpp +++ b/generated/nidaqmx/nidaqmx_client.cpp @@ -11751,6 +11751,34 @@ write_ctr_freq(const StubPtr& stub, const nidevice_grpc::Session& task, const pb return response; } +BeginWriteCtrFreqResponse +begin_write_ctr_freq(const StubPtr& stub, const nidevice_grpc::Session& task, const pb::int32& num_samps_per_chan, const bool& auto_start, const double& timeout, const simple_variant& data_layout) +{ + ::grpc::ClientContext context; + + auto request = BeginWriteCtrFreqRequest{}; + request.mutable_task()->CopyFrom(task); + request.set_num_samps_per_chan(num_samps_per_chan); + request.set_auto_start(auto_start); + request.set_timeout(timeout); + const auto data_layout_ptr = data_layout.get_if(); + const auto data_layout_raw_ptr = data_layout.get_if(); + if (data_layout_ptr) { + request.set_data_layout(*data_layout_ptr); + } + else if (data_layout_raw_ptr) { + request.set_data_layout_raw(*data_layout_raw_ptr); + } + + auto response = BeginWriteCtrFreqResponse{}; + + raise_if_error( + stub->BeginWriteCtrFreq(&context, request, &response), + context); + + return response; +} + WriteCtrFreqScalarResponse write_ctr_freq_scalar(const StubPtr& stub, const nidevice_grpc::Session& task, const bool& auto_start, const double& timeout, const double& frequency, const double& duty_cycle) { @@ -11772,6 +11800,25 @@ write_ctr_freq_scalar(const StubPtr& stub, const nidevice_grpc::Session& task, c return response; } +BeginWriteCtrFreqScalarResponse +begin_write_ctr_freq_scalar(const StubPtr& stub, const nidevice_grpc::Session& task, const bool& auto_start, const double& timeout) +{ + ::grpc::ClientContext context; + + auto request = BeginWriteCtrFreqScalarRequest{}; + request.mutable_task()->CopyFrom(task); + request.set_auto_start(auto_start); + request.set_timeout(timeout); + + auto response = BeginWriteCtrFreqScalarResponse{}; + + raise_if_error( + stub->BeginWriteCtrFreqScalar(&context, request, &response), + context); + + return response; +} + WriteCtrTicksResponse write_ctr_ticks(const StubPtr& stub, const nidevice_grpc::Session& task, const pb::int32& num_samps_per_chan, const bool& auto_start, const double& timeout, const simple_variant& data_layout, const std::vector& high_ticks, const std::vector& low_ticks) { @@ -11802,6 +11849,34 @@ write_ctr_ticks(const StubPtr& stub, const nidevice_grpc::Session& task, const p return response; } +BeginWriteCtrTicksResponse +begin_write_ctr_ticks(const StubPtr& stub, const nidevice_grpc::Session& task, const pb::int32& num_samps_per_chan, const bool& auto_start, const double& timeout, const simple_variant& data_layout) +{ + ::grpc::ClientContext context; + + auto request = BeginWriteCtrTicksRequest{}; + request.mutable_task()->CopyFrom(task); + request.set_num_samps_per_chan(num_samps_per_chan); + request.set_auto_start(auto_start); + request.set_timeout(timeout); + const auto data_layout_ptr = data_layout.get_if(); + const auto data_layout_raw_ptr = data_layout.get_if(); + if (data_layout_ptr) { + request.set_data_layout(*data_layout_ptr); + } + else if (data_layout_raw_ptr) { + request.set_data_layout_raw(*data_layout_raw_ptr); + } + + auto response = BeginWriteCtrTicksResponse{}; + + raise_if_error( + stub->BeginWriteCtrTicks(&context, request, &response), + context); + + return response; +} + WriteCtrTicksScalarResponse write_ctr_ticks_scalar(const StubPtr& stub, const nidevice_grpc::Session& task, const bool& auto_start, const double& timeout, const pb::uint32& high_ticks, const pb::uint32& low_ticks) { @@ -11823,6 +11898,25 @@ write_ctr_ticks_scalar(const StubPtr& stub, const nidevice_grpc::Session& task, return response; } +BeginWriteCtrTicksScalarResponse +begin_write_ctr_ticks_scalar(const StubPtr& stub, const nidevice_grpc::Session& task, const bool& auto_start, const double& timeout) +{ + ::grpc::ClientContext context; + + auto request = BeginWriteCtrTicksScalarRequest{}; + request.mutable_task()->CopyFrom(task); + request.set_auto_start(auto_start); + request.set_timeout(timeout); + + auto response = BeginWriteCtrTicksScalarResponse{}; + + raise_if_error( + stub->BeginWriteCtrTicksScalar(&context, request, &response), + context); + + return response; +} + WriteCtrTimeResponse write_ctr_time(const StubPtr& stub, const nidevice_grpc::Session& task, const pb::int32& num_samps_per_chan, const bool& auto_start, const double& timeout, const simple_variant& data_layout, const std::vector& high_time, const std::vector& low_time) { @@ -11853,6 +11947,34 @@ write_ctr_time(const StubPtr& stub, const nidevice_grpc::Session& task, const pb return response; } +BeginWriteCtrTimeResponse +begin_write_ctr_time(const StubPtr& stub, const nidevice_grpc::Session& task, const pb::int32& num_samps_per_chan, const bool& auto_start, const double& timeout, const simple_variant& data_layout) +{ + ::grpc::ClientContext context; + + auto request = BeginWriteCtrTimeRequest{}; + request.mutable_task()->CopyFrom(task); + request.set_num_samps_per_chan(num_samps_per_chan); + request.set_auto_start(auto_start); + request.set_timeout(timeout); + const auto data_layout_ptr = data_layout.get_if(); + const auto data_layout_raw_ptr = data_layout.get_if(); + if (data_layout_ptr) { + request.set_data_layout(*data_layout_ptr); + } + else if (data_layout_raw_ptr) { + request.set_data_layout_raw(*data_layout_raw_ptr); + } + + auto response = BeginWriteCtrTimeResponse{}; + + raise_if_error( + stub->BeginWriteCtrTime(&context, request, &response), + context); + + return response; +} + WriteCtrTimeScalarResponse write_ctr_time_scalar(const StubPtr& stub, const nidevice_grpc::Session& task, const bool& auto_start, const double& timeout, const double& high_time, const double& low_time) { @@ -11874,6 +11996,25 @@ write_ctr_time_scalar(const StubPtr& stub, const nidevice_grpc::Session& task, c return response; } +BeginWriteCtrTimeScalarResponse +begin_write_ctr_time_scalar(const StubPtr& stub, const nidevice_grpc::Session& task, const bool& auto_start, const double& timeout) +{ + ::grpc::ClientContext context; + + auto request = BeginWriteCtrTimeScalarRequest{}; + request.mutable_task()->CopyFrom(task); + request.set_auto_start(auto_start); + request.set_timeout(timeout); + + auto response = BeginWriteCtrTimeScalarResponse{}; + + raise_if_error( + stub->BeginWriteCtrTimeScalar(&context, request, &response), + context); + + return response; +} + WriteDigitalLinesResponse write_digital_lines(const StubPtr& stub, const nidevice_grpc::Session& task, const pb::int32& num_samps_per_chan, const bool& auto_start, const double& timeout, const simple_variant& data_layout, const std::string& write_array) { @@ -11903,6 +12044,34 @@ write_digital_lines(const StubPtr& stub, const nidevice_grpc::Session& task, con return response; } +BeginWriteDigitalLinesResponse +begin_write_digital_lines(const StubPtr& stub, const nidevice_grpc::Session& task, const pb::int32& num_samps_per_chan, const bool& auto_start, const double& timeout, const simple_variant& data_layout) +{ + ::grpc::ClientContext context; + + auto request = BeginWriteDigitalLinesRequest{}; + request.mutable_task()->CopyFrom(task); + request.set_num_samps_per_chan(num_samps_per_chan); + request.set_auto_start(auto_start); + request.set_timeout(timeout); + const auto data_layout_ptr = data_layout.get_if(); + const auto data_layout_raw_ptr = data_layout.get_if(); + if (data_layout_ptr) { + request.set_data_layout(*data_layout_ptr); + } + else if (data_layout_raw_ptr) { + request.set_data_layout_raw(*data_layout_raw_ptr); + } + + auto response = BeginWriteDigitalLinesResponse{}; + + raise_if_error( + stub->BeginWriteDigitalLines(&context, request, &response), + context); + + return response; +} + WriteDigitalScalarU32Response write_digital_scalar_u32(const StubPtr& stub, const nidevice_grpc::Session& task, const bool& auto_start, const double& timeout, const pb::uint32& value) { @@ -12085,6 +12254,34 @@ write_digital_u8(const StubPtr& stub, const nidevice_grpc::Session& task, const return response; } +BeginWriteDigitalU8Response +begin_write_digital_u8(const StubPtr& stub, const nidevice_grpc::Session& task, const pb::int32& num_samps_per_chan, const bool& auto_start, const double& timeout, const simple_variant& data_layout) +{ + ::grpc::ClientContext context; + + auto request = BeginWriteDigitalU8Request{}; + request.mutable_task()->CopyFrom(task); + request.set_num_samps_per_chan(num_samps_per_chan); + request.set_auto_start(auto_start); + request.set_timeout(timeout); + const auto data_layout_ptr = data_layout.get_if(); + const auto data_layout_raw_ptr = data_layout.get_if(); + if (data_layout_ptr) { + request.set_data_layout(*data_layout_ptr); + } + else if (data_layout_raw_ptr) { + request.set_data_layout_raw(*data_layout_raw_ptr); + } + + auto response = BeginWriteDigitalU8Response{}; + + raise_if_error( + stub->BeginWriteDigitalU8(&context, request, &response), + context); + + return response; +} + WriteRawResponse write_raw(const StubPtr& stub, const nidevice_grpc::Session& task, const pb::int32& num_samps, const bool& auto_start, const double& timeout, const std::string& write_array) { @@ -12106,6 +12303,26 @@ write_raw(const StubPtr& stub, const nidevice_grpc::Session& task, const pb::int return response; } +BeginWriteRawResponse +begin_write_raw(const StubPtr& stub, const nidevice_grpc::Session& task, const pb::int32& num_samps, const bool& auto_start, const double& timeout) +{ + ::grpc::ClientContext context; + + auto request = BeginWriteRawRequest{}; + request.mutable_task()->CopyFrom(task); + request.set_num_samps(num_samps); + request.set_auto_start(auto_start); + request.set_timeout(timeout); + + auto response = BeginWriteRawResponse{}; + + raise_if_error( + stub->BeginWriteRaw(&context, request, &response), + context); + + return response; +} + WriteToTEDSFromArrayResponse write_to_teds_from_array(const StubPtr& stub, const std::string& physical_channel, const std::string& bit_stream, const simple_variant& basic_teds_options) { diff --git a/generated/nidaqmx/nidaqmx_client.h b/generated/nidaqmx/nidaqmx_client.h index ee3164265..0c7022af0 100644 --- a/generated/nidaqmx/nidaqmx_client.h +++ b/generated/nidaqmx/nidaqmx_client.h @@ -441,12 +441,19 @@ BeginWriteBinaryU16Response begin_write_binary_u16(const StubPtr& stub, const ni WriteBinaryU32Response write_binary_u32(const StubPtr& stub, const nidevice_grpc::Session& task, const pb::int32& num_samps_per_chan, const bool& auto_start, const double& timeout, const simple_variant& data_layout, const std::vector& write_array); BeginWriteBinaryU32Response begin_write_binary_u32(const StubPtr& stub, const nidevice_grpc::Session& task, const pb::int32& num_samps_per_chan, const bool& auto_start, const double& timeout, const simple_variant& data_layout); WriteCtrFreqResponse write_ctr_freq(const StubPtr& stub, const nidevice_grpc::Session& task, const pb::int32& num_samps_per_chan, const bool& auto_start, const double& timeout, const simple_variant& data_layout, const std::vector& frequency, const std::vector& duty_cycle); +BeginWriteCtrFreqResponse begin_write_ctr_freq(const StubPtr& stub, const nidevice_grpc::Session& task, const pb::int32& num_samps_per_chan, const bool& auto_start, const double& timeout, const simple_variant& data_layout); WriteCtrFreqScalarResponse write_ctr_freq_scalar(const StubPtr& stub, const nidevice_grpc::Session& task, const bool& auto_start, const double& timeout, const double& frequency, const double& duty_cycle); +BeginWriteCtrFreqScalarResponse begin_write_ctr_freq_scalar(const StubPtr& stub, const nidevice_grpc::Session& task, const bool& auto_start, const double& timeout); WriteCtrTicksResponse write_ctr_ticks(const StubPtr& stub, const nidevice_grpc::Session& task, const pb::int32& num_samps_per_chan, const bool& auto_start, const double& timeout, const simple_variant& data_layout, const std::vector& high_ticks, const std::vector& low_ticks); +BeginWriteCtrTicksResponse begin_write_ctr_ticks(const StubPtr& stub, const nidevice_grpc::Session& task, const pb::int32& num_samps_per_chan, const bool& auto_start, const double& timeout, const simple_variant& data_layout); WriteCtrTicksScalarResponse write_ctr_ticks_scalar(const StubPtr& stub, const nidevice_grpc::Session& task, const bool& auto_start, const double& timeout, const pb::uint32& high_ticks, const pb::uint32& low_ticks); +BeginWriteCtrTicksScalarResponse begin_write_ctr_ticks_scalar(const StubPtr& stub, const nidevice_grpc::Session& task, const bool& auto_start, const double& timeout); WriteCtrTimeResponse write_ctr_time(const StubPtr& stub, const nidevice_grpc::Session& task, const pb::int32& num_samps_per_chan, const bool& auto_start, const double& timeout, const simple_variant& data_layout, const std::vector& high_time, const std::vector& low_time); +BeginWriteCtrTimeResponse begin_write_ctr_time(const StubPtr& stub, const nidevice_grpc::Session& task, const pb::int32& num_samps_per_chan, const bool& auto_start, const double& timeout, const simple_variant& data_layout); WriteCtrTimeScalarResponse write_ctr_time_scalar(const StubPtr& stub, const nidevice_grpc::Session& task, const bool& auto_start, const double& timeout, const double& high_time, const double& low_time); +BeginWriteCtrTimeScalarResponse begin_write_ctr_time_scalar(const StubPtr& stub, const nidevice_grpc::Session& task, const bool& auto_start, const double& timeout); WriteDigitalLinesResponse write_digital_lines(const StubPtr& stub, const nidevice_grpc::Session& task, const pb::int32& num_samps_per_chan, const bool& auto_start, const double& timeout, const simple_variant& data_layout, const std::string& write_array); +BeginWriteDigitalLinesResponse begin_write_digital_lines(const StubPtr& stub, const nidevice_grpc::Session& task, const pb::int32& num_samps_per_chan, const bool& auto_start, const double& timeout, const simple_variant& data_layout); WriteDigitalScalarU32Response write_digital_scalar_u32(const StubPtr& stub, const nidevice_grpc::Session& task, const bool& auto_start, const double& timeout, const pb::uint32& value); BeginWriteDigitalScalarU32Response begin_write_digital_scalar_u32(const StubPtr& stub, const nidevice_grpc::Session& task, const bool& auto_start, const double& timeout); WriteDigitalU16Response write_digital_u16(const StubPtr& stub, const nidevice_grpc::Session& task, const pb::int32& num_samps_per_chan, const bool& auto_start, const double& timeout, const simple_variant& data_layout, const std::vector& write_array); @@ -454,7 +461,9 @@ BeginWriteDigitalU16Response begin_write_digital_u16(const StubPtr& stub, const WriteDigitalU32Response write_digital_u32(const StubPtr& stub, const nidevice_grpc::Session& task, const pb::int32& num_samps_per_chan, const bool& auto_start, const double& timeout, const simple_variant& data_layout, const std::vector& write_array); BeginWriteDigitalU32Response begin_write_digital_u32(const StubPtr& stub, const nidevice_grpc::Session& task, const pb::int32& num_samps_per_chan, const bool& auto_start, const double& timeout, const simple_variant& data_layout); WriteDigitalU8Response write_digital_u8(const StubPtr& stub, const nidevice_grpc::Session& task, const pb::int32& num_samps_per_chan, const bool& auto_start, const double& timeout, const simple_variant& data_layout, const std::string& write_array); +BeginWriteDigitalU8Response begin_write_digital_u8(const StubPtr& stub, const nidevice_grpc::Session& task, const pb::int32& num_samps_per_chan, const bool& auto_start, const double& timeout, const simple_variant& data_layout); WriteRawResponse write_raw(const StubPtr& stub, const nidevice_grpc::Session& task, const pb::int32& num_samps, const bool& auto_start, const double& timeout, const std::string& write_array); +BeginWriteRawResponse begin_write_raw(const StubPtr& stub, const nidevice_grpc::Session& task, const pb::int32& num_samps, const bool& auto_start, const double& timeout); WriteToTEDSFromArrayResponse write_to_teds_from_array(const StubPtr& stub, const std::string& physical_channel, const std::string& bit_stream, const simple_variant& basic_teds_options); WriteToTEDSFromFileResponse write_to_teds_from_file(const StubPtr& stub, const std::string& physical_channel, const std::string& file_path, const simple_variant& basic_teds_options); diff --git a/generated/nidaqmx/nidaqmx_service.cpp b/generated/nidaqmx/nidaqmx_service.cpp index 0064aa619..be8d76500 100644 --- a/generated/nidaqmx/nidaqmx_service.cpp +++ b/generated/nidaqmx/nidaqmx_service.cpp @@ -406,6 +406,91 @@ namespace nidaqmx_grpc { std::shared_ptr library; }; + struct MonikerWriteCtrFreqData + { + TaskHandle task; + int32 num_samps_per_chan; + bool32 auto_start; + float64 timeout; + int32 data_layout; + bool32* reserved; + nidaqmx_grpc::WriteCtrFreqStreamingRequest request; + nidaqmx_grpc::WriteCtrFreqStreamingResponse response; + std::shared_ptr library; + }; + + struct MonikerWriteCtrFreqScalarData + { + TaskHandle task; + bool32 auto_start; + float64 timeout; + bool32* reserved; + nidaqmx_grpc::WriteCtrFreqScalarStreamingRequest request; + nidaqmx_grpc::WriteCtrFreqScalarStreamingResponse response; + std::shared_ptr library; + }; + + struct MonikerWriteCtrTicksData + { + TaskHandle task; + int32 num_samps_per_chan; + bool32 auto_start; + float64 timeout; + int32 data_layout; + bool32* reserved; + nidaqmx_grpc::WriteCtrTicksStreamingRequest request; + nidaqmx_grpc::WriteCtrTicksStreamingResponse response; + std::shared_ptr library; + }; + + struct MonikerWriteCtrTicksScalarData + { + TaskHandle task; + bool32 auto_start; + float64 timeout; + bool32* reserved; + nidaqmx_grpc::WriteCtrTicksScalarStreamingRequest request; + nidaqmx_grpc::WriteCtrTicksScalarStreamingResponse response; + std::shared_ptr library; + }; + + struct MonikerWriteCtrTimeData + { + TaskHandle task; + int32 num_samps_per_chan; + bool32 auto_start; + float64 timeout; + int32 data_layout; + bool32* reserved; + nidaqmx_grpc::WriteCtrTimeStreamingRequest request; + nidaqmx_grpc::WriteCtrTimeStreamingResponse response; + std::shared_ptr library; + }; + + struct MonikerWriteCtrTimeScalarData + { + TaskHandle task; + bool32 auto_start; + float64 timeout; + bool32* reserved; + nidaqmx_grpc::WriteCtrTimeScalarStreamingRequest request; + nidaqmx_grpc::WriteCtrTimeScalarStreamingResponse response; + std::shared_ptr library; + }; + + struct MonikerWriteDigitalLinesData + { + TaskHandle task; + int32 num_samps_per_chan; + bool32 auto_start; + float64 timeout; + int32 data_layout; + bool32* reserved; + nidaqmx_grpc::WriteDigitalLinesStreamingRequest request; + nidaqmx_grpc::WriteDigitalLinesStreamingResponse response; + std::shared_ptr library; + }; + struct MonikerWriteDigitalScalarU32Data { TaskHandle task; @@ -443,6 +528,31 @@ namespace nidaqmx_grpc { std::shared_ptr library; }; + struct MonikerWriteDigitalU8Data + { + TaskHandle task; + int32 num_samps_per_chan; + bool32 auto_start; + float64 timeout; + int32 data_layout; + bool32* reserved; + nidaqmx_grpc::WriteDigitalU8StreamingRequest request; + nidaqmx_grpc::WriteDigitalU8StreamingResponse response; + std::shared_ptr library; + }; + + struct MonikerWriteRawData + { + TaskHandle task; + int32 num_samps; + bool32 auto_start; + float64 timeout; + bool32* reserved; + nidaqmx_grpc::WriteRawStreamingRequest request; + nidaqmx_grpc::WriteRawStreamingResponse response; + std::shared_ptr library; + }; + const auto kErrorReadBufferTooSmall = -200229; const auto kWarningCAPIStringTruncatedToFitBuffer = 200026; @@ -502,9 +612,18 @@ namespace nidaqmx_grpc { ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteBinaryI32", MonikerWriteBinaryI32); ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteBinaryU16", MonikerWriteBinaryU16); ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteBinaryU32", MonikerWriteBinaryU32); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteCtrFreq", MonikerWriteCtrFreq); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteCtrFreqScalar", MonikerWriteCtrFreqScalar); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteCtrTicks", MonikerWriteCtrTicks); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteCtrTicksScalar", MonikerWriteCtrTicksScalar); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteCtrTime", MonikerWriteCtrTime); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteCtrTimeScalar", MonikerWriteCtrTimeScalar); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteDigitalLines", MonikerWriteDigitalLines); ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteDigitalScalarU32", MonikerWriteDigitalScalarU32); ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteDigitalU16", MonikerWriteDigitalU16); ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteDigitalU32", MonikerWriteDigitalU32); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteDigitalU8", MonikerWriteDigitalU8); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteRaw", MonikerWriteRaw); } ::grpc::Status MonikerReadAnalogF64(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) @@ -1373,12 +1492,9 @@ ::grpc::Status MonikerWriteAnalogF64(void* data, google::protobuf::Arena& arena, auto reserved = function_data->reserved; int32 samps_per_chan_written {}; - ArrayDoubleData arraydoubledata_message; - packedData.UnpackTo(&arraydoubledata_message); - - auto data_array = arraydoubledata_message.value(); - auto write_array = const_cast(arraydoubledata_message.value().data()); - auto size = data_array.size(); + WriteAnalogF64StreamingRequest* request; + packedData.UnpackTo(request); + auto write_array = const_cast(request->write_array().data()); auto status = library->WriteAnalogF64(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array, &samps_per_chan_written, reserved); @@ -1399,9 +1515,9 @@ ::grpc::Status MonikerWriteAnalogScalarF64(void* data, google::protobuf::Arena& auto timeout = function_data->timeout; auto reserved = function_data->reserved; - DoubleData doubledata_message; - packedData.UnpackTo(&doubledata_message); - auto value = doubledata_message.value(); + WriteAnalogScalarF64StreamingRequest* request; + packedData.UnpackTo(request); + float64 value = request->value(); auto status = library->WriteAnalogScalarF64(task, auto_start, timeout, value, reserved); @@ -1425,24 +1541,26 @@ ::grpc::Status MonikerWriteBinaryI16(void* data, google::protobuf::Arena& arena, auto reserved = function_data->reserved; int32 samps_per_chan_written {}; - ArrayI16Data arrayi16data_message; - packedData.UnpackTo(&arrayi16data_message); - - auto data_array = arrayi16data_message.value(); - auto write_array = std::vector(); - auto size = data_array.size(); - write_array.reserve(size); - std::transform( - data_array.begin(), - data_array.end(), - std::back_inserter(write_array), - [](auto x) { - if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { - std::string message("value " + std::to_string(x) + " doesn't fit in datatype int16"); - throw nidevice_grpc::ValueOutOfRangeException(message); - } - return static_cast(x); - }); + WriteBinaryI16StreamingRequest* request; + packedData.UnpackTo(request); + auto write_array_raw = request->write_array(); + auto write_array = std::vector(); + write_array.reserve(write_array_raw.size()); + std::transform( + write_array_raw.begin(), + write_array_raw.end(), + std::back_inserter(write_array), + [](auto x) { + if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { + std::string message("value "); + message.append(std::to_string(x)); + message.append(" doesn't fit in datatype "); + message.append("int16"); + throw nidevice_grpc::ValueOutOfRangeException(message); + } + return static_cast(x); + }); + auto status = library->WriteBinaryI16(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array.data(), &samps_per_chan_written, reserved); @@ -1466,12 +1584,9 @@ ::grpc::Status MonikerWriteBinaryI32(void* data, google::protobuf::Arena& arena, auto reserved = function_data->reserved; int32 samps_per_chan_written {}; - ArrayI32Data arrayi32data_message; - packedData.UnpackTo(&arrayi32data_message); - - auto data_array = arrayi32data_message.value(); - auto write_array = reinterpret_cast(arrayi32data_message.value().data()); - auto size = data_array.size(); + WriteBinaryI32StreamingRequest* request; + packedData.UnpackTo(request); + auto write_array = reinterpret_cast(request->write_array().data()); auto status = library->WriteBinaryI32(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array, &samps_per_chan_written, reserved); @@ -1495,24 +1610,26 @@ ::grpc::Status MonikerWriteBinaryU16(void* data, google::protobuf::Arena& arena, auto reserved = function_data->reserved; int32 samps_per_chan_written {}; - ArrayU16Data arrayu16data_message; - packedData.UnpackTo(&arrayu16data_message); - - auto data_array = arrayu16data_message.value(); - auto write_array = std::vector(); - auto size = data_array.size(); - write_array.reserve(size); - std::transform( - data_array.begin(), - data_array.end(), - std::back_inserter(write_array), - [](auto x) { - if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { - std::string message("value " + std::to_string(x) + " doesn't fit in datatype uInt16"); - throw nidevice_grpc::ValueOutOfRangeException(message); - } - return static_cast(x); - }); + WriteBinaryU16StreamingRequest* request; + packedData.UnpackTo(request); + auto write_array_raw = request->write_array(); + auto write_array = std::vector(); + write_array.reserve(write_array_raw.size()); + std::transform( + write_array_raw.begin(), + write_array_raw.end(), + std::back_inserter(write_array), + [](auto x) { + if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { + std::string message("value "); + message.append(std::to_string(x)); + message.append(" doesn't fit in datatype "); + message.append("uInt16"); + throw nidevice_grpc::ValueOutOfRangeException(message); + } + return static_cast(x); + }); + auto status = library->WriteBinaryU16(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array.data(), &samps_per_chan_written, reserved); @@ -1536,12 +1653,9 @@ ::grpc::Status MonikerWriteBinaryU32(void* data, google::protobuf::Arena& arena, auto reserved = function_data->reserved; int32 samps_per_chan_written {}; - ArrayU32Data arrayu32data_message; - packedData.UnpackTo(&arrayu32data_message); - - auto data_array = arrayu32data_message.value(); - auto write_array = reinterpret_cast(arrayu32data_message.value().data()); - auto size = data_array.size(); + WriteBinaryU32StreamingRequest* request; + packedData.UnpackTo(request); + auto write_array = reinterpret_cast(request->write_array().data()); auto status = library->WriteBinaryU32(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array, &samps_per_chan_written, reserved); @@ -1552,21 +1666,25 @@ ::grpc::Status MonikerWriteBinaryU32(void* data, google::protobuf::Arena& arena, return ::grpc::Status::OK; } -::grpc::Status MonikerWriteDigitalScalarU32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) +::grpc::Status MonikerWriteCtrFreq(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteDigitalScalarU32Data* function_data = static_cast(data); + MonikerWriteCtrFreqData* function_data = static_cast(data); auto library = function_data->library; auto response = &function_data->response; auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; auto auto_start = function_data->auto_start; auto timeout = function_data->timeout; + auto data_layout = function_data->data_layout; auto reserved = function_data->reserved; + int32 num_samps_per_chan_written {}; - U32Data u32data_message; - packedData.UnpackTo(&u32data_message); - auto value = u32data_message.value(); + WriteCtrFreqStreamingRequest* request; + packedData.UnpackTo(request); + auto frequency = const_cast(request->frequency().data()); + auto duty_cycle = const_cast(request->duty_cycle().data()); - auto status = library->WriteDigitalScalarU32(task, auto_start, timeout, value, reserved); + auto status = library->WriteCtrFreq(task, num_samps_per_chan, auto_start, timeout, data_layout, frequency, duty_cycle, &num_samps_per_chan_written, reserved); if (status < 0) { @@ -1575,39 +1693,22 @@ ::grpc::Status MonikerWriteDigitalScalarU32(void* data, google::protobuf::Arena& return ::grpc::Status::OK; } -::grpc::Status MonikerWriteDigitalU16(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) +::grpc::Status MonikerWriteCtrFreqScalar(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteDigitalU16Data* function_data = static_cast(data); + MonikerWriteCtrFreqScalarData* function_data = static_cast(data); auto library = function_data->library; auto response = &function_data->response; auto task = function_data->task; - auto num_samps_per_chan = function_data->num_samps_per_chan; auto auto_start = function_data->auto_start; auto timeout = function_data->timeout; - auto data_layout = function_data->data_layout; auto reserved = function_data->reserved; - int32 samps_per_chan_written {}; - ArrayU16Data arrayu16data_message; - packedData.UnpackTo(&arrayu16data_message); - - auto data_array = arrayu16data_message.value(); - auto write_array = std::vector(); - auto size = data_array.size(); - write_array.reserve(size); - std::transform( - data_array.begin(), - data_array.end(), - std::back_inserter(write_array), - [](auto x) { - if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { - std::string message("value " + std::to_string(x) + " doesn't fit in datatype uInt16"); - throw nidevice_grpc::ValueOutOfRangeException(message); - } - return static_cast(x); - }); + WriteCtrFreqScalarStreamingRequest* request; + packedData.UnpackTo(request); + float64 frequency = request->frequency(); + float64 duty_cycle = request->duty_cycle(); - auto status = library->WriteDigitalU16(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array.data(), &samps_per_chan_written, reserved); + auto status = library->WriteCtrFreqScalar(task, auto_start, timeout, frequency, duty_cycle, reserved); if (status < 0) { @@ -1616,9 +1717,9 @@ ::grpc::Status MonikerWriteDigitalU16(void* data, google::protobuf::Arena& arena return ::grpc::Status::OK; } -::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) +::grpc::Status MonikerWriteCtrTicks(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteDigitalU32Data* function_data = static_cast(data); + MonikerWriteCtrTicksData* function_data = static_cast(data); auto library = function_data->library; auto response = &function_data->response; auto task = function_data->task; @@ -1627,16 +1728,14 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena auto timeout = function_data->timeout; auto data_layout = function_data->data_layout; auto reserved = function_data->reserved; - int32 samps_per_chan_written {}; + int32 num_samps_per_chan_written {}; - ArrayU32Data arrayu32data_message; - packedData.UnpackTo(&arrayu32data_message); - - auto data_array = arrayu32data_message.value(); - auto write_array = reinterpret_cast(arrayu32data_message.value().data()); - auto size = data_array.size(); + WriteCtrTicksStreamingRequest* request; + packedData.UnpackTo(request); + auto high_ticks = reinterpret_cast(request->high_ticks().data()); + auto low_ticks = reinterpret_cast(request->low_ticks().data()); - auto status = library->WriteDigitalU32(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array, &samps_per_chan_written, reserved); + auto status = library->WriteCtrTicks(task, num_samps_per_chan, auto_start, timeout, data_layout, high_ticks, low_ticks, &num_samps_per_chan_written, reserved); if (status < 0) { @@ -1645,98 +1744,342 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena return ::grpc::Status::OK; } - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiDAQmxService::AddCDAQSyncConnection(::grpc::ServerContext* context, const AddCDAQSyncConnectionRequest* request, AddCDAQSyncConnectionResponse* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto port_list_mbcs = convert_from_grpc(request->port_list()); - auto port_list = port_list_mbcs.c_str(); - auto status = library_->AddCDAQSyncConnection(port_list); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } - } +::grpc::Status MonikerWriteCtrTicksScalar(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) +{ + MonikerWriteCtrTicksScalarData* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto auto_start = function_data->auto_start; + auto timeout = function_data->timeout; + auto reserved = function_data->reserved; - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiDAQmxService::AddGlobalChansToTask(::grpc::ServerContext* context, const AddGlobalChansToTaskRequest* request, AddGlobalChansToTaskResponse* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto channel_names_mbcs = convert_from_grpc(request->channel_names()); - auto channel_names = channel_names_mbcs.c_str(); - auto status = library_->AddGlobalChansToTask(task, channel_names); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } - } + WriteCtrTicksScalarStreamingRequest* request; + packedData.UnpackTo(request); + uInt32 high_ticks = request->high_ticks(); + uInt32 low_ticks = request->low_ticks(); - //--------------------------------------------------------------------- - //--------------------------------------------------------------------- - ::grpc::Status NiDAQmxService::AddNetworkDevice(::grpc::ServerContext* context, const AddNetworkDeviceRequest* request, AddNetworkDeviceResponse* response) - { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; + auto status = library->WriteCtrTicksScalar(task, auto_start, timeout, high_ticks, low_ticks, reserved); + + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } - try { - auto ip_address_mbcs = convert_from_grpc(request->ip_address()); - auto ip_address = ip_address_mbcs.c_str(); - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - bool32 attempt_reservation = request->attempt_reservation(); - float64 timeout = request->timeout(); + return ::grpc::Status::OK; +} - while (true) { - auto status = library_->AddNetworkDevice(ip_address, device_name, attempt_reservation, timeout, nullptr, 0); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - uInt32 device_name_out_buffer_size = status; +::grpc::Status MonikerWriteCtrTime(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) +{ + MonikerWriteCtrTimeData* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto auto_start = function_data->auto_start; + auto timeout = function_data->timeout; + auto data_layout = function_data->data_layout; + auto reserved = function_data->reserved; + int32 num_samps_per_chan_written {}; - std::string device_name_out; - if (device_name_out_buffer_size > 0) { - device_name_out.resize(device_name_out_buffer_size - 1); - } - status = library_->AddNetworkDevice(ip_address, device_name, attempt_reservation, timeout, (char*)device_name_out.data(), device_name_out_buffer_size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(device_name_out_buffer_size)) { - // buffer is now too small, try again - continue; - } - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - std::string device_name_out_utf8; - convert_to_grpc(device_name_out, &device_name_out_utf8); - response->set_device_name_out(device_name_out_utf8); - nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_device_name_out())); - return ::grpc::Status::OK; - } - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } - } + WriteCtrTimeStreamingRequest* request; + packedData.UnpackTo(request); + auto high_time = const_cast(request->high_time().data()); + auto low_time = const_cast(request->low_time().data()); + + auto status = library->WriteCtrTime(task, num_samps_per_chan, auto_start, timeout, data_layout, high_time, low_time, &num_samps_per_chan_written, reserved); + + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; +} + +::grpc::Status MonikerWriteCtrTimeScalar(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) +{ + MonikerWriteCtrTimeScalarData* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto auto_start = function_data->auto_start; + auto timeout = function_data->timeout; + auto reserved = function_data->reserved; + + WriteCtrTimeScalarStreamingRequest* request; + packedData.UnpackTo(request); + float64 high_time = request->high_time(); + float64 low_time = request->low_time(); + + auto status = library->WriteCtrTimeScalar(task, auto_start, timeout, high_time, low_time, reserved); + + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; +} + +::grpc::Status MonikerWriteDigitalLines(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) +{ + MonikerWriteDigitalLinesData* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto auto_start = function_data->auto_start; + auto timeout = function_data->timeout; + auto data_layout = function_data->data_layout; + auto reserved = function_data->reserved; + int32 samps_per_chan_written {}; + + WriteDigitalLinesStreamingRequest* request; + packedData.UnpackTo(request); + const uInt8* write_array = (const uInt8*)request->write_array().c_str(); + + auto status = library->WriteDigitalLines(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array, &samps_per_chan_written, reserved); + + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; +} + +::grpc::Status MonikerWriteDigitalScalarU32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) +{ + MonikerWriteDigitalScalarU32Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto auto_start = function_data->auto_start; + auto timeout = function_data->timeout; + auto reserved = function_data->reserved; + + WriteDigitalScalarU32StreamingRequest* request; + packedData.UnpackTo(request); + uInt32 value = request->value(); + + auto status = library->WriteDigitalScalarU32(task, auto_start, timeout, value, reserved); + + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; +} + +::grpc::Status MonikerWriteDigitalU16(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) +{ + MonikerWriteDigitalU16Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto auto_start = function_data->auto_start; + auto timeout = function_data->timeout; + auto data_layout = function_data->data_layout; + auto reserved = function_data->reserved; + int32 samps_per_chan_written {}; + + WriteDigitalU16StreamingRequest* request; + packedData.UnpackTo(request); + auto write_array_raw = request->write_array(); + auto write_array = std::vector(); + write_array.reserve(write_array_raw.size()); + std::transform( + write_array_raw.begin(), + write_array_raw.end(), + std::back_inserter(write_array), + [](auto x) { + if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { + std::string message("value "); + message.append(std::to_string(x)); + message.append(" doesn't fit in datatype "); + message.append("uInt16"); + throw nidevice_grpc::ValueOutOfRangeException(message); + } + return static_cast(x); + }); + + + auto status = library->WriteDigitalU16(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array.data(), &samps_per_chan_written, reserved); + + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; +} + +::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) +{ + MonikerWriteDigitalU32Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto auto_start = function_data->auto_start; + auto timeout = function_data->timeout; + auto data_layout = function_data->data_layout; + auto reserved = function_data->reserved; + int32 samps_per_chan_written {}; + + WriteDigitalU32StreamingRequest* request; + packedData.UnpackTo(request); + auto write_array = reinterpret_cast(request->write_array().data()); + + auto status = library->WriteDigitalU32(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array, &samps_per_chan_written, reserved); + + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; +} + +::grpc::Status MonikerWriteDigitalU8(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) +{ + MonikerWriteDigitalU8Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto auto_start = function_data->auto_start; + auto timeout = function_data->timeout; + auto data_layout = function_data->data_layout; + auto reserved = function_data->reserved; + int32 samps_per_chan_written {}; + + WriteDigitalU8StreamingRequest* request; + packedData.UnpackTo(request); + const uInt8* write_array = (const uInt8*)request->write_array().c_str(); + + auto status = library->WriteDigitalU8(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array, &samps_per_chan_written, reserved); + + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; +} + +::grpc::Status MonikerWriteRaw(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) +{ + MonikerWriteRawData* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps = function_data->num_samps; + auto auto_start = function_data->auto_start; + auto timeout = function_data->timeout; + auto reserved = function_data->reserved; + int32 samps_per_chan_written {}; + + WriteRawStreamingRequest* request; + packedData.UnpackTo(request); + const uInt8* write_array = (const uInt8*)request->write_array().c_str(); + + auto status = library->WriteRaw(task, num_samps, auto_start, timeout, write_array, &samps_per_chan_written, reserved); + + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; +} + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::AddCDAQSyncConnection(::grpc::ServerContext* context, const AddCDAQSyncConnectionRequest* request, AddCDAQSyncConnectionResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto port_list_mbcs = convert_from_grpc(request->port_list()); + auto port_list = port_list_mbcs.c_str(); + auto status = library_->AddCDAQSyncConnection(port_list); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::AddGlobalChansToTask(::grpc::ServerContext* context, const AddGlobalChansToTaskRequest* request, AddGlobalChansToTaskResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto channel_names_mbcs = convert_from_grpc(request->channel_names()); + auto channel_names = channel_names_mbcs.c_str(); + auto status = library_->AddGlobalChansToTask(task, channel_names); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::AddNetworkDevice(::grpc::ServerContext* context, const AddNetworkDeviceRequest* request, AddNetworkDeviceResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto ip_address_mbcs = convert_from_grpc(request->ip_address()); + auto ip_address = ip_address_mbcs.c_str(); + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + bool32 attempt_reservation = request->attempt_reservation(); + float64 timeout = request->timeout(); + + while (true) { + auto status = library_->AddNetworkDevice(ip_address, device_name, attempt_reservation, timeout, nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + uInt32 device_name_out_buffer_size = status; + + std::string device_name_out; + if (device_name_out_buffer_size > 0) { + device_name_out.resize(device_name_out_buffer_size - 1); + } + status = library_->AddNetworkDevice(ip_address, device_name, attempt_reservation, timeout, (char*)device_name_out.data(), device_name_out_buffer_size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(device_name_out_buffer_size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + std::string device_name_out_utf8; + convert_to_grpc(device_name_out, &device_name_out_utf8); + response->set_device_name_out(device_name_out_utf8); + nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_device_name_out())); + return ::grpc::Status::OK; + } + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } //--------------------------------------------------------------------- //--------------------------------------------------------------------- @@ -22076,6 +22419,57 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena } } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginWriteCtrFreq(::grpc::ServerContext* context, const BeginWriteCtrFreqRequest* request, BeginWriteCtrFreqResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + int32 data_layout; + switch (request->data_layout_enum_case()) { + case nidaqmx_grpc::BeginWriteCtrFreqRequest::DataLayoutEnumCase::kDataLayout: { + data_layout = static_cast(request->data_layout()); + break; + } + case nidaqmx_grpc::BeginWriteCtrFreqRequest::DataLayoutEnumCase::kDataLayoutRaw: { + data_layout = static_cast(request->data_layout_raw()); + break; + } + case nidaqmx_grpc::BeginWriteCtrFreqRequest::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); + break; + } + } + + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->auto_start = auto_start; + data->timeout = timeout; + data->data_layout = data_layout; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteCtrFreq", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + //--------------------------------------------------------------------- //--------------------------------------------------------------------- ::grpc::Status NiDAQmxService::WriteCtrFreqScalar(::grpc::ServerContext* context, const WriteCtrFreqScalarRequest* request, WriteCtrFreqScalarResponse* response) @@ -22091,11 +22485,90 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena float64 frequency = request->frequency(); float64 duty_cycle = request->duty_cycle(); auto reserved = nullptr; - auto status = library_->WriteCtrFreqScalar(task, auto_start, timeout, frequency, duty_cycle, reserved); + auto status = library_->WriteCtrFreqScalar(task, auto_start, timeout, frequency, duty_cycle, reserved); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginWriteCtrFreqScalar(::grpc::ServerContext* context, const BeginWriteCtrFreqScalarRequest* request, BeginWriteCtrFreqScalarResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->auto_start = auto_start; + data->timeout = timeout; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteCtrFreqScalar", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::WriteCtrTicks(::grpc::ServerContext* context, const WriteCtrTicksRequest* request, WriteCtrTicksResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + int32 data_layout; + switch (request->data_layout_enum_case()) { + case nidaqmx_grpc::WriteCtrTicksRequest::DataLayoutEnumCase::kDataLayout: { + data_layout = static_cast(request->data_layout()); + break; + } + case nidaqmx_grpc::WriteCtrTicksRequest::DataLayoutEnumCase::kDataLayoutRaw: { + data_layout = static_cast(request->data_layout_raw()); + break; + } + case nidaqmx_grpc::WriteCtrTicksRequest::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); + break; + } + } + + auto high_ticks = reinterpret_cast(request->high_ticks().data()); + auto low_ticks = reinterpret_cast(request->low_ticks().data()); + auto reserved = nullptr; + int32 num_samps_per_chan_written {}; + auto status = library_->WriteCtrTicks(task, num_samps_per_chan, auto_start, timeout, data_layout, high_ticks, low_ticks, &num_samps_per_chan_written, reserved); + context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(num_samps_per_chan_written)); if (!status_ok(status)) { return ConvertApiErrorStatusForTaskHandle(context, status, task); } response->set_status(status); + response->set_num_samps_per_chan_written(num_samps_per_chan_written); return ::grpc::Status::OK; } catch (nidevice_grpc::NonDriverException& ex) { @@ -22105,7 +22578,7 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena //--------------------------------------------------------------------- //--------------------------------------------------------------------- - ::grpc::Status NiDAQmxService::WriteCtrTicks(::grpc::ServerContext* context, const WriteCtrTicksRequest* request, WriteCtrTicksResponse* response) + ::grpc::Status NiDAQmxService::BeginWriteCtrTicks(::grpc::ServerContext* context, const BeginWriteCtrTicksRequest* request, BeginWriteCtrTicksResponse* response) { if (context->IsCancelled()) { return ::grpc::Status::CANCELLED; @@ -22118,31 +22591,35 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena float64 timeout = request->timeout(); int32 data_layout; switch (request->data_layout_enum_case()) { - case nidaqmx_grpc::WriteCtrTicksRequest::DataLayoutEnumCase::kDataLayout: { + case nidaqmx_grpc::BeginWriteCtrTicksRequest::DataLayoutEnumCase::kDataLayout: { data_layout = static_cast(request->data_layout()); break; } - case nidaqmx_grpc::WriteCtrTicksRequest::DataLayoutEnumCase::kDataLayoutRaw: { + case nidaqmx_grpc::BeginWriteCtrTicksRequest::DataLayoutEnumCase::kDataLayoutRaw: { data_layout = static_cast(request->data_layout_raw()); break; } - case nidaqmx_grpc::WriteCtrTicksRequest::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { + case nidaqmx_grpc::BeginWriteCtrTicksRequest::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); break; } } - auto high_ticks = reinterpret_cast(request->high_ticks().data()); - auto low_ticks = reinterpret_cast(request->low_ticks().data()); auto reserved = nullptr; - int32 num_samps_per_chan_written {}; - auto status = library_->WriteCtrTicks(task, num_samps_per_chan, auto_start, timeout, data_layout, high_ticks, low_ticks, &num_samps_per_chan_written, reserved); - context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(num_samps_per_chan_written)); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_num_samps_per_chan_written(num_samps_per_chan_written); + + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->auto_start = auto_start; + data->timeout = timeout; + data->data_layout = data_layout; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteCtrTicks", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); return ::grpc::Status::OK; } catch (nidevice_grpc::NonDriverException& ex) { @@ -22177,6 +22654,38 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena } } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginWriteCtrTicksScalar(::grpc::ServerContext* context, const BeginWriteCtrTicksScalarRequest* request, BeginWriteCtrTicksScalarResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->auto_start = auto_start; + data->timeout = timeout; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteCtrTicksScalar", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + //--------------------------------------------------------------------- //--------------------------------------------------------------------- ::grpc::Status NiDAQmxService::WriteCtrTime(::grpc::ServerContext* context, const WriteCtrTimeRequest* request, WriteCtrTimeResponse* response) @@ -22224,6 +22733,57 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena } } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginWriteCtrTime(::grpc::ServerContext* context, const BeginWriteCtrTimeRequest* request, BeginWriteCtrTimeResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + int32 data_layout; + switch (request->data_layout_enum_case()) { + case nidaqmx_grpc::BeginWriteCtrTimeRequest::DataLayoutEnumCase::kDataLayout: { + data_layout = static_cast(request->data_layout()); + break; + } + case nidaqmx_grpc::BeginWriteCtrTimeRequest::DataLayoutEnumCase::kDataLayoutRaw: { + data_layout = static_cast(request->data_layout_raw()); + break; + } + case nidaqmx_grpc::BeginWriteCtrTimeRequest::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); + break; + } + } + + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->auto_start = auto_start; + data->timeout = timeout; + data->data_layout = data_layout; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteCtrTime", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + //--------------------------------------------------------------------- //--------------------------------------------------------------------- ::grpc::Status NiDAQmxService::WriteCtrTimeScalar(::grpc::ServerContext* context, const WriteCtrTimeScalarRequest* request, WriteCtrTimeScalarResponse* response) @@ -22251,6 +22811,38 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena } } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginWriteCtrTimeScalar(::grpc::ServerContext* context, const BeginWriteCtrTimeScalarRequest* request, BeginWriteCtrTimeScalarResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->auto_start = auto_start; + data->timeout = timeout; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteCtrTimeScalar", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + //--------------------------------------------------------------------- //--------------------------------------------------------------------- ::grpc::Status NiDAQmxService::WriteDigitalLines(::grpc::ServerContext* context, const WriteDigitalLinesRequest* request, WriteDigitalLinesResponse* response) @@ -22297,6 +22889,57 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena } } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginWriteDigitalLines(::grpc::ServerContext* context, const BeginWriteDigitalLinesRequest* request, BeginWriteDigitalLinesResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + int32 data_layout; + switch (request->data_layout_enum_case()) { + case nidaqmx_grpc::BeginWriteDigitalLinesRequest::DataLayoutEnumCase::kDataLayout: { + data_layout = static_cast(request->data_layout()); + break; + } + case nidaqmx_grpc::BeginWriteDigitalLinesRequest::DataLayoutEnumCase::kDataLayoutRaw: { + data_layout = static_cast(request->data_layout_raw()); + break; + } + case nidaqmx_grpc::BeginWriteDigitalLinesRequest::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); + break; + } + } + + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->auto_start = auto_start; + data->timeout = timeout; + data->data_layout = data_layout; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteDigitalLines", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + //--------------------------------------------------------------------- //--------------------------------------------------------------------- ::grpc::Status NiDAQmxService::WriteDigitalScalarU32(::grpc::ServerContext* context, const WriteDigitalScalarU32Request* request, WriteDigitalScalarU32Response* response) @@ -22612,6 +23255,57 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena } } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginWriteDigitalU8(::grpc::ServerContext* context, const BeginWriteDigitalU8Request* request, BeginWriteDigitalU8Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + int32 data_layout; + switch (request->data_layout_enum_case()) { + case nidaqmx_grpc::BeginWriteDigitalU8Request::DataLayoutEnumCase::kDataLayout: { + data_layout = static_cast(request->data_layout()); + break; + } + case nidaqmx_grpc::BeginWriteDigitalU8Request::DataLayoutEnumCase::kDataLayoutRaw: { + data_layout = static_cast(request->data_layout_raw()); + break; + } + case nidaqmx_grpc::BeginWriteDigitalU8Request::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); + break; + } + } + + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->auto_start = auto_start; + data->timeout = timeout; + data->data_layout = data_layout; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteDigitalU8", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + //--------------------------------------------------------------------- //--------------------------------------------------------------------- ::grpc::Status NiDAQmxService::WriteRaw(::grpc::ServerContext* context, const WriteRawRequest* request, WriteRawResponse* response) @@ -22642,6 +23336,40 @@ ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena } } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginWriteRaw(::grpc::ServerContext* context, const BeginWriteRawRequest* request, BeginWriteRawResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps = request->num_samps(); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->num_samps = num_samps; + data->auto_start = auto_start; + data->timeout = timeout; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteRaw", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + //--------------------------------------------------------------------- //--------------------------------------------------------------------- ::grpc::Status NiDAQmxService::WriteToTEDSFromArray(::grpc::ServerContext* context, const WriteToTEDSFromArrayRequest* request, WriteToTEDSFromArrayResponse* response) diff --git a/generated/nidaqmx/nidaqmx_service.h b/generated/nidaqmx/nidaqmx_service.h index fa8045f32..e127c1d1e 100644 --- a/generated/nidaqmx/nidaqmx_service.h +++ b/generated/nidaqmx/nidaqmx_service.h @@ -68,9 +68,18 @@ ::grpc::Status MonikerWriteBinaryI16(void* data, google::protobuf::Arena& arena, ::grpc::Status MonikerWriteBinaryI32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData); ::grpc::Status MonikerWriteBinaryU16(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData); ::grpc::Status MonikerWriteBinaryU32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData); +::grpc::Status MonikerWriteCtrFreq(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData); +::grpc::Status MonikerWriteCtrFreqScalar(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData); +::grpc::Status MonikerWriteCtrTicks(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData); +::grpc::Status MonikerWriteCtrTicksScalar(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData); +::grpc::Status MonikerWriteCtrTime(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData); +::grpc::Status MonikerWriteCtrTimeScalar(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData); +::grpc::Status MonikerWriteDigitalLines(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData); ::grpc::Status MonikerWriteDigitalScalarU32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData); ::grpc::Status MonikerWriteDigitalU16(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData); ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData); +::grpc::Status MonikerWriteDigitalU8(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData); +::grpc::Status MonikerWriteRaw(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData); class NiDAQmxService final : public NiDAQmx::WithCallbackMethod_RegisterSignalEvent>> { public: @@ -502,12 +511,19 @@ class NiDAQmxService final : public NiDAQmx::WithCallbackMethod_RegisterSignalEv ::grpc::Status WriteBinaryU32(::grpc::ServerContext* context, const WriteBinaryU32Request* request, WriteBinaryU32Response* response) override; ::grpc::Status BeginWriteBinaryU32(::grpc::ServerContext* context, const BeginWriteBinaryU32Request* request, BeginWriteBinaryU32Response* response) override; ::grpc::Status WriteCtrFreq(::grpc::ServerContext* context, const WriteCtrFreqRequest* request, WriteCtrFreqResponse* response) override; + ::grpc::Status BeginWriteCtrFreq(::grpc::ServerContext* context, const BeginWriteCtrFreqRequest* request, BeginWriteCtrFreqResponse* response) override; ::grpc::Status WriteCtrFreqScalar(::grpc::ServerContext* context, const WriteCtrFreqScalarRequest* request, WriteCtrFreqScalarResponse* response) override; + ::grpc::Status BeginWriteCtrFreqScalar(::grpc::ServerContext* context, const BeginWriteCtrFreqScalarRequest* request, BeginWriteCtrFreqScalarResponse* response) override; ::grpc::Status WriteCtrTicks(::grpc::ServerContext* context, const WriteCtrTicksRequest* request, WriteCtrTicksResponse* response) override; + ::grpc::Status BeginWriteCtrTicks(::grpc::ServerContext* context, const BeginWriteCtrTicksRequest* request, BeginWriteCtrTicksResponse* response) override; ::grpc::Status WriteCtrTicksScalar(::grpc::ServerContext* context, const WriteCtrTicksScalarRequest* request, WriteCtrTicksScalarResponse* response) override; + ::grpc::Status BeginWriteCtrTicksScalar(::grpc::ServerContext* context, const BeginWriteCtrTicksScalarRequest* request, BeginWriteCtrTicksScalarResponse* response) override; ::grpc::Status WriteCtrTime(::grpc::ServerContext* context, const WriteCtrTimeRequest* request, WriteCtrTimeResponse* response) override; + ::grpc::Status BeginWriteCtrTime(::grpc::ServerContext* context, const BeginWriteCtrTimeRequest* request, BeginWriteCtrTimeResponse* response) override; ::grpc::Status WriteCtrTimeScalar(::grpc::ServerContext* context, const WriteCtrTimeScalarRequest* request, WriteCtrTimeScalarResponse* response) override; + ::grpc::Status BeginWriteCtrTimeScalar(::grpc::ServerContext* context, const BeginWriteCtrTimeScalarRequest* request, BeginWriteCtrTimeScalarResponse* response) override; ::grpc::Status WriteDigitalLines(::grpc::ServerContext* context, const WriteDigitalLinesRequest* request, WriteDigitalLinesResponse* response) override; + ::grpc::Status BeginWriteDigitalLines(::grpc::ServerContext* context, const BeginWriteDigitalLinesRequest* request, BeginWriteDigitalLinesResponse* response) override; ::grpc::Status WriteDigitalScalarU32(::grpc::ServerContext* context, const WriteDigitalScalarU32Request* request, WriteDigitalScalarU32Response* response) override; ::grpc::Status BeginWriteDigitalScalarU32(::grpc::ServerContext* context, const BeginWriteDigitalScalarU32Request* request, BeginWriteDigitalScalarU32Response* response) override; ::grpc::Status WriteDigitalU16(::grpc::ServerContext* context, const WriteDigitalU16Request* request, WriteDigitalU16Response* response) override; @@ -515,7 +531,9 @@ class NiDAQmxService final : public NiDAQmx::WithCallbackMethod_RegisterSignalEv ::grpc::Status WriteDigitalU32(::grpc::ServerContext* context, const WriteDigitalU32Request* request, WriteDigitalU32Response* response) override; ::grpc::Status BeginWriteDigitalU32(::grpc::ServerContext* context, const BeginWriteDigitalU32Request* request, BeginWriteDigitalU32Response* response) override; ::grpc::Status WriteDigitalU8(::grpc::ServerContext* context, const WriteDigitalU8Request* request, WriteDigitalU8Response* response) override; + ::grpc::Status BeginWriteDigitalU8(::grpc::ServerContext* context, const BeginWriteDigitalU8Request* request, BeginWriteDigitalU8Response* response) override; ::grpc::Status WriteRaw(::grpc::ServerContext* context, const WriteRawRequest* request, WriteRawResponse* response) override; + ::grpc::Status BeginWriteRaw(::grpc::ServerContext* context, const BeginWriteRawRequest* request, BeginWriteRawResponse* 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; private: diff --git a/generated/nifpga/nifpga_service.cpp b/generated/nifpga/nifpga_service.cpp index 78671d3cc..7371776ab 100644 --- a/generated/nifpga/nifpga_service.cpp +++ b/generated/nifpga/nifpga_service.cpp @@ -1054,12 +1054,10 @@ ::grpc::Status MonikerWriteArrayBool(void* data, google::protobuf::Arena& arena, auto session = function_data->session; auto control = function_data->control; - ArrayBoolData arraybooldata_message; - packedData.UnpackTo(&arraybooldata_message); - - auto data_array = arraybooldata_message.value(); - std::vector array(data_array.begin(), data_array.end()); - auto size = data_array.size(); + WriteArrayBoolStreamingRequest* request; + packedData.UnpackTo(request); + auto array = convert_from_grpc(request->array()); + size_t size = static_cast(request->array().size()); auto status = library->WriteArrayBool(session, control, array.data(), size); @@ -1078,12 +1076,10 @@ ::grpc::Status MonikerWriteArrayDbl(void* data, google::protobuf::Arena& arena, auto session = function_data->session; auto control = function_data->control; - ArrayDoubleData arraydoubledata_message; - packedData.UnpackTo(&arraydoubledata_message); - - auto data_array = arraydoubledata_message.value(); - auto array = const_cast(arraydoubledata_message.value().data()); - auto size = data_array.size(); + WriteArrayDblStreamingRequest* request; + packedData.UnpackTo(request); + auto array = const_cast(request->array().data()); + size_t size = static_cast(request->array().size()); auto status = library->WriteArrayDbl(session, control, array, size); @@ -1102,24 +1098,27 @@ ::grpc::Status MonikerWriteArrayI16(void* data, google::protobuf::Arena& arena, auto session = function_data->session; auto control = function_data->control; - ArrayI32Data arrayi32data_message; - packedData.UnpackTo(&arrayi32data_message); - - auto data_array = arrayi32data_message.value(); - auto array = std::vector(); - auto size = data_array.size(); - array.reserve(size); - std::transform( - data_array.begin(), - data_array.end(), - std::back_inserter(array), - [](auto x) { - if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { - std::string message("value " + std::to_string(x) + " doesn't fit in datatype int16_t"); - throw nidevice_grpc::ValueOutOfRangeException(message); - } - return static_cast(x); - }); + WriteArrayI16StreamingRequest* request; + packedData.UnpackTo(request); + auto array_raw = request->array(); + auto array = std::vector(); + array.reserve(array_raw.size()); + std::transform( + array_raw.begin(), + array_raw.end(), + std::back_inserter(array), + [](auto x) { + if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { + std::string message("value "); + message.append(std::to_string(x)); + message.append(" doesn't fit in datatype "); + message.append("int16_t"); + throw nidevice_grpc::ValueOutOfRangeException(message); + } + return static_cast(x); + }); + + size_t size = static_cast(request->array().size()); auto status = library->WriteArrayI16(session, control, array.data(), size); @@ -1138,12 +1137,10 @@ ::grpc::Status MonikerWriteArrayI32(void* data, google::protobuf::Arena& arena, auto session = function_data->session; auto control = function_data->control; - ArrayI32Data arrayi32data_message; - packedData.UnpackTo(&arrayi32data_message); - - auto data_array = arrayi32data_message.value(); - auto array = const_cast(arrayi32data_message.value().data()); - auto size = data_array.size(); + WriteArrayI32StreamingRequest* request; + packedData.UnpackTo(request); + auto array = const_cast(request->array().data()); + size_t size = static_cast(request->array().size()); auto status = library->WriteArrayI32(session, control, array, size); @@ -1162,12 +1159,10 @@ ::grpc::Status MonikerWriteArrayI64(void* data, google::protobuf::Arena& arena, auto session = function_data->session; auto control = function_data->control; - ArrayI64Data arrayi64data_message; - packedData.UnpackTo(&arrayi64data_message); - - auto data_array = arrayi64data_message.value(); - auto array = const_cast(arrayi64data_message.value().data()); - auto size = data_array.size(); + WriteArrayI64StreamingRequest* request; + packedData.UnpackTo(request); + auto array = const_cast(request->array().data()); + size_t size = static_cast(request->array().size()); auto status = library->WriteArrayI64(session, control, array, size); @@ -1186,24 +1181,27 @@ ::grpc::Status MonikerWriteArrayI8(void* data, google::protobuf::Arena& arena, g auto session = function_data->session; auto control = function_data->control; - ArrayI32Data arrayi32data_message; - packedData.UnpackTo(&arrayi32data_message); - - auto data_array = arrayi32data_message.value(); - auto array = std::vector(); - auto size = data_array.size(); - array.reserve(size); - std::transform( - data_array.begin(), - data_array.end(), - std::back_inserter(array), - [](auto x) { - if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { - std::string message("value " + std::to_string(x) + " doesn't fit in datatype int8_t"); - throw nidevice_grpc::ValueOutOfRangeException(message); - } - return static_cast(x); - }); + WriteArrayI8StreamingRequest* request; + packedData.UnpackTo(request); + auto array_raw = request->array(); + auto array = std::vector(); + array.reserve(array_raw.size()); + std::transform( + array_raw.begin(), + array_raw.end(), + std::back_inserter(array), + [](auto x) { + if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { + std::string message("value "); + message.append(std::to_string(x)); + message.append(" doesn't fit in datatype "); + message.append("int8_t"); + throw nidevice_grpc::ValueOutOfRangeException(message); + } + return static_cast(x); + }); + + size_t size = static_cast(request->array().size()); auto status = library->WriteArrayI8(session, control, array.data(), size); @@ -1222,12 +1220,10 @@ ::grpc::Status MonikerWriteArraySgl(void* data, google::protobuf::Arena& arena, auto session = function_data->session; auto control = function_data->control; - ArrayFloatData arrayfloatdata_message; - packedData.UnpackTo(&arrayfloatdata_message); - - auto data_array = arrayfloatdata_message.value(); - auto array = const_cast(arrayfloatdata_message.value().data()); - auto size = data_array.size(); + WriteArraySglStreamingRequest* request; + packedData.UnpackTo(request); + auto array = const_cast(request->array().data()); + size_t size = static_cast(request->array().size()); auto status = library->WriteArraySgl(session, control, array, size); @@ -1246,24 +1242,27 @@ ::grpc::Status MonikerWriteArrayU16(void* data, google::protobuf::Arena& arena, auto session = function_data->session; auto control = function_data->control; - ArrayU32Data arrayu32data_message; - packedData.UnpackTo(&arrayu32data_message); - - auto data_array = arrayu32data_message.value(); - auto array = std::vector(); - auto size = data_array.size(); - array.reserve(size); - std::transform( - data_array.begin(), - data_array.end(), - std::back_inserter(array), - [](auto x) { - if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { - std::string message("value " + std::to_string(x) + " doesn't fit in datatype uint16_t"); - throw nidevice_grpc::ValueOutOfRangeException(message); - } - return static_cast(x); - }); + WriteArrayU16StreamingRequest* request; + packedData.UnpackTo(request); + auto array_raw = request->array(); + auto array = std::vector(); + array.reserve(array_raw.size()); + std::transform( + array_raw.begin(), + array_raw.end(), + std::back_inserter(array), + [](auto x) { + if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { + std::string message("value "); + message.append(std::to_string(x)); + message.append(" doesn't fit in datatype "); + message.append("uint16_t"); + throw nidevice_grpc::ValueOutOfRangeException(message); + } + return static_cast(x); + }); + + size_t size = static_cast(request->array().size()); auto status = library->WriteArrayU16(session, control, array.data(), size); @@ -1282,12 +1281,10 @@ ::grpc::Status MonikerWriteArrayU32(void* data, google::protobuf::Arena& arena, auto session = function_data->session; auto control = function_data->control; - ArrayU32Data arrayu32data_message; - packedData.UnpackTo(&arrayu32data_message); - - auto data_array = arrayu32data_message.value(); - auto array = const_cast(arrayu32data_message.value().data()); - auto size = data_array.size(); + WriteArrayU32StreamingRequest* request; + packedData.UnpackTo(request); + auto array = const_cast(request->array().data()); + size_t size = static_cast(request->array().size()); auto status = library->WriteArrayU32(session, control, array, size); @@ -1306,12 +1303,10 @@ ::grpc::Status MonikerWriteArrayU64(void* data, google::protobuf::Arena& arena, auto session = function_data->session; auto control = function_data->control; - ArrayU64Data arrayu64data_message; - packedData.UnpackTo(&arrayu64data_message); - - auto data_array = arrayu64data_message.value(); - auto array = const_cast(arrayu64data_message.value().data()); - auto size = data_array.size(); + WriteArrayU64StreamingRequest* request; + packedData.UnpackTo(request); + auto array = const_cast(request->array().data()); + size_t size = static_cast(request->array().size()); auto status = library->WriteArrayU64(session, control, array, size); @@ -1330,24 +1325,27 @@ ::grpc::Status MonikerWriteArrayU8(void* data, google::protobuf::Arena& arena, g auto session = function_data->session; auto control = function_data->control; - ArrayU32Data arrayu32data_message; - packedData.UnpackTo(&arrayu32data_message); - - auto data_array = arrayu32data_message.value(); - auto array = std::vector(); - auto size = data_array.size(); - array.reserve(size); - std::transform( - data_array.begin(), - data_array.end(), - std::back_inserter(array), - [](auto x) { - if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { - std::string message("value " + std::to_string(x) + " doesn't fit in datatype uint8_t"); - throw nidevice_grpc::ValueOutOfRangeException(message); - } - return static_cast(x); - }); + WriteArrayU8StreamingRequest* request; + packedData.UnpackTo(request); + auto array_raw = request->array(); + auto array = std::vector(); + array.reserve(array_raw.size()); + std::transform( + array_raw.begin(), + array_raw.end(), + std::back_inserter(array), + [](auto x) { + if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { + std::string message("value "); + message.append(std::to_string(x)); + message.append(" doesn't fit in datatype "); + message.append("uint8_t"); + throw nidevice_grpc::ValueOutOfRangeException(message); + } + return static_cast(x); + }); + + size_t size = static_cast(request->array().size()); auto status = library->WriteArrayU8(session, control, array.data(), size); @@ -1366,9 +1364,9 @@ ::grpc::Status MonikerWriteBool(void* data, google::protobuf::Arena& arena, goog auto session = function_data->session; auto control = function_data->control; - BoolData booldata_message; - packedData.UnpackTo(&booldata_message); - auto value = booldata_message.value(); + WriteBoolStreamingRequest* request; + packedData.UnpackTo(request); + NiFpga_Bool value = request->value(); auto status = library->WriteBool(session, control, value); @@ -1387,9 +1385,9 @@ ::grpc::Status MonikerWriteDbl(void* data, google::protobuf::Arena& arena, googl auto session = function_data->session; auto control = function_data->control; - DoubleData doubledata_message; - packedData.UnpackTo(&doubledata_message); - auto value = doubledata_message.value(); + WriteDblStreamingRequest* request; + packedData.UnpackTo(request); + double value = request->value(); auto status = library->WriteDbl(session, control, value); @@ -1408,13 +1406,18 @@ ::grpc::Status MonikerWriteI16(void* data, google::protobuf::Arena& arena, googl auto session = function_data->session; auto control = function_data->control; - I32Data i32data_message; - packedData.UnpackTo(&i32data_message); - auto value = i32data_message.value(); - if (value < std::numeric_limits::min() || value > std::numeric_limits::max()) { - std::string message("value " + std::to_string(value) + " doesn't fit in datatype int16_t"); - throw nidevice_grpc::ValueOutOfRangeException(message); - } + WriteI16StreamingRequest* request; + packedData.UnpackTo(request); + auto value_raw = request->value(); + if (value_raw < std::numeric_limits::min() || value_raw > std::numeric_limits::max()) { + std::string message("value "); + message.append(std::to_string(value_raw)); + message.append(" doesn't fit in datatype "); + message.append("int16_t"); + throw nidevice_grpc::ValueOutOfRangeException(message); + } + auto value = static_cast(value_raw); + auto status = library->WriteI16(session, control, value); @@ -1433,9 +1436,9 @@ ::grpc::Status MonikerWriteI32(void* data, google::protobuf::Arena& arena, googl auto session = function_data->session; auto control = function_data->control; - I32Data i32data_message; - packedData.UnpackTo(&i32data_message); - auto value = i32data_message.value(); + WriteI32StreamingRequest* request; + packedData.UnpackTo(request); + int32_t value = request->value(); auto status = library->WriteI32(session, control, value); @@ -1454,9 +1457,9 @@ ::grpc::Status MonikerWriteI64(void* data, google::protobuf::Arena& arena, googl auto session = function_data->session; auto control = function_data->control; - I64Data i64data_message; - packedData.UnpackTo(&i64data_message); - auto value = i64data_message.value(); + WriteI64StreamingRequest* request; + packedData.UnpackTo(request); + int64_t value = request->value(); auto status = library->WriteI64(session, control, value); @@ -1475,13 +1478,18 @@ ::grpc::Status MonikerWriteI8(void* data, google::protobuf::Arena& arena, google auto session = function_data->session; auto control = function_data->control; - I32Data i32data_message; - packedData.UnpackTo(&i32data_message); - auto value = i32data_message.value(); - if (value < std::numeric_limits::min() || value > std::numeric_limits::max()) { - std::string message("value " + std::to_string(value) + " doesn't fit in datatype int8_t"); - throw nidevice_grpc::ValueOutOfRangeException(message); - } + WriteI8StreamingRequest* request; + packedData.UnpackTo(request); + auto value_raw = request->value(); + if (value_raw < std::numeric_limits::min() || value_raw > std::numeric_limits::max()) { + std::string message("value "); + message.append(std::to_string(value_raw)); + message.append(" doesn't fit in datatype "); + message.append("int8_t"); + throw nidevice_grpc::ValueOutOfRangeException(message); + } + auto value = static_cast(value_raw); + auto status = library->WriteI8(session, control, value); @@ -1500,9 +1508,9 @@ ::grpc::Status MonikerWriteSgl(void* data, google::protobuf::Arena& arena, googl auto session = function_data->session; auto control = function_data->control; - FloatData floatdata_message; - packedData.UnpackTo(&floatdata_message); - auto value = floatdata_message.value(); + WriteSglStreamingRequest* request; + packedData.UnpackTo(request); + float value = request->value(); auto status = library->WriteSgl(session, control, value); @@ -1521,13 +1529,18 @@ ::grpc::Status MonikerWriteU16(void* data, google::protobuf::Arena& arena, googl auto session = function_data->session; auto control = function_data->control; - U32Data u32data_message; - packedData.UnpackTo(&u32data_message); - auto value = u32data_message.value(); - if (value < std::numeric_limits::min() || value > std::numeric_limits::max()) { - std::string message("value " + std::to_string(value) + " doesn't fit in datatype uint16_t"); - throw nidevice_grpc::ValueOutOfRangeException(message); - } + WriteU16StreamingRequest* request; + packedData.UnpackTo(request); + auto value_raw = request->value(); + if (value_raw < std::numeric_limits::min() || value_raw > std::numeric_limits::max()) { + std::string message("value "); + message.append(std::to_string(value_raw)); + message.append(" doesn't fit in datatype "); + message.append("uint16_t"); + throw nidevice_grpc::ValueOutOfRangeException(message); + } + auto value = static_cast(value_raw); + auto status = library->WriteU16(session, control, value); @@ -1546,9 +1559,9 @@ ::grpc::Status MonikerWriteU32(void* data, google::protobuf::Arena& arena, googl auto session = function_data->session; auto control = function_data->control; - U32Data u32data_message; - packedData.UnpackTo(&u32data_message); - auto value = u32data_message.value(); + WriteU32StreamingRequest* request; + packedData.UnpackTo(request); + uint32_t value = request->value(); auto status = library->WriteU32(session, control, value); @@ -1567,9 +1580,9 @@ ::grpc::Status MonikerWriteU64(void* data, google::protobuf::Arena& arena, googl auto session = function_data->session; auto control = function_data->control; - U64Data u64data_message; - packedData.UnpackTo(&u64data_message); - auto value = u64data_message.value(); + WriteU64StreamingRequest* request; + packedData.UnpackTo(request); + uint64_t value = request->value(); auto status = library->WriteU64(session, control, value); @@ -1588,13 +1601,18 @@ ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google auto session = function_data->session; auto control = function_data->control; - U32Data u32data_message; - packedData.UnpackTo(&u32data_message); - auto value = u32data_message.value(); - if (value < std::numeric_limits::min() || value > std::numeric_limits::max()) { - std::string message("value " + std::to_string(value) + " doesn't fit in datatype uint8_t"); - throw nidevice_grpc::ValueOutOfRangeException(message); - } + WriteU8StreamingRequest* request; + packedData.UnpackTo(request); + auto value_raw = request->value(); + if (value_raw < std::numeric_limits::min() || value_raw > std::numeric_limits::max()) { + std::string message("value "); + message.append(std::to_string(value_raw)); + message.append(" doesn't fit in datatype "); + message.append("uint8_t"); + throw nidevice_grpc::ValueOutOfRangeException(message); + } + auto value = static_cast(value_raw); + auto status = library->WriteU8(session, control, value); diff --git a/source/codegen/common_helpers.py b/source/codegen/common_helpers.py index fdb42bb64..5e5c17d17 100644 --- a/source/codegen/common_helpers.py +++ b/source/codegen/common_helpers.py @@ -1292,3 +1292,11 @@ def get_non_streaming_input_parameters(parameters: List[dict]) -> List[dict]: else: params.append(param) return params + + +def extend_input_params_with_size_params(input_parameters: List[dict], function_metadata: dict): + """Return the input_parameters list with size parameters added to it.""" + for param in input_parameters: + size_param_name = get_size_param(param) + size_param = [p for p in function_metadata["parameters"] if p["name"] == size_param_name] + input_parameters.extend(size_param) diff --git a/source/codegen/metadata/nidaqmx/functions.py b/source/codegen/metadata/nidaqmx/functions.py index ec89562b3..bc7170054 100644 --- a/source/codegen/metadata/nidaqmx/functions.py +++ b/source/codegen/metadata/nidaqmx/functions.py @@ -24771,8 +24771,10 @@ { 'ctypes_data_type': 'numpy.float64', 'direction': 'in', + 'grpc_streaming_type': 'ArrayDoubleData', 'is_list': True, 'is_optional_in_python': False, + 'is_streaming_type': True, 'name': 'frequency', 'python_data_type': 'float', 'python_type_annotation': 'List[float]', @@ -24781,8 +24783,10 @@ { 'ctypes_data_type': 'numpy.float64', 'direction': 'in', + 'grpc_streaming_type': 'ArrayDoubleData', 'is_list': True, 'is_optional_in_python': False, + 'is_streaming_type': True, 'name': 'dutyCycle', 'python_data_type': 'float', 'python_type_annotation': 'List[float]', @@ -24791,7 +24795,9 @@ { 'ctypes_data_type': 'ctypes.c_int', 'direction': 'out', + 'grpc_streaming_type': 'I32Data', 'is_optional_in_python': False, + 'is_streaming_type': True, 'name': 'numSampsPerChanWritten', 'python_data_type': 'int', 'python_description': '', @@ -24814,7 +24820,8 @@ } ], 'python_codegen_method': 'CustomCode', - 'returns': 'int32' + 'returns': 'int32', + 'supports_streaming': True }, 'WriteCtrFreqScalar': { 'calling_convention': 'StdCall', @@ -24852,7 +24859,9 @@ { 'ctypes_data_type': 'ctypes.c_double', 'direction': 'in', + 'grpc_streaming_type': 'DoubleData', 'is_optional_in_python': False, + 'is_streaming_type': True, 'name': 'frequency', 'python_data_type': 'float', 'python_type_annotation': 'float', @@ -24861,7 +24870,9 @@ { 'ctypes_data_type': 'ctypes.c_double', 'direction': 'in', + 'grpc_streaming_type': 'DoubleData', 'is_optional_in_python': False, + 'is_streaming_type': True, 'name': 'dutyCycle', 'python_data_type': 'float', 'python_type_annotation': 'float', @@ -24882,7 +24893,8 @@ } ], 'python_codegen_method': 'CustomCode', - 'returns': 'int32' + 'returns': 'int32', + 'supports_streaming': True }, 'WriteCtrTicks': { 'calling_convention': 'StdCall', @@ -24941,8 +24953,10 @@ { 'ctypes_data_type': 'numpy.uint32', 'direction': 'in', + 'grpc_streaming_type': 'ArrayU32Data', 'is_list': True, 'is_optional_in_python': False, + 'is_streaming_type': True, 'name': 'highTicks', 'python_data_type': 'int', 'python_type_annotation': 'List[int]', @@ -24951,8 +24965,10 @@ { 'ctypes_data_type': 'numpy.uint32', 'direction': 'in', + 'grpc_streaming_type': 'ArrayU32Data', 'is_list': True, 'is_optional_in_python': False, + 'is_streaming_type': True, 'name': 'lowTicks', 'python_data_type': 'int', 'python_type_annotation': 'List[int]', @@ -24961,7 +24977,9 @@ { 'ctypes_data_type': 'ctypes.c_int', 'direction': 'out', + 'grpc_streaming_type': 'I32Data', 'is_optional_in_python': False, + 'is_streaming_type': True, 'name': 'numSampsPerChanWritten', 'python_data_type': 'int', 'python_description': '', @@ -24984,7 +25002,8 @@ } ], 'python_codegen_method': 'CustomCode', - 'returns': 'int32' + 'returns': 'int32', + 'supports_streaming': True }, 'WriteCtrTicksScalar': { 'calling_convention': 'StdCall', @@ -25022,6 +25041,8 @@ { 'ctypes_data_type': 'ctypes.c_uint32', 'direction': 'in', + 'grpc_streaming_type': 'U32Data', + 'is_streaming_type': True, 'name': 'highTicks', 'python_data_type': 'int', 'type': 'uInt32' @@ -25029,6 +25050,8 @@ { 'ctypes_data_type': 'ctypes.c_uint32', 'direction': 'in', + 'grpc_streaming_type': 'U32Data', + 'is_streaming_type': True, 'name': 'lowTicks', 'python_data_type': 'int', 'type': 'uInt32' @@ -25048,7 +25071,8 @@ } ], 'python_codegen_method': 'CustomCode', - 'returns': 'int32' + 'returns': 'int32', + 'supports_streaming': True }, 'WriteCtrTime': { 'calling_convention': 'StdCall', @@ -25107,8 +25131,10 @@ { 'ctypes_data_type': 'numpy.float64', 'direction': 'in', + 'grpc_streaming_type': 'ArrayDoubleData', 'is_list': True, 'is_optional_in_python': False, + 'is_streaming_type': True, 'name': 'highTime', 'python_data_type': 'float', 'python_type_annotation': 'List[float]', @@ -25117,8 +25143,10 @@ { 'ctypes_data_type': 'numpy.float64', 'direction': 'in', + 'grpc_streaming_type': 'ArrayDoubleData', 'is_list': True, 'is_optional_in_python': False, + 'is_streaming_type': True, 'name': 'lowTime', 'python_data_type': 'float', 'python_type_annotation': 'List[float]', @@ -25127,7 +25155,9 @@ { 'ctypes_data_type': 'ctypes.c_int', 'direction': 'out', + 'grpc_streaming_type': 'I32Data', 'is_optional_in_python': False, + 'is_streaming_type': True, 'name': 'numSampsPerChanWritten', 'python_data_type': 'int', 'python_description': '', @@ -25150,7 +25180,8 @@ } ], 'python_codegen_method': 'CustomCode', - 'returns': 'int32' + 'returns': 'int32', + 'supports_streaming': True }, 'WriteCtrTimeScalar': { 'calling_convention': 'StdCall', @@ -25188,7 +25219,9 @@ { 'ctypes_data_type': 'ctypes.c_double', 'direction': 'in', + 'grpc_streaming_type': 'DoubleData', 'is_optional_in_python': False, + 'is_streaming_type': True, 'name': 'highTime', 'python_data_type': 'float', 'python_type_annotation': 'float', @@ -25197,7 +25230,9 @@ { 'ctypes_data_type': 'ctypes.c_double', 'direction': 'in', + 'grpc_streaming_type': 'DoubleData', 'is_optional_in_python': False, + 'is_streaming_type': True, 'name': 'lowTime', 'python_data_type': 'float', 'python_type_annotation': 'float', @@ -25218,7 +25253,8 @@ } ], 'python_codegen_method': 'CustomCode', - 'returns': 'int32' + 'returns': 'int32', + 'supports_streaming': True }, 'WriteDigitalLines': { 'calling_convention': 'StdCall', @@ -25277,8 +25313,10 @@ { 'ctypes_data_type': 'numpy.bool', 'direction': 'in', + 'grpc_streaming_type': 'ArrayU8Data', 'is_list': True, 'is_optional_in_python': False, + 'is_streaming_type': True, 'name': 'writeArray', 'python_data_type': 'int', 'python_description': '', @@ -25288,7 +25326,9 @@ { 'ctypes_data_type': 'ctypes.c_int', 'direction': 'out', + 'grpc_streaming_type': 'I32Data', 'is_optional_in_python': False, + 'is_streaming_type': True, 'name': 'sampsPerChanWritten', 'python_data_type': 'int', 'python_description': '', @@ -25311,7 +25351,8 @@ } ], 'python_codegen_method': 'CustomCode', - 'returns': 'int32' + 'returns': 'int32', + 'supports_streaming': True }, 'WriteDigitalScalarU32': { 'calling_convention': 'StdCall', @@ -25630,8 +25671,10 @@ { 'ctypes_data_type': 'numpy.uint8', 'direction': 'in', + 'grpc_streaming_type': 'ArrayU8Data', 'is_list': True, 'is_optional_in_python': False, + 'is_streaming_type': True, 'name': 'writeArray', 'python_data_type': 'int', 'python_description': '', @@ -25641,7 +25684,9 @@ { 'ctypes_data_type': 'ctypes.c_int', 'direction': 'out', + 'grpc_streaming_type': 'I32Data', 'is_optional_in_python': False, + 'is_streaming_type': True, 'name': 'sampsPerChanWritten', 'python_data_type': 'int', 'python_description': '', @@ -25664,7 +25709,8 @@ } ], 'python_codegen_method': 'CustomCode', - 'returns': 'int32' + 'returns': 'int32', + 'supports_streaming': True }, 'WriteRaw': { 'calling_convention': 'StdCall', @@ -25712,7 +25758,9 @@ { 'ctypes_data_type': 'numpy.generic', 'direction': 'in', + 'grpc_streaming_type': 'ArrayU8Data', 'is_optional_in_python': False, + 'is_streaming_type': True, 'name': 'writeArray', 'python_data_type': 'dynamic', 'python_type_annotation': 'dynamic', @@ -25744,7 +25792,8 @@ } ], 'python_codegen_method': 'no', - 'returns': 'int32' + 'returns': 'int32', + 'supports_streaming': True }, 'WriteToTEDSFromArray': { 'calling_convention': 'StdCall', diff --git a/source/codegen/service_helpers.py b/source/codegen/service_helpers.py index 7ba907666..4edbe65b5 100644 --- a/source/codegen/service_helpers.py +++ b/source/codegen/service_helpers.py @@ -707,14 +707,3 @@ def get_protobuf_cpplib_type(grpc_type: str) -> str: return "std::string" return grpc_type - - -def get_size_param_name(streaming_param: dict) -> str: - """Get the size parameter name for the given streaming parameter. - - The size is only present for read arrays, which have an "out" direction. - """ - if common_helpers.is_array(streaming_param["type"]) and streaming_param["direction"] == "out": - return common_helpers.camel_to_snake(streaming_param["size"]["value"]) - else: - return None diff --git a/source/codegen/templates/service_helpers.mako b/source/codegen/templates/service_helpers.mako index 25acbabc3..6b1f25234 100644 --- a/source/codegen/templates/service_helpers.mako +++ b/source/codegen/templates/service_helpers.mako @@ -323,7 +323,7 @@ ${populate_response(function_data=function_data, parameters=parameters)}\ ${initialize_moniker_input_parameters(moniker_input_parameters)}\ ${initialize_output_params(output_parameters)}\ % if streaming_param and streaming_param['direction'] == 'in': -${streaming_handle_in_direction(streaming_param)}\ +${streaming_handle_in_direction(functions, function_name)}\ % endif auto status = library->${non_streaming_function_name}(${arg_string}); @@ -349,72 +349,16 @@ ${initialize_moniker_struct(struct_name, moniker_input_parameters, output_parame return ::grpc::Status::OK;\ -<%def name="streaming_handle_in_direction(streaming_param)"> +<%def name="streaming_handle_in_direction(functions, begin_function_name)"> <% - streaming_type = streaming_param['type'] - grpc_streaming_type = streaming_param['grpc_streaming_type'] - is_array = common_helpers.is_array(streaming_type) -%>\ - ${grpc_streaming_type} ${grpc_streaming_type.lower()}_message; - packedData.UnpackTo(&${grpc_streaming_type.lower()}_message); -% if is_array: - ${streaming_handle_in_direction_array(grpc_streaming_type, streaming_param)}\ -% else: - ${streaming_handle_in_direction_scaler(grpc_streaming_type, streaming_type, streaming_param)}\ -% endif - - -<%def name="streaming_handle_in_direction_scaler(grpc_streaming_type, streaming_type, streaming_param)">\ -<% - is_coerced = service_helpers.is_scalar_input_that_needs_coercion(streaming_param) -%>\ -auto value = ${grpc_streaming_type.lower()}_message.value(); -% if is_coerced: - if (value < std::numeric_limits<${streaming_type}>::min() || value > std::numeric_limits<${streaming_type}>::max()) { - std::string message("value " + std::to_string(value) + " doesn't fit in datatype ${streaming_type}"); - throw nidevice_grpc::ValueOutOfRangeException(message); - } -% endif - - -<%def name="streaming_handle_in_direction_array(grpc_streaming_type, streaming_param)"> -<% - is_coerced = service_helpers.is_input_array_that_needs_coercion(streaming_param) - c_element_type_that_needs_coercion = service_helpers.get_c_element_type_for_array_that_needs_coercion(streaming_param) - streaming_param_name = common_helpers.camel_to_snake(streaming_param['name']) - underlying_param_type = common_helpers.get_underlying_type_name(streaming_param["type"]) - underlying_param_type_with_no_qualifiers = underlying_param_type.replace("const ", "") - + request_message_type = common_helpers.get_data_moniker_request_message_type(begin_function_name) + non_streaming_function_name = begin_function_name.replace("Begin", "") + input_parameters, output_parameters = common_helpers.get_data_moniker_function_parameters(functions[non_streaming_function_name]) + common_helpers.extend_input_params_with_size_params(input_parameters, functions[non_streaming_function_name])\ %>\ -% if common_helpers.supports_standard_copy_conversion_routines(streaming_param): - auto data_array = ${grpc_streaming_type.lower()}_message.value(); - std::vector<${underlying_param_type}> ${streaming_param_name}(data_array.begin(), data_array.end()); - auto size = data_array.size(); -% elif is_coerced: - auto data_array = ${grpc_streaming_type.lower()}_message.value(); - auto ${streaming_param_name} = std::vector<${c_element_type_that_needs_coercion}>(); - auto size = data_array.size(); - ${streaming_param_name}.reserve(size); - std::transform( - data_array.begin(), - data_array.end(), - std::back_inserter(${streaming_param_name}), - [](auto x) { - if (x < std::numeric_limits<${c_element_type_that_needs_coercion}>::min() || x > std::numeric_limits<${c_element_type_that_needs_coercion}>::max()) { - std::string message("value " + std::to_string(x) + " doesn't fit in datatype ${c_element_type_that_needs_coercion}"); - throw nidevice_grpc::ValueOutOfRangeException(message); - } - return static_cast<${c_element_type_that_needs_coercion}>(x); - }); -% else: - auto data_array = ${grpc_streaming_type.lower()}_message.value(); -% if common_helpers.is_driver_typedef_with_same_size_but_different_qualifiers(underlying_param_type_with_no_qualifiers): - auto ${streaming_param_name} = reinterpret_cast<${underlying_param_type}*>(${grpc_streaming_type.lower()}_message.value().data()); -% else: - auto ${streaming_param_name} = const_cast<${underlying_param_type}*>(${grpc_streaming_type.lower()}_message.value().data()); -% endif - auto size = data_array.size(); -% endif + ${request_message_type}* request; + packedData.UnpackTo(request); +${initialize_input_params(non_streaming_function_name, input_parameters)}\ <%def name="populate_moniker_response_for_out_functions(output_parameters, streaming_param)">\ @@ -457,7 +401,7 @@ ${set_response_values(output_parameters=output_parameters, init_method=false)}\ % for param in output_array_params: <% grpc_field_name = common_helpers.get_grpc_field_name(param) - size_param_name = service_helpers.get_size_param_name(param) + size_param_name = common_helpers.camel_to_snake(common_helpers.get_size_param(param)) %>\ % if common_helpers.is_string_arg(param): data->response.mutable_${grpc_field_name}()->reserve(request->${size_param_name}()); From d3ea52a4b552d670e68d6e21659dbf1a27d2e1ee Mon Sep 17 00:00:00 2001 From: Raghav Rawat Date: Tue, 26 Nov 2024 19:16:23 +0530 Subject: [PATCH 19/25] merged latest main --- generated/nidaqmx/nidaqmx.proto | 92 +- generated/nidaqmx/nidaqmx_service.cpp | 40650 ++++++++-------- generated/nifpga/nifpga.proto | 132 +- generated/nifpga/nifpga_service.cpp | 9869 ++-- source/codegen/common_helpers.py | 4 +- .../ni_fake_fpga_streaming_tests.cpp | 85 +- 6 files changed, 25539 insertions(+), 25293 deletions(-) diff --git a/generated/nidaqmx/nidaqmx.proto b/generated/nidaqmx/nidaqmx.proto index 75d0eed40..abfc5f4f3 100644 --- a/generated/nidaqmx/nidaqmx.proto +++ b/generated/nidaqmx/nidaqmx.proto @@ -8530,7 +8530,7 @@ message BeginReadAnalogF64Response { ni.data_monikers.Moniker moniker = 2; } -message ReadAnalogF64StreamingResponse { +message MonikerReadAnalogF64Response { int32 status = 1; repeated double read_array = 2; int32 samps_per_chan_read = 3; @@ -8556,7 +8556,7 @@ message BeginReadAnalogScalarF64Response { ni.data_monikers.Moniker moniker = 2; } -message ReadAnalogScalarF64StreamingResponse { +message MonikerReadAnalogScalarF64Response { int32 status = 1; double value = 2; } @@ -8594,7 +8594,7 @@ message BeginReadBinaryI16Response { ni.data_monikers.Moniker moniker = 2; } -message ReadBinaryI16StreamingResponse { +message MonikerReadBinaryI16Response { int32 status = 1; repeated int32 read_array = 2; int32 samps_per_chan_read = 3; @@ -8633,7 +8633,7 @@ message BeginReadBinaryI32Response { ni.data_monikers.Moniker moniker = 2; } -message ReadBinaryI32StreamingResponse { +message MonikerReadBinaryI32Response { int32 status = 1; repeated int32 read_array = 2; int32 samps_per_chan_read = 3; @@ -8672,7 +8672,7 @@ message BeginReadBinaryU16Response { ni.data_monikers.Moniker moniker = 2; } -message ReadBinaryU16StreamingResponse { +message MonikerReadBinaryU16Response { int32 status = 1; repeated uint32 read_array = 2; int32 samps_per_chan_read = 3; @@ -8711,7 +8711,7 @@ message BeginReadBinaryU32Response { ni.data_monikers.Moniker moniker = 2; } -message ReadBinaryU32StreamingResponse { +message MonikerReadBinaryU32Response { int32 status = 1; repeated uint32 read_array = 2; int32 samps_per_chan_read = 3; @@ -8742,7 +8742,7 @@ message BeginReadCounterF64Response { ni.data_monikers.Moniker moniker = 2; } -message ReadCounterF64StreamingResponse { +message MonikerReadCounterF64Response { int32 status = 1; repeated double read_array = 2; int32 samps_per_chan_read = 3; @@ -8781,7 +8781,7 @@ message BeginReadCounterF64ExResponse { ni.data_monikers.Moniker moniker = 2; } -message ReadCounterF64ExStreamingResponse { +message MonikerReadCounterF64ExResponse { int32 status = 1; repeated double read_array = 2; int32 samps_per_chan_read = 3; @@ -8807,7 +8807,7 @@ message BeginReadCounterScalarF64Response { ni.data_monikers.Moniker moniker = 2; } -message ReadCounterScalarF64StreamingResponse { +message MonikerReadCounterScalarF64Response { int32 status = 1; double value = 2; } @@ -8832,7 +8832,7 @@ message BeginReadCounterScalarU32Response { ni.data_monikers.Moniker moniker = 2; } -message ReadCounterScalarU32StreamingResponse { +message MonikerReadCounterScalarU32Response { int32 status = 1; uint32 value = 2; } @@ -8862,7 +8862,7 @@ message BeginReadCounterU32Response { ni.data_monikers.Moniker moniker = 2; } -message ReadCounterU32StreamingResponse { +message MonikerReadCounterU32Response { int32 status = 1; repeated uint32 read_array = 2; int32 samps_per_chan_read = 3; @@ -8901,7 +8901,7 @@ message BeginReadCounterU32ExResponse { ni.data_monikers.Moniker moniker = 2; } -message ReadCounterU32ExStreamingResponse { +message MonikerReadCounterU32ExResponse { int32 status = 1; repeated uint32 read_array = 2; int32 samps_per_chan_read = 3; @@ -8941,7 +8941,7 @@ message BeginReadCtrFreqResponse { ni.data_monikers.Moniker moniker = 2; } -message ReadCtrFreqStreamingResponse { +message MonikerReadCtrFreqResponse { int32 status = 1; repeated double read_array_frequency = 2; repeated double read_array_duty_cycle = 3; @@ -8969,7 +8969,7 @@ message BeginReadCtrFreqScalarResponse { ni.data_monikers.Moniker moniker = 2; } -message ReadCtrFreqScalarStreamingResponse { +message MonikerReadCtrFreqScalarResponse { int32 status = 1; double frequency = 2; double duty_cycle = 3; @@ -9009,7 +9009,7 @@ message BeginReadCtrTicksResponse { ni.data_monikers.Moniker moniker = 2; } -message ReadCtrTicksStreamingResponse { +message MonikerReadCtrTicksResponse { int32 status = 1; repeated uint32 read_array_high_ticks = 2; repeated uint32 read_array_low_ticks = 3; @@ -9037,7 +9037,7 @@ message BeginReadCtrTicksScalarResponse { ni.data_monikers.Moniker moniker = 2; } -message ReadCtrTicksScalarStreamingResponse { +message MonikerReadCtrTicksScalarResponse { int32 status = 1; uint32 high_ticks = 2; uint32 low_ticks = 3; @@ -9077,7 +9077,7 @@ message BeginReadCtrTimeResponse { ni.data_monikers.Moniker moniker = 2; } -message ReadCtrTimeStreamingResponse { +message MonikerReadCtrTimeResponse { int32 status = 1; repeated double read_array_high_time = 2; repeated double read_array_low_time = 3; @@ -9105,7 +9105,7 @@ message BeginReadCtrTimeScalarResponse { ni.data_monikers.Moniker moniker = 2; } -message ReadCtrTimeScalarStreamingResponse { +message MonikerReadCtrTimeScalarResponse { int32 status = 1; double high_time = 2; double low_time = 3; @@ -9146,7 +9146,7 @@ message BeginReadDigitalLinesResponse { ni.data_monikers.Moniker moniker = 3; } -message ReadDigitalLinesStreamingResponse { +message MonikerReadDigitalLinesResponse { int32 status = 1; bytes read_array = 2; int32 samps_per_chan_read = 3; @@ -9173,7 +9173,7 @@ message BeginReadDigitalScalarU32Response { ni.data_monikers.Moniker moniker = 2; } -message ReadDigitalScalarU32StreamingResponse { +message MonikerReadDigitalScalarU32Response { int32 status = 1; uint32 value = 2; } @@ -9211,7 +9211,7 @@ message BeginReadDigitalU16Response { ni.data_monikers.Moniker moniker = 2; } -message ReadDigitalU16StreamingResponse { +message MonikerReadDigitalU16Response { int32 status = 1; repeated uint32 read_array = 2; int32 samps_per_chan_read = 3; @@ -9250,7 +9250,7 @@ message BeginReadDigitalU32Response { ni.data_monikers.Moniker moniker = 2; } -message ReadDigitalU32StreamingResponse { +message MonikerReadDigitalU32Response { int32 status = 1; repeated uint32 read_array = 2; int32 samps_per_chan_read = 3; @@ -9289,7 +9289,7 @@ message BeginReadDigitalU8Response { ni.data_monikers.Moniker moniker = 2; } -message ReadDigitalU8StreamingResponse { +message MonikerReadDigitalU8Response { int32 status = 1; bytes read_array = 2; int32 samps_per_chan_read = 3; @@ -9329,7 +9329,7 @@ message BeginReadPowerBinaryI16Response { ni.data_monikers.Moniker moniker = 2; } -message ReadPowerBinaryI16StreamingResponse { +message MonikerReadPowerBinaryI16Response { int32 status = 1; repeated int32 read_array_voltage = 2; repeated int32 read_array_current = 3; @@ -9370,7 +9370,7 @@ message BeginReadPowerF64Response { ni.data_monikers.Moniker moniker = 2; } -message ReadPowerF64StreamingResponse { +message MonikerReadPowerF64Response { int32 status = 1; repeated double read_array_voltage = 2; repeated double read_array_current = 3; @@ -9398,7 +9398,7 @@ message BeginReadPowerScalarF64Response { ni.data_monikers.Moniker moniker = 2; } -message ReadPowerScalarF64StreamingResponse { +message MonikerReadPowerScalarF64Response { int32 status = 1; double voltage = 2; double current = 3; @@ -9430,7 +9430,7 @@ message BeginReadRawResponse { ni.data_monikers.Moniker moniker = 2; } -message ReadRawStreamingResponse { +message MonikerReadRawResponse { int32 status = 1; bytes read_array = 2; int32 samps_read = 3; @@ -10747,7 +10747,7 @@ message BeginWaitForNextSampleClockResponse { ni.data_monikers.Moniker moniker = 2; } -message WaitForNextSampleClockStreamingResponse { +message MonikerWaitForNextSampleClockResponse { int32 status = 1; bool is_late = 2; } @@ -10808,11 +10808,11 @@ message BeginWriteAnalogF64Response { ni.data_monikers.Moniker moniker = 2; } -message WriteAnalogF64StreamingRequest { +message MonikerWriteAnalogF64Request { repeated double write_array = 1; } -message WriteAnalogF64StreamingResponse { +message MonikerWriteAnalogF64Response { int32 status = 1; int32 samps_per_chan_written = 2; } @@ -10839,11 +10839,11 @@ message BeginWriteAnalogScalarF64Response { ni.data_monikers.Moniker moniker = 2; } -message WriteAnalogScalarF64StreamingRequest { +message MonikerWriteAnalogScalarF64Request { double value = 1; } -message WriteAnalogScalarF64StreamingResponse { +message MonikerWriteAnalogScalarF64Response { int32 status = 1; } @@ -10880,11 +10880,11 @@ message BeginWriteBinaryI16Response { ni.data_monikers.Moniker moniker = 2; } -message WriteBinaryI16StreamingRequest { +message MonikerWriteBinaryI16Request { repeated int32 write_array = 1; } -message WriteBinaryI16StreamingResponse { +message MonikerWriteBinaryI16Response { int32 status = 1; int32 samps_per_chan_written = 2; } @@ -10922,11 +10922,11 @@ message BeginWriteBinaryI32Response { ni.data_monikers.Moniker moniker = 2; } -message WriteBinaryI32StreamingRequest { +message MonikerWriteBinaryI32Request { repeated int32 write_array = 1; } -message WriteBinaryI32StreamingResponse { +message MonikerWriteBinaryI32Response { int32 status = 1; int32 samps_per_chan_written = 2; } @@ -10964,11 +10964,11 @@ message BeginWriteBinaryU16Response { ni.data_monikers.Moniker moniker = 2; } -message WriteBinaryU16StreamingRequest { +message MonikerWriteBinaryU16Request { repeated uint32 write_array = 1; } -message WriteBinaryU16StreamingResponse { +message MonikerWriteBinaryU16Response { int32 status = 1; int32 samps_per_chan_written = 2; } @@ -11006,11 +11006,11 @@ message BeginWriteBinaryU32Response { ni.data_monikers.Moniker moniker = 2; } -message WriteBinaryU32StreamingRequest { +message MonikerWriteBinaryU32Request { repeated uint32 write_array = 1; } -message WriteBinaryU32StreamingResponse { +message MonikerWriteBinaryU32Response { int32 status = 1; int32 samps_per_chan_written = 2; } @@ -11144,11 +11144,11 @@ message BeginWriteDigitalScalarU32Response { ni.data_monikers.Moniker moniker = 2; } -message WriteDigitalScalarU32StreamingRequest { +message MonikerWriteDigitalScalarU32Request { uint32 value = 1; } -message WriteDigitalScalarU32StreamingResponse { +message MonikerWriteDigitalScalarU32Response { int32 status = 1; } @@ -11185,11 +11185,11 @@ message BeginWriteDigitalU16Response { ni.data_monikers.Moniker moniker = 2; } -message WriteDigitalU16StreamingRequest { +message MonikerWriteDigitalU16Request { repeated uint32 write_array = 1; } -message WriteDigitalU16StreamingResponse { +message MonikerWriteDigitalU16Response { int32 status = 1; int32 samps_per_chan_written = 2; } @@ -11227,11 +11227,11 @@ message BeginWriteDigitalU32Response { ni.data_monikers.Moniker moniker = 2; } -message WriteDigitalU32StreamingRequest { +message MonikerWriteDigitalU32Request { repeated uint32 write_array = 1; } -message WriteDigitalU32StreamingResponse { +message MonikerWriteDigitalU32Response { int32 status = 1; int32 samps_per_chan_written = 2; } diff --git a/generated/nidaqmx/nidaqmx_service.cpp b/generated/nidaqmx/nidaqmx_service.cpp index f02fa2647..856dc772e 100644 --- a/generated/nidaqmx/nidaqmx_service.cpp +++ b/generated/nidaqmx/nidaqmx_service.cpp @@ -6,1340 +6,1433 @@ //--------------------------------------------------------------------- #include "nidaqmx_service.h" -#include -#include -#include -#include - -#include +#include #include #include -#include +#include #include - +#include +#include +#include #include "nidaqmx_library.h" +#include namespace nidaqmx_grpc { -using nidevice_grpc::converters::allocate_output_storage; -using nidevice_grpc::converters::calculate_linked_array_size; -using nidevice_grpc::converters::convert_from_grpc; -using nidevice_grpc::converters::convert_to_grpc; -using nidevice_grpc::converters::MatchState; - -struct MonikerReadAnalogF64Data { - TaskHandle task; - int32 num_samps_per_chan; - float64 timeout; - int32 fill_mode; - uInt32 array_size_in_samps; - bool32* reserved; - nidaqmx_grpc::ReadAnalogF64StreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerReadAnalogScalarF64Data { - TaskHandle task; - float64 timeout; - bool32* reserved; - nidaqmx_grpc::ReadAnalogScalarF64StreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerReadBinaryI16Data { - TaskHandle task; - int32 num_samps_per_chan; - float64 timeout; - int32 fill_mode; - uInt32 array_size_in_samps; - bool32* reserved; - nidaqmx_grpc::ReadBinaryI16StreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerReadBinaryI32Data { - TaskHandle task; - int32 num_samps_per_chan; - float64 timeout; - int32 fill_mode; - uInt32 array_size_in_samps; - bool32* reserved; - nidaqmx_grpc::ReadBinaryI32StreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerReadBinaryU16Data { - TaskHandle task; - int32 num_samps_per_chan; - float64 timeout; - int32 fill_mode; - uInt32 array_size_in_samps; - bool32* reserved; - nidaqmx_grpc::ReadBinaryU16StreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerReadBinaryU32Data { - TaskHandle task; - int32 num_samps_per_chan; - float64 timeout; - int32 fill_mode; - uInt32 array_size_in_samps; - bool32* reserved; - nidaqmx_grpc::ReadBinaryU32StreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerReadCounterF64Data { - TaskHandle task; - int32 num_samps_per_chan; - float64 timeout; - uInt32 array_size_in_samps; - bool32* reserved; - nidaqmx_grpc::ReadCounterF64StreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerReadCounterF64ExData { - TaskHandle task; - int32 num_samps_per_chan; - float64 timeout; - int32 fill_mode; - uInt32 array_size_in_samps; - bool32* reserved; - nidaqmx_grpc::ReadCounterF64ExStreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerReadCounterScalarF64Data { - TaskHandle task; - float64 timeout; - bool32* reserved; - nidaqmx_grpc::ReadCounterScalarF64StreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerReadCounterScalarU32Data { - TaskHandle task; - float64 timeout; - bool32* reserved; - nidaqmx_grpc::ReadCounterScalarU32StreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerReadCounterU32Data { - TaskHandle task; - int32 num_samps_per_chan; - float64 timeout; - uInt32 array_size_in_samps; - bool32* reserved; - nidaqmx_grpc::ReadCounterU32StreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerReadCounterU32ExData { - TaskHandle task; - int32 num_samps_per_chan; - float64 timeout; - int32 fill_mode; - uInt32 array_size_in_samps; - bool32* reserved; - nidaqmx_grpc::ReadCounterU32ExStreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerReadCtrFreqData { - TaskHandle task; - int32 num_samps_per_chan; - float64 timeout; - int32 interleaved; - uInt32 array_size_in_samps; - bool32* reserved; - nidaqmx_grpc::ReadCtrFreqStreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerReadCtrFreqScalarData { - TaskHandle task; - float64 timeout; - bool32* reserved; - nidaqmx_grpc::ReadCtrFreqScalarStreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerReadCtrTicksData { - TaskHandle task; - int32 num_samps_per_chan; - float64 timeout; - int32 interleaved; - uInt32 array_size_in_samps; - bool32* reserved; - nidaqmx_grpc::ReadCtrTicksStreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerReadCtrTicksScalarData { - TaskHandle task; - float64 timeout; - bool32* reserved; - nidaqmx_grpc::ReadCtrTicksScalarStreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerReadCtrTimeData { - TaskHandle task; - int32 num_samps_per_chan; - float64 timeout; - int32 interleaved; - uInt32 array_size_in_samps; - bool32* reserved; - nidaqmx_grpc::ReadCtrTimeStreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerReadCtrTimeScalarData { - TaskHandle task; - float64 timeout; - bool32* reserved; - nidaqmx_grpc::ReadCtrTimeScalarStreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerReadDigitalLinesData { - TaskHandle task; - int32 num_samps_per_chan; - float64 timeout; - int32 fill_mode; - uInt32 array_size_in_bytes; - bool32* reserved; - nidaqmx_grpc::ReadDigitalLinesStreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerReadDigitalScalarU32Data { - TaskHandle task; - float64 timeout; - bool32* reserved; - nidaqmx_grpc::ReadDigitalScalarU32StreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerReadDigitalU16Data { - TaskHandle task; - int32 num_samps_per_chan; - float64 timeout; - int32 fill_mode; - uInt32 array_size_in_samps; - bool32* reserved; - nidaqmx_grpc::ReadDigitalU16StreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerReadDigitalU32Data { - TaskHandle task; - int32 num_samps_per_chan; - float64 timeout; - int32 fill_mode; - uInt32 array_size_in_samps; - bool32* reserved; - nidaqmx_grpc::ReadDigitalU32StreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerReadDigitalU8Data { - TaskHandle task; - int32 num_samps_per_chan; - float64 timeout; - int32 fill_mode; - uInt32 array_size_in_samps; - bool32* reserved; - nidaqmx_grpc::ReadDigitalU8StreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerReadPowerBinaryI16Data { - TaskHandle task; - int32 num_samps_per_chan; - float64 timeout; - int32 fill_mode; - uInt32 array_size_in_samps; - bool32* reserved; - nidaqmx_grpc::ReadPowerBinaryI16StreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerReadPowerF64Data { - TaskHandle task; - int32 num_samps_per_chan; - float64 timeout; - int32 fill_mode; - uInt32 array_size_in_samps; - bool32* reserved; - nidaqmx_grpc::ReadPowerF64StreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerReadPowerScalarF64Data { - TaskHandle task; - float64 timeout; - bool32* reserved; - nidaqmx_grpc::ReadPowerScalarF64StreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerReadRawData { - TaskHandle task; - int32 num_samps_per_chan; - float64 timeout; - uInt32 array_size_in_bytes; - bool32* reserved; - nidaqmx_grpc::ReadRawStreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerWaitForNextSampleClockData { - TaskHandle task; - float64 timeout; - nidaqmx_grpc::WaitForNextSampleClockStreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerWriteAnalogF64Data { - TaskHandle task; - int32 num_samps_per_chan; - bool32 auto_start; - float64 timeout; - int32 data_layout; - bool32* reserved; - nidaqmx_grpc::WriteAnalogF64StreamingRequest request; - nidaqmx_grpc::WriteAnalogF64StreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerWriteAnalogScalarF64Data { - TaskHandle task; - bool32 auto_start; - float64 timeout; - bool32* reserved; - nidaqmx_grpc::WriteAnalogScalarF64StreamingRequest request; - nidaqmx_grpc::WriteAnalogScalarF64StreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerWriteBinaryI16Data { - TaskHandle task; - int32 num_samps_per_chan; - bool32 auto_start; - float64 timeout; - int32 data_layout; - bool32* reserved; - nidaqmx_grpc::WriteBinaryI16StreamingRequest request; - nidaqmx_grpc::WriteBinaryI16StreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerWriteBinaryI32Data { - TaskHandle task; - int32 num_samps_per_chan; - bool32 auto_start; - float64 timeout; - int32 data_layout; - bool32* reserved; - nidaqmx_grpc::WriteBinaryI32StreamingRequest request; - nidaqmx_grpc::WriteBinaryI32StreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerWriteBinaryU16Data { - TaskHandle task; - int32 num_samps_per_chan; - bool32 auto_start; - float64 timeout; - int32 data_layout; - bool32* reserved; - nidaqmx_grpc::WriteBinaryU16StreamingRequest request; - nidaqmx_grpc::WriteBinaryU16StreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerWriteBinaryU32Data { - TaskHandle task; - int32 num_samps_per_chan; - bool32 auto_start; - float64 timeout; - int32 data_layout; - bool32* reserved; - nidaqmx_grpc::WriteBinaryU32StreamingRequest request; - nidaqmx_grpc::WriteBinaryU32StreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerWriteDigitalScalarU32Data { - TaskHandle task; - bool32 auto_start; - float64 timeout; - bool32* reserved; - nidaqmx_grpc::WriteDigitalScalarU32StreamingRequest request; - nidaqmx_grpc::WriteDigitalScalarU32StreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerWriteDigitalU16Data { - TaskHandle task; - int32 num_samps_per_chan; - bool32 auto_start; - float64 timeout; - int32 data_layout; - bool32* reserved; - nidaqmx_grpc::WriteDigitalU16StreamingRequest request; - nidaqmx_grpc::WriteDigitalU16StreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerWriteDigitalU32Data { - TaskHandle task; - int32 num_samps_per_chan; - bool32 auto_start; - float64 timeout; - int32 data_layout; - bool32* reserved; - nidaqmx_grpc::WriteDigitalU32StreamingRequest request; - nidaqmx_grpc::WriteDigitalU32StreamingResponse response; - std::shared_ptr library; -}; - -const auto kErrorReadBufferTooSmall = -200229; -const auto kWarningCAPIStringTruncatedToFitBuffer = 200026; - -NiDAQmxService::NiDAQmxService( - LibrarySharedPtr library, - ResourceRepositorySharedPtr resource_repository, - const NiDAQmxFeatureToggles& feature_toggles) - : library_(library), - session_repository_(resource_repository), - feature_toggles_(feature_toggles) -{ -} + using nidevice_grpc::converters::allocate_output_storage; + using nidevice_grpc::converters::calculate_linked_array_size; + using nidevice_grpc::converters::convert_from_grpc; + using nidevice_grpc::converters::convert_to_grpc; + using nidevice_grpc::converters::MatchState; + + struct MonikerReadAnalogF64Data + { + TaskHandle task; + int32 num_samps_per_chan; + float64 timeout; + int32 fill_mode; + uInt32 array_size_in_samps; + bool32* reserved; + nidaqmx_grpc::MonikerReadAnalogF64Response response; + std::shared_ptr library; + }; -NiDAQmxService::~NiDAQmxService() -{ -} + struct MonikerReadAnalogScalarF64Data + { + TaskHandle task; + float64 timeout; + bool32* reserved; + nidaqmx_grpc::MonikerReadAnalogScalarF64Response response; + std::shared_ptr library; + }; -// 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; -} + struct MonikerReadBinaryI16Data + { + TaskHandle task; + int32 num_samps_per_chan; + float64 timeout; + int32 fill_mode; + uInt32 array_size_in_samps; + bool32* reserved; + nidaqmx_grpc::MonikerReadBinaryI16Response response; + std::shared_ptr library; + }; -void RegisterMonikerEndpoints() -{ - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadAnalogF64", MonikerReadAnalogF64); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadAnalogScalarF64", MonikerReadAnalogScalarF64); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadBinaryI16", MonikerReadBinaryI16); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadBinaryI32", MonikerReadBinaryI32); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadBinaryU16", MonikerReadBinaryU16); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadBinaryU32", MonikerReadBinaryU32); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadCounterF64", MonikerReadCounterF64); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadCounterF64Ex", MonikerReadCounterF64Ex); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadCounterScalarF64", MonikerReadCounterScalarF64); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadCounterScalarU32", MonikerReadCounterScalarU32); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadCounterU32", MonikerReadCounterU32); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadCounterU32Ex", MonikerReadCounterU32Ex); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadCtrFreq", MonikerReadCtrFreq); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadCtrFreqScalar", MonikerReadCtrFreqScalar); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadCtrTicks", MonikerReadCtrTicks); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadCtrTicksScalar", MonikerReadCtrTicksScalar); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadCtrTime", MonikerReadCtrTime); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadCtrTimeScalar", MonikerReadCtrTimeScalar); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadDigitalLines", MonikerReadDigitalLines); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadDigitalScalarU32", MonikerReadDigitalScalarU32); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadDigitalU16", MonikerReadDigitalU16); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadDigitalU32", MonikerReadDigitalU32); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadDigitalU8", MonikerReadDigitalU8); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadPowerBinaryI16", MonikerReadPowerBinaryI16); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadPowerF64", MonikerReadPowerF64); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadPowerScalarF64", MonikerReadPowerScalarF64); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadRaw", MonikerReadRaw); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWaitForNextSampleClock", MonikerWaitForNextSampleClock); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteAnalogF64", MonikerWriteAnalogF64); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteAnalogScalarF64", MonikerWriteAnalogScalarF64); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteBinaryI16", MonikerWriteBinaryI16); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteBinaryI32", MonikerWriteBinaryI32); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteBinaryU16", MonikerWriteBinaryU16); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteBinaryU32", MonikerWriteBinaryU32); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteDigitalScalarU32", MonikerWriteDigitalScalarU32); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteDigitalU16", MonikerWriteDigitalU16); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteDigitalU32", MonikerWriteDigitalU32); -} + struct MonikerReadBinaryI32Data + { + TaskHandle task; + int32 num_samps_per_chan; + float64 timeout; + int32 fill_mode; + uInt32 array_size_in_samps; + bool32* reserved; + nidaqmx_grpc::MonikerReadBinaryI32Response response; + std::shared_ptr library; + }; + + struct MonikerReadBinaryU16Data + { + TaskHandle task; + int32 num_samps_per_chan; + float64 timeout; + int32 fill_mode; + uInt32 array_size_in_samps; + bool32* reserved; + nidaqmx_grpc::MonikerReadBinaryU16Response response; + std::shared_ptr library; + }; + + struct MonikerReadBinaryU32Data + { + TaskHandle task; + int32 num_samps_per_chan; + float64 timeout; + int32 fill_mode; + uInt32 array_size_in_samps; + bool32* reserved; + nidaqmx_grpc::MonikerReadBinaryU32Response response; + std::shared_ptr library; + }; + + struct MonikerReadCounterF64Data + { + TaskHandle task; + int32 num_samps_per_chan; + float64 timeout; + uInt32 array_size_in_samps; + bool32* reserved; + nidaqmx_grpc::MonikerReadCounterF64Response response; + std::shared_ptr library; + }; + + struct MonikerReadCounterF64ExData + { + TaskHandle task; + int32 num_samps_per_chan; + float64 timeout; + int32 fill_mode; + uInt32 array_size_in_samps; + bool32* reserved; + nidaqmx_grpc::MonikerReadCounterF64ExResponse response; + std::shared_ptr library; + }; + + struct MonikerReadCounterScalarF64Data + { + TaskHandle task; + float64 timeout; + bool32* reserved; + nidaqmx_grpc::MonikerReadCounterScalarF64Response response; + std::shared_ptr library; + }; + + struct MonikerReadCounterScalarU32Data + { + TaskHandle task; + float64 timeout; + bool32* reserved; + nidaqmx_grpc::MonikerReadCounterScalarU32Response response; + std::shared_ptr library; + }; + + struct MonikerReadCounterU32Data + { + TaskHandle task; + int32 num_samps_per_chan; + float64 timeout; + uInt32 array_size_in_samps; + bool32* reserved; + nidaqmx_grpc::MonikerReadCounterU32Response response; + std::shared_ptr library; + }; + + struct MonikerReadCounterU32ExData + { + TaskHandle task; + int32 num_samps_per_chan; + float64 timeout; + int32 fill_mode; + uInt32 array_size_in_samps; + bool32* reserved; + nidaqmx_grpc::MonikerReadCounterU32ExResponse response; + std::shared_ptr library; + }; + + struct MonikerReadCtrFreqData + { + TaskHandle task; + int32 num_samps_per_chan; + float64 timeout; + int32 interleaved; + uInt32 array_size_in_samps; + bool32* reserved; + nidaqmx_grpc::MonikerReadCtrFreqResponse response; + std::shared_ptr library; + }; + + struct MonikerReadCtrFreqScalarData + { + TaskHandle task; + float64 timeout; + bool32* reserved; + nidaqmx_grpc::MonikerReadCtrFreqScalarResponse response; + std::shared_ptr library; + }; + + struct MonikerReadCtrTicksData + { + TaskHandle task; + int32 num_samps_per_chan; + float64 timeout; + int32 interleaved; + uInt32 array_size_in_samps; + bool32* reserved; + nidaqmx_grpc::MonikerReadCtrTicksResponse response; + std::shared_ptr library; + }; + + struct MonikerReadCtrTicksScalarData + { + TaskHandle task; + float64 timeout; + bool32* reserved; + nidaqmx_grpc::MonikerReadCtrTicksScalarResponse response; + std::shared_ptr library; + }; + + struct MonikerReadCtrTimeData + { + TaskHandle task; + int32 num_samps_per_chan; + float64 timeout; + int32 interleaved; + uInt32 array_size_in_samps; + bool32* reserved; + nidaqmx_grpc::MonikerReadCtrTimeResponse response; + std::shared_ptr library; + }; + + struct MonikerReadCtrTimeScalarData + { + TaskHandle task; + float64 timeout; + bool32* reserved; + nidaqmx_grpc::MonikerReadCtrTimeScalarResponse response; + std::shared_ptr library; + }; + + struct MonikerReadDigitalLinesData + { + TaskHandle task; + int32 num_samps_per_chan; + float64 timeout; + int32 fill_mode; + uInt32 array_size_in_bytes; + bool32* reserved; + nidaqmx_grpc::MonikerReadDigitalLinesResponse response; + std::shared_ptr library; + }; + + struct MonikerReadDigitalScalarU32Data + { + TaskHandle task; + float64 timeout; + bool32* reserved; + nidaqmx_grpc::MonikerReadDigitalScalarU32Response response; + std::shared_ptr library; + }; + + struct MonikerReadDigitalU16Data + { + TaskHandle task; + int32 num_samps_per_chan; + float64 timeout; + int32 fill_mode; + uInt32 array_size_in_samps; + bool32* reserved; + nidaqmx_grpc::MonikerReadDigitalU16Response response; + std::shared_ptr library; + }; + + struct MonikerReadDigitalU32Data + { + TaskHandle task; + int32 num_samps_per_chan; + float64 timeout; + int32 fill_mode; + uInt32 array_size_in_samps; + bool32* reserved; + nidaqmx_grpc::MonikerReadDigitalU32Response response; + std::shared_ptr library; + }; + + struct MonikerReadDigitalU8Data + { + TaskHandle task; + int32 num_samps_per_chan; + float64 timeout; + int32 fill_mode; + uInt32 array_size_in_samps; + bool32* reserved; + nidaqmx_grpc::MonikerReadDigitalU8Response response; + std::shared_ptr library; + }; + + struct MonikerReadPowerBinaryI16Data + { + TaskHandle task; + int32 num_samps_per_chan; + float64 timeout; + int32 fill_mode; + uInt32 array_size_in_samps; + bool32* reserved; + nidaqmx_grpc::MonikerReadPowerBinaryI16Response response; + std::shared_ptr library; + }; + + struct MonikerReadPowerF64Data + { + TaskHandle task; + int32 num_samps_per_chan; + float64 timeout; + int32 fill_mode; + uInt32 array_size_in_samps; + bool32* reserved; + nidaqmx_grpc::MonikerReadPowerF64Response response; + std::shared_ptr library; + }; + + struct MonikerReadPowerScalarF64Data + { + TaskHandle task; + float64 timeout; + bool32* reserved; + nidaqmx_grpc::MonikerReadPowerScalarF64Response response; + std::shared_ptr library; + }; + + struct MonikerReadRawData + { + TaskHandle task; + int32 num_samps_per_chan; + float64 timeout; + uInt32 array_size_in_bytes; + bool32* reserved; + nidaqmx_grpc::MonikerReadRawResponse response; + std::shared_ptr library; + }; + + struct MonikerWaitForNextSampleClockData + { + TaskHandle task; + float64 timeout; + nidaqmx_grpc::MonikerWaitForNextSampleClockResponse response; + std::shared_ptr library; + }; + + struct MonikerWriteAnalogF64Data + { + TaskHandle task; + int32 num_samps_per_chan; + bool32 auto_start; + float64 timeout; + int32 data_layout; + bool32* reserved; + nidaqmx_grpc::MonikerWriteAnalogF64Request request; + nidaqmx_grpc::MonikerWriteAnalogF64Response response; + std::shared_ptr library; + }; + + struct MonikerWriteAnalogScalarF64Data + { + TaskHandle task; + bool32 auto_start; + float64 timeout; + bool32* reserved; + nidaqmx_grpc::MonikerWriteAnalogScalarF64Request request; + nidaqmx_grpc::MonikerWriteAnalogScalarF64Response response; + std::shared_ptr library; + }; + + struct MonikerWriteBinaryI16Data + { + TaskHandle task; + int32 num_samps_per_chan; + bool32 auto_start; + float64 timeout; + int32 data_layout; + bool32* reserved; + nidaqmx_grpc::MonikerWriteBinaryI16Request request; + nidaqmx_grpc::MonikerWriteBinaryI16Response response; + std::shared_ptr library; + }; + + struct MonikerWriteBinaryI32Data + { + TaskHandle task; + int32 num_samps_per_chan; + bool32 auto_start; + float64 timeout; + int32 data_layout; + bool32* reserved; + nidaqmx_grpc::MonikerWriteBinaryI32Request request; + nidaqmx_grpc::MonikerWriteBinaryI32Response response; + std::shared_ptr library; + }; + + struct MonikerWriteBinaryU16Data + { + TaskHandle task; + int32 num_samps_per_chan; + bool32 auto_start; + float64 timeout; + int32 data_layout; + bool32* reserved; + nidaqmx_grpc::MonikerWriteBinaryU16Request request; + nidaqmx_grpc::MonikerWriteBinaryU16Response response; + std::shared_ptr library; + }; + + struct MonikerWriteBinaryU32Data + { + TaskHandle task; + int32 num_samps_per_chan; + bool32 auto_start; + float64 timeout; + int32 data_layout; + bool32* reserved; + nidaqmx_grpc::MonikerWriteBinaryU32Request request; + nidaqmx_grpc::MonikerWriteBinaryU32Response response; + std::shared_ptr library; + }; + + struct MonikerWriteDigitalScalarU32Data + { + TaskHandle task; + bool32 auto_start; + float64 timeout; + bool32* reserved; + nidaqmx_grpc::MonikerWriteDigitalScalarU32Request request; + nidaqmx_grpc::MonikerWriteDigitalScalarU32Response response; + std::shared_ptr library; + }; + + struct MonikerWriteDigitalU16Data + { + TaskHandle task; + int32 num_samps_per_chan; + bool32 auto_start; + float64 timeout; + int32 data_layout; + bool32* reserved; + nidaqmx_grpc::MonikerWriteDigitalU16Request request; + nidaqmx_grpc::MonikerWriteDigitalU16Response response; + std::shared_ptr library; + }; + + struct MonikerWriteDigitalU32Data + { + TaskHandle task; + int32 num_samps_per_chan; + bool32 auto_start; + float64 timeout; + int32 data_layout; + bool32* reserved; + nidaqmx_grpc::MonikerWriteDigitalU32Request request; + nidaqmx_grpc::MonikerWriteDigitalU32Response response; + std::shared_ptr library; + }; + + const auto kErrorReadBufferTooSmall = -200229; + const auto kWarningCAPIStringTruncatedToFitBuffer = 200026; + + NiDAQmxService::NiDAQmxService( + LibrarySharedPtr library, + ResourceRepositorySharedPtr resource_repository, + const NiDAQmxFeatureToggles& feature_toggles) + : library_(library), + session_repository_(resource_repository), + feature_toggles_(feature_toggles) + { + } + + NiDAQmxService::~NiDAQmxService() + { + } + + // 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; + } + + void RegisterMonikerEndpoints() + { + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadAnalogF64", MonikerReadAnalogF64); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadAnalogScalarF64", MonikerReadAnalogScalarF64); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadBinaryI16", MonikerReadBinaryI16); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadBinaryI32", MonikerReadBinaryI32); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadBinaryU16", MonikerReadBinaryU16); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadBinaryU32", MonikerReadBinaryU32); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadCounterF64", MonikerReadCounterF64); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadCounterF64Ex", MonikerReadCounterF64Ex); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadCounterScalarF64", MonikerReadCounterScalarF64); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadCounterScalarU32", MonikerReadCounterScalarU32); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadCounterU32", MonikerReadCounterU32); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadCounterU32Ex", MonikerReadCounterU32Ex); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadCtrFreq", MonikerReadCtrFreq); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadCtrFreqScalar", MonikerReadCtrFreqScalar); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadCtrTicks", MonikerReadCtrTicks); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadCtrTicksScalar", MonikerReadCtrTicksScalar); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadCtrTime", MonikerReadCtrTime); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadCtrTimeScalar", MonikerReadCtrTimeScalar); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadDigitalLines", MonikerReadDigitalLines); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadDigitalScalarU32", MonikerReadDigitalScalarU32); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadDigitalU16", MonikerReadDigitalU16); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadDigitalU32", MonikerReadDigitalU32); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadDigitalU8", MonikerReadDigitalU8); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadPowerBinaryI16", MonikerReadPowerBinaryI16); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadPowerF64", MonikerReadPowerF64); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadPowerScalarF64", MonikerReadPowerScalarF64); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadRaw", MonikerReadRaw); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWaitForNextSampleClock", MonikerWaitForNextSampleClock); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteAnalogF64", MonikerWriteAnalogF64); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteAnalogScalarF64", MonikerWriteAnalogScalarF64); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteBinaryI16", MonikerWriteBinaryI16); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteBinaryI32", MonikerWriteBinaryI32); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteBinaryU16", MonikerWriteBinaryU16); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteBinaryU32", MonikerWriteBinaryU32); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteDigitalScalarU32", MonikerWriteDigitalScalarU32); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteDigitalU16", MonikerWriteDigitalU16); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteDigitalU32", MonikerWriteDigitalU32); + } ::grpc::Status MonikerReadAnalogF64(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadAnalogF64Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto num_samps_per_chan = function_data->num_samps_per_chan; - auto timeout = function_data->timeout; - auto fill_mode = function_data->fill_mode; - auto array_size_in_samps = function_data->array_size_in_samps; - auto reserved = function_data->reserved; - response->mutable_read_array()->Resize(array_size_in_samps, 0); - float64* read_array = response->mutable_read_array()->mutable_data(); - int32 samps_per_chan_read{}; - - auto status = library->ReadAnalogF64(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); - - if (status >= 0) { - response->set_status(status); - response->set_samps_per_chan_read(samps_per_chan_read); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + MonikerReadAnalogF64Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto timeout = function_data->timeout; + auto fill_mode = function_data->fill_mode; + auto array_size_in_samps = function_data->array_size_in_samps; + auto reserved = function_data->reserved; + response->mutable_read_array()->Resize(array_size_in_samps, 0); + float64* read_array = response->mutable_read_array()->mutable_data(); + int32 samps_per_chan_read {}; + + auto status = library->ReadAnalogF64(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); + + if (status >= 0) + { + response->set_status(status); + response->set_samps_per_chan_read(samps_per_chan_read); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadAnalogScalarF64(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadAnalogScalarF64Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto timeout = function_data->timeout; - auto reserved = function_data->reserved; - float64 value{}; + MonikerReadAnalogScalarF64Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto timeout = function_data->timeout; + auto reserved = function_data->reserved; + float64 value {}; - auto status = library->ReadAnalogScalarF64(task, timeout, &value, reserved); + auto status = library->ReadAnalogScalarF64(task, timeout, &value, reserved); - if (status >= 0) { - response->set_status(status); - response->set_value(value); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + if (status >= 0) + { + response->set_status(status); + response->set_value(value); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadBinaryI16(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadBinaryI16Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto num_samps_per_chan = function_data->num_samps_per_chan; - auto timeout = function_data->timeout; - auto fill_mode = function_data->fill_mode; - auto array_size_in_samps = function_data->array_size_in_samps; - auto reserved = function_data->reserved; - std::vector read_array(array_size_in_samps); - int32 samps_per_chan_read{}; - - auto status = library->ReadBinaryI16(task, num_samps_per_chan, timeout, fill_mode, read_array.data(), array_size_in_samps, &samps_per_chan_read, reserved); - - if (status >= 0) { - response->set_status(status); - response->mutable_read_array()->Clear(); - response->mutable_read_array()->Reserve(array_size_in_samps); - std::transform( - read_array.begin(), - read_array.begin() + array_size_in_samps, - google::protobuf::RepeatedFieldBackInserter(response->mutable_read_array()), - [&](auto x) { - return x; - }); - response->set_samps_per_chan_read(samps_per_chan_read); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + MonikerReadBinaryI16Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto timeout = function_data->timeout; + auto fill_mode = function_data->fill_mode; + auto array_size_in_samps = function_data->array_size_in_samps; + auto reserved = function_data->reserved; + std::vector read_array(array_size_in_samps); + int32 samps_per_chan_read {}; + + auto status = library->ReadBinaryI16(task, num_samps_per_chan, timeout, fill_mode, read_array.data(), array_size_in_samps, &samps_per_chan_read, reserved); + + if (status >= 0) + { + response->set_status(status); + response->mutable_read_array()->Clear(); + response->mutable_read_array()->Reserve(array_size_in_samps); + std::transform( + read_array.begin(), + read_array.begin() + array_size_in_samps, + google::protobuf::RepeatedFieldBackInserter(response->mutable_read_array()), + [&](auto x) { + return x; + }); + response->set_samps_per_chan_read(samps_per_chan_read); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadBinaryI32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadBinaryI32Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto num_samps_per_chan = function_data->num_samps_per_chan; - auto timeout = function_data->timeout; - auto fill_mode = function_data->fill_mode; - auto array_size_in_samps = function_data->array_size_in_samps; - auto reserved = function_data->reserved; - response->mutable_read_array()->Resize(array_size_in_samps, 0); - int32* read_array = reinterpret_cast(response->mutable_read_array()->mutable_data()); - int32 samps_per_chan_read{}; - - auto status = library->ReadBinaryI32(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); - - if (status >= 0) { - response->set_status(status); - response->set_samps_per_chan_read(samps_per_chan_read); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + MonikerReadBinaryI32Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto timeout = function_data->timeout; + auto fill_mode = function_data->fill_mode; + auto array_size_in_samps = function_data->array_size_in_samps; + auto reserved = function_data->reserved; + response->mutable_read_array()->Resize(array_size_in_samps, 0); + int32* read_array = reinterpret_cast(response->mutable_read_array()->mutable_data()); + int32 samps_per_chan_read {}; + + auto status = library->ReadBinaryI32(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); + + if (status >= 0) + { + response->set_status(status); + response->set_samps_per_chan_read(samps_per_chan_read); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadBinaryU16(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadBinaryU16Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto num_samps_per_chan = function_data->num_samps_per_chan; - auto timeout = function_data->timeout; - auto fill_mode = function_data->fill_mode; - auto array_size_in_samps = function_data->array_size_in_samps; - auto reserved = function_data->reserved; - std::vector read_array(array_size_in_samps); - int32 samps_per_chan_read{}; - - auto status = library->ReadBinaryU16(task, num_samps_per_chan, timeout, fill_mode, read_array.data(), array_size_in_samps, &samps_per_chan_read, reserved); - - if (status >= 0) { - response->set_status(status); - response->mutable_read_array()->Clear(); - response->mutable_read_array()->Reserve(array_size_in_samps); - std::transform( - read_array.begin(), - read_array.begin() + array_size_in_samps, - google::protobuf::RepeatedFieldBackInserter(response->mutable_read_array()), - [&](auto x) { - return x; - }); - response->set_samps_per_chan_read(samps_per_chan_read); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + MonikerReadBinaryU16Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto timeout = function_data->timeout; + auto fill_mode = function_data->fill_mode; + auto array_size_in_samps = function_data->array_size_in_samps; + auto reserved = function_data->reserved; + std::vector read_array(array_size_in_samps); + int32 samps_per_chan_read {}; + + auto status = library->ReadBinaryU16(task, num_samps_per_chan, timeout, fill_mode, read_array.data(), array_size_in_samps, &samps_per_chan_read, reserved); + + if (status >= 0) + { + response->set_status(status); + response->mutable_read_array()->Clear(); + response->mutable_read_array()->Reserve(array_size_in_samps); + std::transform( + read_array.begin(), + read_array.begin() + array_size_in_samps, + google::protobuf::RepeatedFieldBackInserter(response->mutable_read_array()), + [&](auto x) { + return x; + }); + response->set_samps_per_chan_read(samps_per_chan_read); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadBinaryU32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadBinaryU32Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto num_samps_per_chan = function_data->num_samps_per_chan; - auto timeout = function_data->timeout; - auto fill_mode = function_data->fill_mode; - auto array_size_in_samps = function_data->array_size_in_samps; - auto reserved = function_data->reserved; - response->mutable_read_array()->Resize(array_size_in_samps, 0); - uInt32* read_array = reinterpret_cast(response->mutable_read_array()->mutable_data()); - int32 samps_per_chan_read{}; - - auto status = library->ReadBinaryU32(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); - - if (status >= 0) { - response->set_status(status); - response->set_samps_per_chan_read(samps_per_chan_read); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + MonikerReadBinaryU32Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto timeout = function_data->timeout; + auto fill_mode = function_data->fill_mode; + auto array_size_in_samps = function_data->array_size_in_samps; + auto reserved = function_data->reserved; + response->mutable_read_array()->Resize(array_size_in_samps, 0); + uInt32* read_array = reinterpret_cast(response->mutable_read_array()->mutable_data()); + int32 samps_per_chan_read {}; + + auto status = library->ReadBinaryU32(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); + + if (status >= 0) + { + response->set_status(status); + response->set_samps_per_chan_read(samps_per_chan_read); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadCounterF64(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadCounterF64Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto num_samps_per_chan = function_data->num_samps_per_chan; - auto timeout = function_data->timeout; - auto array_size_in_samps = function_data->array_size_in_samps; - auto reserved = function_data->reserved; - response->mutable_read_array()->Resize(array_size_in_samps, 0); - float64* read_array = response->mutable_read_array()->mutable_data(); - int32 samps_per_chan_read{}; - - auto status = library->ReadCounterF64(task, num_samps_per_chan, timeout, read_array, array_size_in_samps, &samps_per_chan_read, reserved); - - if (status >= 0) { - response->set_status(status); - response->set_samps_per_chan_read(samps_per_chan_read); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + MonikerReadCounterF64Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto timeout = function_data->timeout; + auto array_size_in_samps = function_data->array_size_in_samps; + auto reserved = function_data->reserved; + response->mutable_read_array()->Resize(array_size_in_samps, 0); + float64* read_array = response->mutable_read_array()->mutable_data(); + int32 samps_per_chan_read {}; + + auto status = library->ReadCounterF64(task, num_samps_per_chan, timeout, read_array, array_size_in_samps, &samps_per_chan_read, reserved); + + if (status >= 0) + { + response->set_status(status); + response->set_samps_per_chan_read(samps_per_chan_read); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadCounterF64Ex(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadCounterF64ExData* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto num_samps_per_chan = function_data->num_samps_per_chan; - auto timeout = function_data->timeout; - auto fill_mode = function_data->fill_mode; - auto array_size_in_samps = function_data->array_size_in_samps; - auto reserved = function_data->reserved; - response->mutable_read_array()->Resize(array_size_in_samps, 0); - float64* read_array = response->mutable_read_array()->mutable_data(); - int32 samps_per_chan_read{}; - - auto status = library->ReadCounterF64Ex(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); - - if (status >= 0) { - response->set_status(status); - response->set_samps_per_chan_read(samps_per_chan_read); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + MonikerReadCounterF64ExData* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto timeout = function_data->timeout; + auto fill_mode = function_data->fill_mode; + auto array_size_in_samps = function_data->array_size_in_samps; + auto reserved = function_data->reserved; + response->mutable_read_array()->Resize(array_size_in_samps, 0); + float64* read_array = response->mutable_read_array()->mutable_data(); + int32 samps_per_chan_read {}; + + auto status = library->ReadCounterF64Ex(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); + + if (status >= 0) + { + response->set_status(status); + response->set_samps_per_chan_read(samps_per_chan_read); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadCounterScalarF64(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadCounterScalarF64Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto timeout = function_data->timeout; - auto reserved = function_data->reserved; - float64 value{}; + MonikerReadCounterScalarF64Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto timeout = function_data->timeout; + auto reserved = function_data->reserved; + float64 value {}; - auto status = library->ReadCounterScalarF64(task, timeout, &value, reserved); + auto status = library->ReadCounterScalarF64(task, timeout, &value, reserved); - if (status >= 0) { - response->set_status(status); - response->set_value(value); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + if (status >= 0) + { + response->set_status(status); + response->set_value(value); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadCounterScalarU32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadCounterScalarU32Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto timeout = function_data->timeout; - auto reserved = function_data->reserved; - uInt32 value{}; + MonikerReadCounterScalarU32Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto timeout = function_data->timeout; + auto reserved = function_data->reserved; + uInt32 value {}; - auto status = library->ReadCounterScalarU32(task, timeout, &value, reserved); + auto status = library->ReadCounterScalarU32(task, timeout, &value, reserved); - if (status >= 0) { - response->set_status(status); - response->set_value(value); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + if (status >= 0) + { + response->set_status(status); + response->set_value(value); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadCounterU32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadCounterU32Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto num_samps_per_chan = function_data->num_samps_per_chan; - auto timeout = function_data->timeout; - auto array_size_in_samps = function_data->array_size_in_samps; - auto reserved = function_data->reserved; - response->mutable_read_array()->Resize(array_size_in_samps, 0); - uInt32* read_array = reinterpret_cast(response->mutable_read_array()->mutable_data()); - int32 samps_per_chan_read{}; - - auto status = library->ReadCounterU32(task, num_samps_per_chan, timeout, read_array, array_size_in_samps, &samps_per_chan_read, reserved); - - if (status >= 0) { - response->set_status(status); - response->set_samps_per_chan_read(samps_per_chan_read); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + MonikerReadCounterU32Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto timeout = function_data->timeout; + auto array_size_in_samps = function_data->array_size_in_samps; + auto reserved = function_data->reserved; + response->mutable_read_array()->Resize(array_size_in_samps, 0); + uInt32* read_array = reinterpret_cast(response->mutable_read_array()->mutable_data()); + int32 samps_per_chan_read {}; + + auto status = library->ReadCounterU32(task, num_samps_per_chan, timeout, read_array, array_size_in_samps, &samps_per_chan_read, reserved); + + if (status >= 0) + { + response->set_status(status); + response->set_samps_per_chan_read(samps_per_chan_read); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadCounterU32Ex(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadCounterU32ExData* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto num_samps_per_chan = function_data->num_samps_per_chan; - auto timeout = function_data->timeout; - auto fill_mode = function_data->fill_mode; - auto array_size_in_samps = function_data->array_size_in_samps; - auto reserved = function_data->reserved; - response->mutable_read_array()->Resize(array_size_in_samps, 0); - uInt32* read_array = reinterpret_cast(response->mutable_read_array()->mutable_data()); - int32 samps_per_chan_read{}; - - auto status = library->ReadCounterU32Ex(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); - - if (status >= 0) { - response->set_status(status); - response->set_samps_per_chan_read(samps_per_chan_read); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + MonikerReadCounterU32ExData* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto timeout = function_data->timeout; + auto fill_mode = function_data->fill_mode; + auto array_size_in_samps = function_data->array_size_in_samps; + auto reserved = function_data->reserved; + response->mutable_read_array()->Resize(array_size_in_samps, 0); + uInt32* read_array = reinterpret_cast(response->mutable_read_array()->mutable_data()); + int32 samps_per_chan_read {}; + + auto status = library->ReadCounterU32Ex(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); + + if (status >= 0) + { + response->set_status(status); + response->set_samps_per_chan_read(samps_per_chan_read); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadCtrFreq(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadCtrFreqData* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto num_samps_per_chan = function_data->num_samps_per_chan; - auto timeout = function_data->timeout; - auto interleaved = function_data->interleaved; - auto array_size_in_samps = function_data->array_size_in_samps; - auto reserved = function_data->reserved; - response->mutable_read_array_frequency()->Resize(array_size_in_samps, 0); - float64* read_array_frequency = response->mutable_read_array_frequency()->mutable_data(); - response->mutable_read_array_duty_cycle()->Resize(array_size_in_samps, 0); - float64* read_array_duty_cycle = response->mutable_read_array_duty_cycle()->mutable_data(); - int32 samps_per_chan_read{}; - - auto status = library->ReadCtrFreq(task, num_samps_per_chan, timeout, interleaved, read_array_frequency, read_array_duty_cycle, array_size_in_samps, &samps_per_chan_read, reserved); - - if (status >= 0) { - response->set_status(status); - response->set_samps_per_chan_read(samps_per_chan_read); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + MonikerReadCtrFreqData* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto timeout = function_data->timeout; + auto interleaved = function_data->interleaved; + auto array_size_in_samps = function_data->array_size_in_samps; + auto reserved = function_data->reserved; + response->mutable_read_array_frequency()->Resize(array_size_in_samps, 0); + float64* read_array_frequency = response->mutable_read_array_frequency()->mutable_data(); + response->mutable_read_array_duty_cycle()->Resize(array_size_in_samps, 0); + float64* read_array_duty_cycle = response->mutable_read_array_duty_cycle()->mutable_data(); + int32 samps_per_chan_read {}; + + auto status = library->ReadCtrFreq(task, num_samps_per_chan, timeout, interleaved, read_array_frequency, read_array_duty_cycle, array_size_in_samps, &samps_per_chan_read, reserved); + + if (status >= 0) + { + response->set_status(status); + response->set_samps_per_chan_read(samps_per_chan_read); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadCtrFreqScalar(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadCtrFreqScalarData* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto timeout = function_data->timeout; - auto reserved = function_data->reserved; - float64 frequency{}; - float64 duty_cycle{}; - - auto status = library->ReadCtrFreqScalar(task, timeout, &frequency, &duty_cycle, reserved); - - if (status >= 0) { - response->set_status(status); - response->set_frequency(frequency); - response->set_duty_cycle(duty_cycle); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + MonikerReadCtrFreqScalarData* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto timeout = function_data->timeout; + auto reserved = function_data->reserved; + float64 frequency {}; + float64 duty_cycle {}; + + auto status = library->ReadCtrFreqScalar(task, timeout, &frequency, &duty_cycle, reserved); + + if (status >= 0) + { + response->set_status(status); + response->set_frequency(frequency); + response->set_duty_cycle(duty_cycle); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadCtrTicks(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadCtrTicksData* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto num_samps_per_chan = function_data->num_samps_per_chan; - auto timeout = function_data->timeout; - auto interleaved = function_data->interleaved; - auto array_size_in_samps = function_data->array_size_in_samps; - auto reserved = function_data->reserved; - response->mutable_read_array_high_ticks()->Resize(array_size_in_samps, 0); - uInt32* read_array_high_ticks = reinterpret_cast(response->mutable_read_array_high_ticks()->mutable_data()); - response->mutable_read_array_low_ticks()->Resize(array_size_in_samps, 0); - uInt32* read_array_low_ticks = reinterpret_cast(response->mutable_read_array_low_ticks()->mutable_data()); - int32 samps_per_chan_read{}; - - auto status = library->ReadCtrTicks(task, num_samps_per_chan, timeout, interleaved, read_array_high_ticks, read_array_low_ticks, array_size_in_samps, &samps_per_chan_read, reserved); - - if (status >= 0) { - response->set_status(status); - response->set_samps_per_chan_read(samps_per_chan_read); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; -} + MonikerReadCtrTicksData* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto timeout = function_data->timeout; + auto interleaved = function_data->interleaved; + auto array_size_in_samps = function_data->array_size_in_samps; + auto reserved = function_data->reserved; + response->mutable_read_array_high_ticks()->Resize(array_size_in_samps, 0); + uInt32* read_array_high_ticks = reinterpret_cast(response->mutable_read_array_high_ticks()->mutable_data()); + response->mutable_read_array_low_ticks()->Resize(array_size_in_samps, 0); + uInt32* read_array_low_ticks = reinterpret_cast(response->mutable_read_array_low_ticks()->mutable_data()); + int32 samps_per_chan_read {}; -::grpc::Status MonikerReadCtrTicksScalar(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) -{ - MonikerReadCtrTicksScalarData* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto timeout = function_data->timeout; - auto reserved = function_data->reserved; - uInt32 high_ticks{}; - uInt32 low_ticks{}; - - auto status = library->ReadCtrTicksScalar(task, timeout, &high_ticks, &low_ticks, reserved); - - if (status >= 0) { - response->set_status(status); - response->set_high_ticks(high_ticks); - response->set_low_ticks(low_ticks); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; -} + auto status = library->ReadCtrTicks(task, num_samps_per_chan, timeout, interleaved, read_array_high_ticks, read_array_low_ticks, array_size_in_samps, &samps_per_chan_read, reserved); -::grpc::Status MonikerReadCtrTime(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) -{ - MonikerReadCtrTimeData* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto num_samps_per_chan = function_data->num_samps_per_chan; - auto timeout = function_data->timeout; - auto interleaved = function_data->interleaved; - auto array_size_in_samps = function_data->array_size_in_samps; - auto reserved = function_data->reserved; - response->mutable_read_array_high_time()->Resize(array_size_in_samps, 0); - float64* read_array_high_time = response->mutable_read_array_high_time()->mutable_data(); - response->mutable_read_array_low_time()->Resize(array_size_in_samps, 0); - float64* read_array_low_time = response->mutable_read_array_low_time()->mutable_data(); - int32 samps_per_chan_read{}; - - auto status = library->ReadCtrTime(task, num_samps_per_chan, timeout, interleaved, read_array_high_time, read_array_low_time, array_size_in_samps, &samps_per_chan_read, reserved); - - if (status >= 0) { - response->set_status(status); - response->set_samps_per_chan_read(samps_per_chan_read); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + if (status >= 0) + { + response->set_status(status); + response->set_samps_per_chan_read(samps_per_chan_read); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; +} + +::grpc::Status MonikerReadCtrTicksScalar(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) +{ + MonikerReadCtrTicksScalarData* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto timeout = function_data->timeout; + auto reserved = function_data->reserved; + uInt32 high_ticks {}; + uInt32 low_ticks {}; + + auto status = library->ReadCtrTicksScalar(task, timeout, &high_ticks, &low_ticks, reserved); + + if (status >= 0) + { + response->set_status(status); + response->set_high_ticks(high_ticks); + response->set_low_ticks(low_ticks); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; +} + +::grpc::Status MonikerReadCtrTime(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) +{ + MonikerReadCtrTimeData* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto timeout = function_data->timeout; + auto interleaved = function_data->interleaved; + auto array_size_in_samps = function_data->array_size_in_samps; + auto reserved = function_data->reserved; + response->mutable_read_array_high_time()->Resize(array_size_in_samps, 0); + float64* read_array_high_time = response->mutable_read_array_high_time()->mutable_data(); + response->mutable_read_array_low_time()->Resize(array_size_in_samps, 0); + float64* read_array_low_time = response->mutable_read_array_low_time()->mutable_data(); + int32 samps_per_chan_read {}; + + auto status = library->ReadCtrTime(task, num_samps_per_chan, timeout, interleaved, read_array_high_time, read_array_low_time, array_size_in_samps, &samps_per_chan_read, reserved); + + if (status >= 0) + { + response->set_status(status); + response->set_samps_per_chan_read(samps_per_chan_read); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadCtrTimeScalar(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadCtrTimeScalarData* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto timeout = function_data->timeout; - auto reserved = function_data->reserved; - float64 high_time{}; - float64 low_time{}; - - auto status = library->ReadCtrTimeScalar(task, timeout, &high_time, &low_time, reserved); - - if (status >= 0) { - response->set_status(status); - response->set_high_time(high_time); - response->set_low_time(low_time); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + MonikerReadCtrTimeScalarData* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto timeout = function_data->timeout; + auto reserved = function_data->reserved; + float64 high_time {}; + float64 low_time {}; + + auto status = library->ReadCtrTimeScalar(task, timeout, &high_time, &low_time, reserved); + + if (status >= 0) + { + response->set_status(status); + response->set_high_time(high_time); + response->set_low_time(low_time); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadDigitalLines(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadDigitalLinesData* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto num_samps_per_chan = function_data->num_samps_per_chan; - auto timeout = function_data->timeout; - auto fill_mode = function_data->fill_mode; - auto array_size_in_bytes = function_data->array_size_in_bytes; - auto reserved = function_data->reserved; - std::string read_array(array_size_in_bytes, '\0'); - int32 samps_per_chan_read{}; - int32 num_bytes_per_samp{}; - - auto status = library->ReadDigitalLines(task, num_samps_per_chan, timeout, fill_mode, (uInt8*)read_array.data(), array_size_in_bytes, &samps_per_chan_read, &num_bytes_per_samp, reserved); - - if (status >= 0) { - response->set_status(status); - response->set_read_array(read_array); - response->set_samps_per_chan_read(samps_per_chan_read); - response->set_num_bytes_per_samp(num_bytes_per_samp); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + MonikerReadDigitalLinesData* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto timeout = function_data->timeout; + auto fill_mode = function_data->fill_mode; + auto array_size_in_bytes = function_data->array_size_in_bytes; + auto reserved = function_data->reserved; + std::string read_array(array_size_in_bytes, '\0'); + int32 samps_per_chan_read {}; + int32 num_bytes_per_samp {}; + + auto status = library->ReadDigitalLines(task, num_samps_per_chan, timeout, fill_mode, (uInt8*)read_array.data(), array_size_in_bytes, &samps_per_chan_read, &num_bytes_per_samp, reserved); + + if (status >= 0) + { + response->set_status(status); + response->set_read_array(read_array); + response->set_samps_per_chan_read(samps_per_chan_read); + response->set_num_bytes_per_samp(num_bytes_per_samp); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadDigitalScalarU32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadDigitalScalarU32Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto timeout = function_data->timeout; - auto reserved = function_data->reserved; - uInt32 value{}; + MonikerReadDigitalScalarU32Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto timeout = function_data->timeout; + auto reserved = function_data->reserved; + uInt32 value {}; - auto status = library->ReadDigitalScalarU32(task, timeout, &value, reserved); + auto status = library->ReadDigitalScalarU32(task, timeout, &value, reserved); - if (status >= 0) { - response->set_status(status); - response->set_value(value); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + if (status >= 0) + { + response->set_status(status); + response->set_value(value); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadDigitalU16(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadDigitalU16Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto num_samps_per_chan = function_data->num_samps_per_chan; - auto timeout = function_data->timeout; - auto fill_mode = function_data->fill_mode; - auto array_size_in_samps = function_data->array_size_in_samps; - auto reserved = function_data->reserved; - std::vector read_array(array_size_in_samps); - int32 samps_per_chan_read{}; - - auto status = library->ReadDigitalU16(task, num_samps_per_chan, timeout, fill_mode, read_array.data(), array_size_in_samps, &samps_per_chan_read, reserved); - - if (status >= 0) { - response->set_status(status); - response->mutable_read_array()->Clear(); - response->mutable_read_array()->Reserve(array_size_in_samps); - std::transform( - read_array.begin(), - read_array.begin() + array_size_in_samps, - google::protobuf::RepeatedFieldBackInserter(response->mutable_read_array()), - [&](auto x) { - return x; - }); - response->set_samps_per_chan_read(samps_per_chan_read); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + MonikerReadDigitalU16Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto timeout = function_data->timeout; + auto fill_mode = function_data->fill_mode; + auto array_size_in_samps = function_data->array_size_in_samps; + auto reserved = function_data->reserved; + std::vector read_array(array_size_in_samps); + int32 samps_per_chan_read {}; + + auto status = library->ReadDigitalU16(task, num_samps_per_chan, timeout, fill_mode, read_array.data(), array_size_in_samps, &samps_per_chan_read, reserved); + + if (status >= 0) + { + response->set_status(status); + response->mutable_read_array()->Clear(); + response->mutable_read_array()->Reserve(array_size_in_samps); + std::transform( + read_array.begin(), + read_array.begin() + array_size_in_samps, + google::protobuf::RepeatedFieldBackInserter(response->mutable_read_array()), + [&](auto x) { + return x; + }); + response->set_samps_per_chan_read(samps_per_chan_read); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadDigitalU32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadDigitalU32Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto num_samps_per_chan = function_data->num_samps_per_chan; - auto timeout = function_data->timeout; - auto fill_mode = function_data->fill_mode; - auto array_size_in_samps = function_data->array_size_in_samps; - auto reserved = function_data->reserved; - response->mutable_read_array()->Resize(array_size_in_samps, 0); - uInt32* read_array = reinterpret_cast(response->mutable_read_array()->mutable_data()); - int32 samps_per_chan_read{}; - - auto status = library->ReadDigitalU32(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); - - if (status >= 0) { - response->set_status(status); - response->set_samps_per_chan_read(samps_per_chan_read); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + MonikerReadDigitalU32Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto timeout = function_data->timeout; + auto fill_mode = function_data->fill_mode; + auto array_size_in_samps = function_data->array_size_in_samps; + auto reserved = function_data->reserved; + response->mutable_read_array()->Resize(array_size_in_samps, 0); + uInt32* read_array = reinterpret_cast(response->mutable_read_array()->mutable_data()); + int32 samps_per_chan_read {}; + + auto status = library->ReadDigitalU32(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); + + if (status >= 0) + { + response->set_status(status); + response->set_samps_per_chan_read(samps_per_chan_read); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadDigitalU8(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadDigitalU8Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto num_samps_per_chan = function_data->num_samps_per_chan; - auto timeout = function_data->timeout; - auto fill_mode = function_data->fill_mode; - auto array_size_in_samps = function_data->array_size_in_samps; - auto reserved = function_data->reserved; - std::string read_array(array_size_in_samps, '\0'); - int32 samps_per_chan_read{}; - - auto status = library->ReadDigitalU8(task, num_samps_per_chan, timeout, fill_mode, (uInt8*)read_array.data(), array_size_in_samps, &samps_per_chan_read, reserved); - - if (status >= 0) { - response->set_status(status); - response->set_read_array(read_array); - response->set_samps_per_chan_read(samps_per_chan_read); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + MonikerReadDigitalU8Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto timeout = function_data->timeout; + auto fill_mode = function_data->fill_mode; + auto array_size_in_samps = function_data->array_size_in_samps; + auto reserved = function_data->reserved; + std::string read_array(array_size_in_samps, '\0'); + int32 samps_per_chan_read {}; + + auto status = library->ReadDigitalU8(task, num_samps_per_chan, timeout, fill_mode, (uInt8*)read_array.data(), array_size_in_samps, &samps_per_chan_read, reserved); + + if (status >= 0) + { + response->set_status(status); + response->set_read_array(read_array); + response->set_samps_per_chan_read(samps_per_chan_read); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadPowerBinaryI16(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadPowerBinaryI16Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto num_samps_per_chan = function_data->num_samps_per_chan; - auto timeout = function_data->timeout; - auto fill_mode = function_data->fill_mode; - auto array_size_in_samps = function_data->array_size_in_samps; - auto reserved = function_data->reserved; - std::vector read_array_voltage(array_size_in_samps); - std::vector read_array_current(array_size_in_samps); - int32 samps_per_chan_read{}; - - auto status = library->ReadPowerBinaryI16(task, num_samps_per_chan, timeout, fill_mode, read_array_voltage.data(), read_array_current.data(), array_size_in_samps, &samps_per_chan_read, reserved); - - if (status >= 0) { - response->set_status(status); - response->mutable_read_array_voltage()->Clear(); - response->mutable_read_array_voltage()->Reserve(array_size_in_samps); - std::transform( - read_array_voltage.begin(), - read_array_voltage.begin() + array_size_in_samps, - google::protobuf::RepeatedFieldBackInserter(response->mutable_read_array_voltage()), - [&](auto x) { - return x; - }); - response->mutable_read_array_current()->Clear(); - response->mutable_read_array_current()->Reserve(array_size_in_samps); - std::transform( - read_array_current.begin(), - read_array_current.begin() + array_size_in_samps, - google::protobuf::RepeatedFieldBackInserter(response->mutable_read_array_current()), - [&](auto x) { - return x; - }); - response->set_samps_per_chan_read(samps_per_chan_read); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + MonikerReadPowerBinaryI16Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto timeout = function_data->timeout; + auto fill_mode = function_data->fill_mode; + auto array_size_in_samps = function_data->array_size_in_samps; + auto reserved = function_data->reserved; + std::vector read_array_voltage(array_size_in_samps); + std::vector read_array_current(array_size_in_samps); + int32 samps_per_chan_read {}; + + auto status = library->ReadPowerBinaryI16(task, num_samps_per_chan, timeout, fill_mode, read_array_voltage.data(), read_array_current.data(), array_size_in_samps, &samps_per_chan_read, reserved); + + if (status >= 0) + { + response->set_status(status); + response->mutable_read_array_voltage()->Clear(); + response->mutable_read_array_voltage()->Reserve(array_size_in_samps); + std::transform( + read_array_voltage.begin(), + read_array_voltage.begin() + array_size_in_samps, + google::protobuf::RepeatedFieldBackInserter(response->mutable_read_array_voltage()), + [&](auto x) { + return x; + }); + response->mutable_read_array_current()->Clear(); + response->mutable_read_array_current()->Reserve(array_size_in_samps); + std::transform( + read_array_current.begin(), + read_array_current.begin() + array_size_in_samps, + google::protobuf::RepeatedFieldBackInserter(response->mutable_read_array_current()), + [&](auto x) { + return x; + }); + response->set_samps_per_chan_read(samps_per_chan_read); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadPowerF64(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadPowerF64Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto num_samps_per_chan = function_data->num_samps_per_chan; - auto timeout = function_data->timeout; - auto fill_mode = function_data->fill_mode; - auto array_size_in_samps = function_data->array_size_in_samps; - auto reserved = function_data->reserved; - response->mutable_read_array_voltage()->Resize(array_size_in_samps, 0); - float64* read_array_voltage = response->mutable_read_array_voltage()->mutable_data(); - response->mutable_read_array_current()->Resize(array_size_in_samps, 0); - float64* read_array_current = response->mutable_read_array_current()->mutable_data(); - int32 samps_per_chan_read{}; - - auto status = library->ReadPowerF64(task, num_samps_per_chan, timeout, fill_mode, read_array_voltage, read_array_current, array_size_in_samps, &samps_per_chan_read, reserved); - - if (status >= 0) { - response->set_status(status); - response->set_samps_per_chan_read(samps_per_chan_read); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + MonikerReadPowerF64Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto timeout = function_data->timeout; + auto fill_mode = function_data->fill_mode; + auto array_size_in_samps = function_data->array_size_in_samps; + auto reserved = function_data->reserved; + response->mutable_read_array_voltage()->Resize(array_size_in_samps, 0); + float64* read_array_voltage = response->mutable_read_array_voltage()->mutable_data(); + response->mutable_read_array_current()->Resize(array_size_in_samps, 0); + float64* read_array_current = response->mutable_read_array_current()->mutable_data(); + int32 samps_per_chan_read {}; + + auto status = library->ReadPowerF64(task, num_samps_per_chan, timeout, fill_mode, read_array_voltage, read_array_current, array_size_in_samps, &samps_per_chan_read, reserved); + + if (status >= 0) + { + response->set_status(status); + response->set_samps_per_chan_read(samps_per_chan_read); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadPowerScalarF64(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadPowerScalarF64Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto timeout = function_data->timeout; - auto reserved = function_data->reserved; - float64 voltage{}; - float64 current{}; - - auto status = library->ReadPowerScalarF64(task, timeout, &voltage, ¤t, reserved); - - if (status >= 0) { - response->set_status(status); - response->set_voltage(voltage); - response->set_current(current); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + MonikerReadPowerScalarF64Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto timeout = function_data->timeout; + auto reserved = function_data->reserved; + float64 voltage {}; + float64 current {}; + + auto status = library->ReadPowerScalarF64(task, timeout, &voltage, ¤t, reserved); + + if (status >= 0) + { + response->set_status(status); + response->set_voltage(voltage); + response->set_current(current); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadRaw(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadRawData* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto num_samps_per_chan = function_data->num_samps_per_chan; - auto timeout = function_data->timeout; - auto array_size_in_bytes = function_data->array_size_in_bytes; - auto reserved = function_data->reserved; - std::string read_array(array_size_in_bytes, '\0'); - int32 samps_read{}; - int32 num_bytes_per_samp{}; - - auto status = library->ReadRaw(task, num_samps_per_chan, timeout, (uInt8*)read_array.data(), array_size_in_bytes, &samps_read, &num_bytes_per_samp, reserved); - - if (status >= 0) { - response->set_status(status); - response->set_read_array(read_array); - response->set_samps_read(samps_read); - response->set_num_bytes_per_samp(num_bytes_per_samp); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + MonikerReadRawData* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto timeout = function_data->timeout; + auto array_size_in_bytes = function_data->array_size_in_bytes; + auto reserved = function_data->reserved; + std::string read_array(array_size_in_bytes, '\0'); + int32 samps_read {}; + int32 num_bytes_per_samp {}; + + auto status = library->ReadRaw(task, num_samps_per_chan, timeout, (uInt8*)read_array.data(), array_size_in_bytes, &samps_read, &num_bytes_per_samp, reserved); + + if (status >= 0) + { + response->set_status(status); + response->set_read_array(read_array); + response->set_samps_read(samps_read); + response->set_num_bytes_per_samp(num_bytes_per_samp); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerWaitForNextSampleClock(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWaitForNextSampleClockData* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto timeout = function_data->timeout; - bool32 is_late{}; + MonikerWaitForNextSampleClockData* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto timeout = function_data->timeout; + bool32 is_late {}; - auto status = library->WaitForNextSampleClock(task, timeout, &is_late); + auto status = library->WaitForNextSampleClock(task, timeout, &is_late); - if (status >= 0) { - response->set_status(status); - response->set_is_late(is_late); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + if (status >= 0) + { + response->set_status(status); + response->set_is_late(is_late); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteAnalogF64(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteAnalogF64Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto num_samps_per_chan = function_data->num_samps_per_chan; - auto auto_start = function_data->auto_start; - auto timeout = function_data->timeout; - auto data_layout = function_data->data_layout; - auto reserved = function_data->reserved; - int32 samps_per_chan_written{}; - - ArrayDoubleData arraydoubledata_message; - packedData.UnpackTo(&arraydoubledata_message); - - auto data_array = arraydoubledata_message.value(); - auto write_array = const_cast(arraydoubledata_message.value().data()); - auto size = data_array.size(); - - auto status = library->WriteAnalogF64(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array, &samps_per_chan_written, reserved); - - if (status < 0) { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + MonikerWriteAnalogF64Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto auto_start = function_data->auto_start; + auto timeout = function_data->timeout; + auto data_layout = function_data->data_layout; + auto reserved = function_data->reserved; + int32 samps_per_chan_written {}; + + ArrayDoubleData arraydoubledata_message; + packedData.UnpackTo(&arraydoubledata_message); + + auto data_array = arraydoubledata_message.value(); + auto write_array = const_cast(arraydoubledata_message.value().data()); + auto size = data_array.size(); + + auto status = library->WriteAnalogF64(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array, &samps_per_chan_written, reserved); + + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteAnalogScalarF64(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteAnalogScalarF64Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto auto_start = function_data->auto_start; - auto timeout = function_data->timeout; - auto reserved = function_data->reserved; + MonikerWriteAnalogScalarF64Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto auto_start = function_data->auto_start; + auto timeout = function_data->timeout; + auto reserved = function_data->reserved; - DoubleData doubledata_message; - packedData.UnpackTo(&doubledata_message); - auto value = doubledata_message.value(); + DoubleData doubledata_message; + packedData.UnpackTo(&doubledata_message); + auto value = doubledata_message.value(); - auto status = library->WriteAnalogScalarF64(task, auto_start, timeout, value, reserved); + auto status = library->WriteAnalogScalarF64(task, auto_start, timeout, value, reserved); - if (status < 0) { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteBinaryI16(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteBinaryI16Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto num_samps_per_chan = function_data->num_samps_per_chan; - auto auto_start = function_data->auto_start; - auto timeout = function_data->timeout; - auto data_layout = function_data->data_layout; - auto reserved = function_data->reserved; - int32 samps_per_chan_written{}; - - ArrayI16Data arrayi16data_message; - packedData.UnpackTo(&arrayi16data_message); - - auto data_array = arrayi16data_message.value(); - auto write_array = std::vector(); - auto size = data_array.size(); - write_array.reserve(size); - std::transform( + MonikerWriteBinaryI16Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto auto_start = function_data->auto_start; + auto timeout = function_data->timeout; + auto data_layout = function_data->data_layout; + auto reserved = function_data->reserved; + int32 samps_per_chan_written {}; + + ArrayI16Data arrayi16data_message; + packedData.UnpackTo(&arrayi16data_message); + + auto data_array = arrayi16data_message.value(); + auto write_array = std::vector(); + auto size = data_array.size(); + write_array.reserve(size); + std::transform( data_array.begin(), data_array.end(), std::back_inserter(write_array), @@ -1351,63 +1444,65 @@ ::grpc::Status MonikerWriteBinaryI16(void* data, google::protobuf::Arena& arena, return static_cast(x); }); - auto status = library->WriteBinaryI16(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array.data(), &samps_per_chan_written, reserved); + auto status = library->WriteBinaryI16(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array.data(), &samps_per_chan_written, reserved); - if (status < 0) { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteBinaryI32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteBinaryI32Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto num_samps_per_chan = function_data->num_samps_per_chan; - auto auto_start = function_data->auto_start; - auto timeout = function_data->timeout; - auto data_layout = function_data->data_layout; - auto reserved = function_data->reserved; - int32 samps_per_chan_written{}; - - ArrayI32Data arrayi32data_message; - packedData.UnpackTo(&arrayi32data_message); - - auto data_array = arrayi32data_message.value(); - auto write_array = reinterpret_cast(arrayi32data_message.value().data()); - auto size = data_array.size(); - - auto status = library->WriteBinaryI32(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array, &samps_per_chan_written, reserved); - - if (status < 0) { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + MonikerWriteBinaryI32Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto auto_start = function_data->auto_start; + auto timeout = function_data->timeout; + auto data_layout = function_data->data_layout; + auto reserved = function_data->reserved; + int32 samps_per_chan_written {}; + + ArrayI32Data arrayi32data_message; + packedData.UnpackTo(&arrayi32data_message); + + auto data_array = arrayi32data_message.value(); + auto write_array = reinterpret_cast(arrayi32data_message.value().data()); + auto size = data_array.size(); + + auto status = library->WriteBinaryI32(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array, &samps_per_chan_written, reserved); + + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteBinaryU16(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteBinaryU16Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto num_samps_per_chan = function_data->num_samps_per_chan; - auto auto_start = function_data->auto_start; - auto timeout = function_data->timeout; - auto data_layout = function_data->data_layout; - auto reserved = function_data->reserved; - int32 samps_per_chan_written{}; - - ArrayU16Data arrayu16data_message; - packedData.UnpackTo(&arrayu16data_message); - - auto data_array = arrayu16data_message.value(); - auto write_array = std::vector(); - auto size = data_array.size(); - write_array.reserve(size); - std::transform( + MonikerWriteBinaryU16Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto auto_start = function_data->auto_start; + auto timeout = function_data->timeout; + auto data_layout = function_data->data_layout; + auto reserved = function_data->reserved; + int32 samps_per_chan_written {}; + + ArrayU16Data arrayu16data_message; + packedData.UnpackTo(&arrayu16data_message); + + auto data_array = arrayu16data_message.value(); + auto write_array = std::vector(); + auto size = data_array.size(); + write_array.reserve(size); + std::transform( data_array.begin(), data_array.end(), std::back_inserter(write_array), @@ -1419,85 +1514,88 @@ ::grpc::Status MonikerWriteBinaryU16(void* data, google::protobuf::Arena& arena, return static_cast(x); }); - auto status = library->WriteBinaryU16(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array.data(), &samps_per_chan_written, reserved); + auto status = library->WriteBinaryU16(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array.data(), &samps_per_chan_written, reserved); - if (status < 0) { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteBinaryU32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteBinaryU32Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto num_samps_per_chan = function_data->num_samps_per_chan; - auto auto_start = function_data->auto_start; - auto timeout = function_data->timeout; - auto data_layout = function_data->data_layout; - auto reserved = function_data->reserved; - int32 samps_per_chan_written{}; - - ArrayU32Data arrayu32data_message; - packedData.UnpackTo(&arrayu32data_message); - - auto data_array = arrayu32data_message.value(); - auto write_array = reinterpret_cast(arrayu32data_message.value().data()); - auto size = data_array.size(); - - auto status = library->WriteBinaryU32(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array, &samps_per_chan_written, reserved); - - if (status < 0) { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + MonikerWriteBinaryU32Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto auto_start = function_data->auto_start; + auto timeout = function_data->timeout; + auto data_layout = function_data->data_layout; + auto reserved = function_data->reserved; + int32 samps_per_chan_written {}; + + ArrayU32Data arrayu32data_message; + packedData.UnpackTo(&arrayu32data_message); + + auto data_array = arrayu32data_message.value(); + auto write_array = reinterpret_cast(arrayu32data_message.value().data()); + auto size = data_array.size(); + + auto status = library->WriteBinaryU32(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array, &samps_per_chan_written, reserved); + + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteDigitalScalarU32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteDigitalScalarU32Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto auto_start = function_data->auto_start; - auto timeout = function_data->timeout; - auto reserved = function_data->reserved; + MonikerWriteDigitalScalarU32Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto auto_start = function_data->auto_start; + auto timeout = function_data->timeout; + auto reserved = function_data->reserved; - U32Data u32data_message; - packedData.UnpackTo(&u32data_message); - auto value = u32data_message.value(); + U32Data u32data_message; + packedData.UnpackTo(&u32data_message); + auto value = u32data_message.value(); - auto status = library->WriteDigitalScalarU32(task, auto_start, timeout, value, reserved); + auto status = library->WriteDigitalScalarU32(task, auto_start, timeout, value, reserved); - if (status < 0) { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteDigitalU16(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteDigitalU16Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto num_samps_per_chan = function_data->num_samps_per_chan; - auto auto_start = function_data->auto_start; - auto timeout = function_data->timeout; - auto data_layout = function_data->data_layout; - auto reserved = function_data->reserved; - int32 samps_per_chan_written{}; - - ArrayU16Data arrayu16data_message; - packedData.UnpackTo(&arrayu16data_message); - - auto data_array = arrayu16data_message.value(); - auto write_array = std::vector(); - auto size = data_array.size(); - write_array.reserve(size); - std::transform( + MonikerWriteDigitalU16Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto auto_start = function_data->auto_start; + auto timeout = function_data->timeout; + auto data_layout = function_data->data_layout; + auto reserved = function_data->reserved; + int32 samps_per_chan_written {}; + + ArrayU16Data arrayu16data_message; + packedData.UnpackTo(&arrayu16data_message); + + auto data_array = arrayu16data_message.value(); + auto write_array = std::vector(); + auto size = data_array.size(); + write_array.reserve(size); + std::transform( data_array.begin(), data_array.end(), std::back_inserter(write_array), @@ -1509,15448 +1607,15486 @@ ::grpc::Status MonikerWriteDigitalU16(void* data, google::protobuf::Arena& arena return static_cast(x); }); - auto status = library->WriteDigitalU16(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array.data(), &samps_per_chan_written, reserved); + auto status = library->WriteDigitalU16(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array.data(), &samps_per_chan_written, reserved); - if (status < 0) { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteDigitalU32Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto num_samps_per_chan = function_data->num_samps_per_chan; - auto auto_start = function_data->auto_start; - auto timeout = function_data->timeout; - auto data_layout = function_data->data_layout; - auto reserved = function_data->reserved; - int32 samps_per_chan_written{}; - - ArrayU32Data arrayu32data_message; - packedData.UnpackTo(&arrayu32data_message); - - auto data_array = arrayu32data_message.value(); - auto write_array = reinterpret_cast(arrayu32data_message.value().data()); - auto size = data_array.size(); - - auto status = library->WriteDigitalU32(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array, &samps_per_chan_written, reserved); - - if (status < 0) { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::AddCDAQSyncConnection(::grpc::ServerContext* context, const AddCDAQSyncConnectionRequest* request, AddCDAQSyncConnectionResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto port_list_mbcs = convert_from_grpc(request->port_list()); - auto port_list = port_list_mbcs.c_str(); - auto status = library_->AddCDAQSyncConnection(port_list); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + MonikerWriteDigitalU32Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto auto_start = function_data->auto_start; + auto timeout = function_data->timeout; + auto data_layout = function_data->data_layout; + auto reserved = function_data->reserved; + int32 samps_per_chan_written {}; + + ArrayU32Data arrayu32data_message; + packedData.UnpackTo(&arrayu32data_message); + + auto data_array = arrayu32data_message.value(); + auto write_array = reinterpret_cast(arrayu32data_message.value().data()); + auto size = data_array.size(); + + auto status = library->WriteDigitalU32(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array, &samps_per_chan_written, reserved); + + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } - response->set_status(status); return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::AddGlobalChansToTask(::grpc::ServerContext* context, const AddGlobalChansToTaskRequest* request, AddGlobalChansToTaskResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto channel_names_mbcs = convert_from_grpc(request->channel_names()); - auto channel_names = channel_names_mbcs.c_str(); - auto status = library_->AddGlobalChansToTask(task, channel_names); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::AddCDAQSyncConnection(::grpc::ServerContext* context, const AddCDAQSyncConnectionRequest* request, AddCDAQSyncConnectionResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto port_list_mbcs = convert_from_grpc(request->port_list()); + auto port_list = port_list_mbcs.c_str(); + auto status = library_->AddCDAQSyncConnection(port_list); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::AddGlobalChansToTask(::grpc::ServerContext* context, const AddGlobalChansToTaskRequest* request, AddGlobalChansToTaskResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto channel_names_mbcs = convert_from_grpc(request->channel_names()); + auto channel_names = channel_names_mbcs.c_str(); + auto status = library_->AddGlobalChansToTask(task, channel_names); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::AddNetworkDevice(::grpc::ServerContext* context, const AddNetworkDeviceRequest* request, AddNetworkDeviceResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::AddNetworkDevice(::grpc::ServerContext* context, const AddNetworkDeviceRequest* request, AddNetworkDeviceResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto ip_address_mbcs = convert_from_grpc(request->ip_address()); + auto ip_address = ip_address_mbcs.c_str(); + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + bool32 attempt_reservation = request->attempt_reservation(); + float64 timeout = request->timeout(); + + while (true) { + auto status = library_->AddNetworkDevice(ip_address, device_name, attempt_reservation, timeout, nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + uInt32 device_name_out_buffer_size = status; + + std::string device_name_out; + if (device_name_out_buffer_size > 0) { + device_name_out.resize(device_name_out_buffer_size - 1); + } + status = library_->AddNetworkDevice(ip_address, device_name, attempt_reservation, timeout, (char*)device_name_out.data(), device_name_out_buffer_size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(device_name_out_buffer_size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + std::string device_name_out_utf8; + convert_to_grpc(device_name_out, &device_name_out_utf8); + response->set_device_name_out(device_name_out_utf8); + nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_device_name_out())); + return ::grpc::Status::OK; + } + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - try { - auto ip_address_mbcs = convert_from_grpc(request->ip_address()); - auto ip_address = ip_address_mbcs.c_str(); - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - bool32 attempt_reservation = request->attempt_reservation(); - float64 timeout = request->timeout(); - while (true) { - auto status = library_->AddNetworkDevice(ip_address, device_name, attempt_reservation, timeout, nullptr, 0); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::AreConfiguredCDAQSyncPortsDisconnected(::grpc::ServerContext* context, const AreConfiguredCDAQSyncPortsDisconnectedRequest* request, AreConfiguredCDAQSyncPortsDisconnectedResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto chassis_devices_ports_mbcs = convert_from_grpc(request->chassis_devices_ports()); + auto chassis_devices_ports = chassis_devices_ports_mbcs.c_str(); + float64 timeout = request->timeout(); + bool32 disconnected_ports_exist {}; + auto status = library_->AreConfiguredCDAQSyncPortsDisconnected(chassis_devices_ports, timeout, &disconnected_ports_exist); if (!status_ok(status)) { return ConvertApiErrorStatusForTaskHandle(context, status, 0); } - uInt32 device_name_out_buffer_size = status; + response->set_status(status); + response->set_disconnected_ports_exist(disconnected_ports_exist); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } - std::string device_name_out; - if (device_name_out_buffer_size > 0) { - device_name_out.resize(device_name_out_buffer_size - 1); - } - status = library_->AddNetworkDevice(ip_address, device_name, attempt_reservation, timeout, (char*)device_name_out.data(), device_name_out_buffer_size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(device_name_out_buffer_size)) { - // buffer is now too small, try again - continue; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::AutoConfigureCDAQSyncConnections(::grpc::ServerContext* context, const AutoConfigureCDAQSyncConnectionsRequest* request, AutoConfigureCDAQSyncConnectionsResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto chassis_devices_ports_mbcs = convert_from_grpc(request->chassis_devices_ports()); + auto chassis_devices_ports = chassis_devices_ports_mbcs.c_str(); + float64 timeout = request->timeout(); + auto status = library_->AutoConfigureCDAQSyncConnections(chassis_devices_ports, timeout); if (!status_ok(status)) { return ConvertApiErrorStatusForTaskHandle(context, status, 0); } response->set_status(status); - std::string device_name_out_utf8; - convert_to_grpc(device_name_out, &device_name_out_utf8); - response->set_device_name_out(device_name_out_utf8); - nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_device_name_out())); return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::AreConfiguredCDAQSyncPortsDisconnected(::grpc::ServerContext* context, const AreConfiguredCDAQSyncPortsDisconnectedRequest* request, AreConfiguredCDAQSyncPortsDisconnectedResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto chassis_devices_ports_mbcs = convert_from_grpc(request->chassis_devices_ports()); - auto chassis_devices_ports = chassis_devices_ports_mbcs.c_str(); - float64 timeout = request->timeout(); - bool32 disconnected_ports_exist{}; - auto status = library_->AreConfiguredCDAQSyncPortsDisconnected(chassis_devices_ports, timeout, &disconnected_ports_exist); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - response->set_disconnected_ports_exist(disconnected_ports_exist); - return ::grpc::Status::OK; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CalculateReversePolyCoeff(::grpc::ServerContext* context, const CalculateReversePolyCoeffRequest* request, CalculateReversePolyCoeffResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto forward_coeffs = const_cast(request->forward_coeffs().data()); + uInt32 num_forward_coeffs_in = static_cast(request->forward_coeffs().size()); + float64 min_val_x = request->min_val_x(); + float64 max_val_x = request->max_val_x(); + int32 num_points_to_compute = request->num_points_to_compute(); + int32 reverse_poly_order = request->reverse_poly_order(); + response->mutable_reverse_coeffs()->Resize((reverse_poly_order < 0) ? num_forward_coeffs_in : reverse_poly_order + 1, 0); + float64* reverse_coeffs = response->mutable_reverse_coeffs()->mutable_data(); + auto status = library_->CalculateReversePolyCoeff(forward_coeffs, num_forward_coeffs_in, min_val_x, max_val_x, num_points_to_compute, reverse_poly_order, reverse_coeffs); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::AutoConfigureCDAQSyncConnections(::grpc::ServerContext* context, const AutoConfigureCDAQSyncConnectionsRequest* request, AutoConfigureCDAQSyncConnectionsResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto chassis_devices_ports_mbcs = convert_from_grpc(request->chassis_devices_ports()); - auto chassis_devices_ports = chassis_devices_ports_mbcs.c_str(); - float64 timeout = request->timeout(); - auto status = library_->AutoConfigureCDAQSyncConnections(chassis_devices_ports, timeout); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CalculateReversePolyCoeff(::grpc::ServerContext* context, const CalculateReversePolyCoeffRequest* request, CalculateReversePolyCoeffResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto forward_coeffs = const_cast(request->forward_coeffs().data()); - uInt32 num_forward_coeffs_in = static_cast(request->forward_coeffs().size()); - float64 min_val_x = request->min_val_x(); - float64 max_val_x = request->max_val_x(); - int32 num_points_to_compute = request->num_points_to_compute(); - int32 reverse_poly_order = request->reverse_poly_order(); - response->mutable_reverse_coeffs()->Resize((reverse_poly_order < 0) ? num_forward_coeffs_in : reverse_poly_order + 1, 0); - float64* reverse_coeffs = response->mutable_reverse_coeffs()->mutable_data(); - auto status = library_->CalculateReversePolyCoeff(forward_coeffs, num_forward_coeffs_in, min_val_x, max_val_x, num_points_to_compute, reverse_poly_order, reverse_coeffs); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CfgAnlgEdgeRefTrig(::grpc::ServerContext* context, const CfgAnlgEdgeRefTrigRequest* request, CfgAnlgEdgeRefTrigResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto trigger_source_mbcs = convert_from_grpc(request->trigger_source()); - auto trigger_source = trigger_source_mbcs.c_str(); - int32 trigger_slope; - switch (request->trigger_slope_enum_case()) { - case nidaqmx_grpc::CfgAnlgEdgeRefTrigRequest::TriggerSlopeEnumCase::kTriggerSlope: { - trigger_slope = static_cast(request->trigger_slope()); - break; - } - case nidaqmx_grpc::CfgAnlgEdgeRefTrigRequest::TriggerSlopeEnumCase::kTriggerSlopeRaw: { - trigger_slope = static_cast(request->trigger_slope_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CfgAnlgEdgeRefTrig(::grpc::ServerContext* context, const CfgAnlgEdgeRefTrigRequest* request, CfgAnlgEdgeRefTrigResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto trigger_source_mbcs = convert_from_grpc(request->trigger_source()); + auto trigger_source = trigger_source_mbcs.c_str(); + int32 trigger_slope; + switch (request->trigger_slope_enum_case()) { + case nidaqmx_grpc::CfgAnlgEdgeRefTrigRequest::TriggerSlopeEnumCase::kTriggerSlope: { + trigger_slope = static_cast(request->trigger_slope()); + break; + } + case nidaqmx_grpc::CfgAnlgEdgeRefTrigRequest::TriggerSlopeEnumCase::kTriggerSlopeRaw: { + trigger_slope = static_cast(request->trigger_slope_raw()); + break; + } + case nidaqmx_grpc::CfgAnlgEdgeRefTrigRequest::TriggerSlopeEnumCase::TRIGGER_SLOPE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for trigger_slope was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CfgAnlgEdgeRefTrigRequest::TriggerSlopeEnumCase::TRIGGER_SLOPE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for trigger_slope was not specified or out of range"); - break; + + float64 trigger_level = request->trigger_level(); + uInt32 pretrigger_samples = request->pretrigger_samples(); + auto status = library_->CfgAnlgEdgeRefTrig(task, trigger_source, trigger_slope, trigger_level, pretrigger_samples); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - float64 trigger_level = request->trigger_level(); - uInt32 pretrigger_samples = request->pretrigger_samples(); - auto status = library_->CfgAnlgEdgeRefTrig(task, trigger_source, trigger_slope, trigger_level, pretrigger_samples); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CfgAnlgEdgeStartTrig(::grpc::ServerContext* context, const CfgAnlgEdgeStartTrigRequest* request, CfgAnlgEdgeStartTrigResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto trigger_source_mbcs = convert_from_grpc(request->trigger_source()); - auto trigger_source = trigger_source_mbcs.c_str(); - int32 trigger_slope; - switch (request->trigger_slope_enum_case()) { - case nidaqmx_grpc::CfgAnlgEdgeStartTrigRequest::TriggerSlopeEnumCase::kTriggerSlope: { - trigger_slope = static_cast(request->trigger_slope()); - break; - } - case nidaqmx_grpc::CfgAnlgEdgeStartTrigRequest::TriggerSlopeEnumCase::kTriggerSlopeRaw: { - trigger_slope = static_cast(request->trigger_slope_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CfgAnlgEdgeStartTrig(::grpc::ServerContext* context, const CfgAnlgEdgeStartTrigRequest* request, CfgAnlgEdgeStartTrigResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto trigger_source_mbcs = convert_from_grpc(request->trigger_source()); + auto trigger_source = trigger_source_mbcs.c_str(); + int32 trigger_slope; + switch (request->trigger_slope_enum_case()) { + case nidaqmx_grpc::CfgAnlgEdgeStartTrigRequest::TriggerSlopeEnumCase::kTriggerSlope: { + trigger_slope = static_cast(request->trigger_slope()); + break; + } + case nidaqmx_grpc::CfgAnlgEdgeStartTrigRequest::TriggerSlopeEnumCase::kTriggerSlopeRaw: { + trigger_slope = static_cast(request->trigger_slope_raw()); + break; + } + case nidaqmx_grpc::CfgAnlgEdgeStartTrigRequest::TriggerSlopeEnumCase::TRIGGER_SLOPE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for trigger_slope was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CfgAnlgEdgeStartTrigRequest::TriggerSlopeEnumCase::TRIGGER_SLOPE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for trigger_slope was not specified or out of range"); - break; + + float64 trigger_level = request->trigger_level(); + auto status = library_->CfgAnlgEdgeStartTrig(task, trigger_source, trigger_slope, trigger_level); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - float64 trigger_level = request->trigger_level(); - auto status = library_->CfgAnlgEdgeStartTrig(task, trigger_source, trigger_slope, trigger_level); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CfgAnlgMultiEdgeRefTrig(::grpc::ServerContext* context, const CfgAnlgMultiEdgeRefTrigRequest* request, CfgAnlgMultiEdgeRefTrigResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto trigger_sources_mbcs = convert_from_grpc(request->trigger_sources()); - auto trigger_sources = trigger_sources_mbcs.c_str(); - auto trigger_slope_array_vector = std::vector(); - trigger_slope_array_vector.reserve(request->trigger_slope_array().size()); - std::transform( + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CfgAnlgMultiEdgeRefTrig(::grpc::ServerContext* context, const CfgAnlgMultiEdgeRefTrigRequest* request, CfgAnlgMultiEdgeRefTrigResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto trigger_sources_mbcs = convert_from_grpc(request->trigger_sources()); + auto trigger_sources = trigger_sources_mbcs.c_str(); + auto trigger_slope_array_vector = std::vector(); + trigger_slope_array_vector.reserve(request->trigger_slope_array().size()); + std::transform( request->trigger_slope_array().begin(), request->trigger_slope_array().end(), std::back_inserter(trigger_slope_array_vector), [](auto x) { return x; }); - auto trigger_slope_array = trigger_slope_array_vector.data(); + auto trigger_slope_array = trigger_slope_array_vector.data(); - auto trigger_level_array = const_cast(request->trigger_level_array().data()); - uInt32 pretrigger_samples = request->pretrigger_samples(); - auto array_size_determine_from_sizes = std::array{ + auto trigger_level_array = const_cast(request->trigger_level_array().data()); + uInt32 pretrigger_samples = request->pretrigger_samples(); + auto array_size_determine_from_sizes = std::array + { request->trigger_slope_array_size(), - request->trigger_level_array_size()}; - const auto array_size_size_calculation = calculate_linked_array_size(array_size_determine_from_sizes, false); + request->trigger_level_array_size() + }; + const auto array_size_size_calculation = calculate_linked_array_size(array_size_determine_from_sizes, false); - if (array_size_size_calculation.match_state == MatchState::MISMATCH) { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The sizes of linked repeated fields [trigger_slope_array, trigger_level_array] do not match"); - } - auto array_size = array_size_size_calculation.size; + if (array_size_size_calculation.match_state == MatchState::MISMATCH) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The sizes of linked repeated fields [trigger_slope_array, trigger_level_array] do not match"); + } + auto array_size = array_size_size_calculation.size; - auto status = library_->CfgAnlgMultiEdgeRefTrig(task, trigger_sources, trigger_slope_array, trigger_level_array, pretrigger_samples, array_size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + auto status = library_->CfgAnlgMultiEdgeRefTrig(task, trigger_sources, trigger_slope_array, trigger_level_array, pretrigger_samples, array_size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CfgAnlgMultiEdgeStartTrig(::grpc::ServerContext* context, const CfgAnlgMultiEdgeStartTrigRequest* request, CfgAnlgMultiEdgeStartTrigResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto trigger_sources_mbcs = convert_from_grpc(request->trigger_sources()); - auto trigger_sources = trigger_sources_mbcs.c_str(); - auto trigger_slope_array_vector = std::vector(); - trigger_slope_array_vector.reserve(request->trigger_slope_array().size()); - std::transform( + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CfgAnlgMultiEdgeStartTrig(::grpc::ServerContext* context, const CfgAnlgMultiEdgeStartTrigRequest* request, CfgAnlgMultiEdgeStartTrigResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto trigger_sources_mbcs = convert_from_grpc(request->trigger_sources()); + auto trigger_sources = trigger_sources_mbcs.c_str(); + auto trigger_slope_array_vector = std::vector(); + trigger_slope_array_vector.reserve(request->trigger_slope_array().size()); + std::transform( request->trigger_slope_array().begin(), request->trigger_slope_array().end(), std::back_inserter(trigger_slope_array_vector), [](auto x) { return x; }); - auto trigger_slope_array = trigger_slope_array_vector.data(); + auto trigger_slope_array = trigger_slope_array_vector.data(); - auto trigger_level_array = const_cast(request->trigger_level_array().data()); - auto array_size_determine_from_sizes = std::array{ + auto trigger_level_array = const_cast(request->trigger_level_array().data()); + auto array_size_determine_from_sizes = std::array + { request->trigger_slope_array_size(), - request->trigger_level_array_size()}; - const auto array_size_size_calculation = calculate_linked_array_size(array_size_determine_from_sizes, false); + request->trigger_level_array_size() + }; + const auto array_size_size_calculation = calculate_linked_array_size(array_size_determine_from_sizes, false); - if (array_size_size_calculation.match_state == MatchState::MISMATCH) { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The sizes of linked repeated fields [trigger_slope_array, trigger_level_array] do not match"); - } - auto array_size = array_size_size_calculation.size; + if (array_size_size_calculation.match_state == MatchState::MISMATCH) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The sizes of linked repeated fields [trigger_slope_array, trigger_level_array] do not match"); + } + auto array_size = array_size_size_calculation.size; - auto status = library_->CfgAnlgMultiEdgeStartTrig(task, trigger_sources, trigger_slope_array, trigger_level_array, array_size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + auto status = library_->CfgAnlgMultiEdgeStartTrig(task, trigger_sources, trigger_slope_array, trigger_level_array, array_size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CfgAnlgWindowRefTrig(::grpc::ServerContext* context, const CfgAnlgWindowRefTrigRequest* request, CfgAnlgWindowRefTrigResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto trigger_source_mbcs = convert_from_grpc(request->trigger_source()); - auto trigger_source = trigger_source_mbcs.c_str(); - int32 trigger_when; - switch (request->trigger_when_enum_case()) { - case nidaqmx_grpc::CfgAnlgWindowRefTrigRequest::TriggerWhenEnumCase::kTriggerWhen: { - trigger_when = static_cast(request->trigger_when()); - break; - } - case nidaqmx_grpc::CfgAnlgWindowRefTrigRequest::TriggerWhenEnumCase::kTriggerWhenRaw: { - trigger_when = static_cast(request->trigger_when_raw()); - break; - } - case nidaqmx_grpc::CfgAnlgWindowRefTrigRequest::TriggerWhenEnumCase::TRIGGER_WHEN_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for trigger_when was not specified or out of range"); - break; - } - } - - float64 window_top = request->window_top(); - float64 window_bottom = request->window_bottom(); - uInt32 pretrigger_samples = request->pretrigger_samples(); - auto status = library_->CfgAnlgWindowRefTrig(task, trigger_source, trigger_when, window_top, window_bottom, pretrigger_samples); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CfgAnlgWindowStartTrig(::grpc::ServerContext* context, const CfgAnlgWindowStartTrigRequest* request, CfgAnlgWindowStartTrigResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto trigger_source_mbcs = convert_from_grpc(request->trigger_source()); - auto trigger_source = trigger_source_mbcs.c_str(); - int32 trigger_when; - switch (request->trigger_when_enum_case()) { - case nidaqmx_grpc::CfgAnlgWindowStartTrigRequest::TriggerWhenEnumCase::kTriggerWhen: { - trigger_when = static_cast(request->trigger_when()); - break; - } - case nidaqmx_grpc::CfgAnlgWindowStartTrigRequest::TriggerWhenEnumCase::kTriggerWhenRaw: { - trigger_when = static_cast(request->trigger_when_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CfgAnlgWindowRefTrig(::grpc::ServerContext* context, const CfgAnlgWindowRefTrigRequest* request, CfgAnlgWindowRefTrigResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto trigger_source_mbcs = convert_from_grpc(request->trigger_source()); + auto trigger_source = trigger_source_mbcs.c_str(); + int32 trigger_when; + switch (request->trigger_when_enum_case()) { + case nidaqmx_grpc::CfgAnlgWindowRefTrigRequest::TriggerWhenEnumCase::kTriggerWhen: { + trigger_when = static_cast(request->trigger_when()); + break; + } + case nidaqmx_grpc::CfgAnlgWindowRefTrigRequest::TriggerWhenEnumCase::kTriggerWhenRaw: { + trigger_when = static_cast(request->trigger_when_raw()); + break; + } + case nidaqmx_grpc::CfgAnlgWindowRefTrigRequest::TriggerWhenEnumCase::TRIGGER_WHEN_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for trigger_when was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CfgAnlgWindowStartTrigRequest::TriggerWhenEnumCase::TRIGGER_WHEN_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for trigger_when was not specified or out of range"); - break; + + float64 window_top = request->window_top(); + float64 window_bottom = request->window_bottom(); + uInt32 pretrigger_samples = request->pretrigger_samples(); + auto status = library_->CfgAnlgWindowRefTrig(task, trigger_source, trigger_when, window_top, window_bottom, pretrigger_samples); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - float64 window_top = request->window_top(); - float64 window_bottom = request->window_bottom(); - auto status = library_->CfgAnlgWindowStartTrig(task, trigger_source, trigger_when, window_top, window_bottom); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CfgBurstHandshakingTimingExportClock(::grpc::ServerContext* context, const CfgBurstHandshakingTimingExportClockRequest* request, CfgBurstHandshakingTimingExportClockResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 sample_mode; - switch (request->sample_mode_enum_case()) { - case nidaqmx_grpc::CfgBurstHandshakingTimingExportClockRequest::SampleModeEnumCase::kSampleMode: { - sample_mode = static_cast(request->sample_mode()); - break; - } - case nidaqmx_grpc::CfgBurstHandshakingTimingExportClockRequest::SampleModeEnumCase::kSampleModeRaw: { - sample_mode = static_cast(request->sample_mode_raw()); - break; - } - case nidaqmx_grpc::CfgBurstHandshakingTimingExportClockRequest::SampleModeEnumCase::SAMPLE_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sample_mode was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CfgAnlgWindowStartTrig(::grpc::ServerContext* context, const CfgAnlgWindowStartTrigRequest* request, CfgAnlgWindowStartTrigResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - - uInt64 samps_per_chan = request->samps_per_chan(); - float64 sample_clk_rate = request->sample_clk_rate(); - auto sample_clk_outp_term_mbcs = convert_from_grpc(request->sample_clk_outp_term()); - auto sample_clk_outp_term = sample_clk_outp_term_mbcs.c_str(); - int32 sample_clk_pulse_polarity; - switch (request->sample_clk_pulse_polarity_enum_case()) { - case nidaqmx_grpc::CfgBurstHandshakingTimingExportClockRequest::SampleClkPulsePolarityEnumCase::kSampleClkPulsePolarity: { - sample_clk_pulse_polarity = static_cast(request->sample_clk_pulse_polarity()); - break; - } - case nidaqmx_grpc::CfgBurstHandshakingTimingExportClockRequest::SampleClkPulsePolarityEnumCase::kSampleClkPulsePolarityRaw: { - sample_clk_pulse_polarity = static_cast(request->sample_clk_pulse_polarity_raw()); - break; + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto trigger_source_mbcs = convert_from_grpc(request->trigger_source()); + auto trigger_source = trigger_source_mbcs.c_str(); + int32 trigger_when; + switch (request->trigger_when_enum_case()) { + case nidaqmx_grpc::CfgAnlgWindowStartTrigRequest::TriggerWhenEnumCase::kTriggerWhen: { + trigger_when = static_cast(request->trigger_when()); + break; + } + case nidaqmx_grpc::CfgAnlgWindowStartTrigRequest::TriggerWhenEnumCase::kTriggerWhenRaw: { + trigger_when = static_cast(request->trigger_when_raw()); + break; + } + case nidaqmx_grpc::CfgAnlgWindowStartTrigRequest::TriggerWhenEnumCase::TRIGGER_WHEN_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for trigger_when was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CfgBurstHandshakingTimingExportClockRequest::SampleClkPulsePolarityEnumCase::SAMPLE_CLK_PULSE_POLARITY_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sample_clk_pulse_polarity was not specified or out of range"); - break; + + float64 window_top = request->window_top(); + float64 window_bottom = request->window_bottom(); + auto status = library_->CfgAnlgWindowStartTrig(task, trigger_source, trigger_when, window_top, window_bottom); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } + } - int32 pause_when; - switch (request->pause_when_enum_case()) { - case nidaqmx_grpc::CfgBurstHandshakingTimingExportClockRequest::PauseWhenEnumCase::kPauseWhen: { - pause_when = static_cast(request->pause_when()); - break; - } - case nidaqmx_grpc::CfgBurstHandshakingTimingExportClockRequest::PauseWhenEnumCase::kPauseWhenRaw: { - pause_when = static_cast(request->pause_when_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CfgBurstHandshakingTimingExportClock(::grpc::ServerContext* context, const CfgBurstHandshakingTimingExportClockRequest* request, CfgBurstHandshakingTimingExportClockResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 sample_mode; + switch (request->sample_mode_enum_case()) { + case nidaqmx_grpc::CfgBurstHandshakingTimingExportClockRequest::SampleModeEnumCase::kSampleMode: { + sample_mode = static_cast(request->sample_mode()); + break; + } + case nidaqmx_grpc::CfgBurstHandshakingTimingExportClockRequest::SampleModeEnumCase::kSampleModeRaw: { + sample_mode = static_cast(request->sample_mode_raw()); + break; + } + case nidaqmx_grpc::CfgBurstHandshakingTimingExportClockRequest::SampleModeEnumCase::SAMPLE_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sample_mode was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CfgBurstHandshakingTimingExportClockRequest::PauseWhenEnumCase::PAUSE_WHEN_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for pause_when was not specified or out of range"); - break; + + uInt64 samps_per_chan = request->samps_per_chan(); + float64 sample_clk_rate = request->sample_clk_rate(); + auto sample_clk_outp_term_mbcs = convert_from_grpc(request->sample_clk_outp_term()); + auto sample_clk_outp_term = sample_clk_outp_term_mbcs.c_str(); + int32 sample_clk_pulse_polarity; + switch (request->sample_clk_pulse_polarity_enum_case()) { + case nidaqmx_grpc::CfgBurstHandshakingTimingExportClockRequest::SampleClkPulsePolarityEnumCase::kSampleClkPulsePolarity: { + sample_clk_pulse_polarity = static_cast(request->sample_clk_pulse_polarity()); + break; + } + case nidaqmx_grpc::CfgBurstHandshakingTimingExportClockRequest::SampleClkPulsePolarityEnumCase::kSampleClkPulsePolarityRaw: { + sample_clk_pulse_polarity = static_cast(request->sample_clk_pulse_polarity_raw()); + break; + } + case nidaqmx_grpc::CfgBurstHandshakingTimingExportClockRequest::SampleClkPulsePolarityEnumCase::SAMPLE_CLK_PULSE_POLARITY_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sample_clk_pulse_polarity was not specified or out of range"); + break; + } } - } - int32 ready_event_active_level; - switch (request->ready_event_active_level_enum_case()) { - case nidaqmx_grpc::CfgBurstHandshakingTimingExportClockRequest::ReadyEventActiveLevelEnumCase::kReadyEventActiveLevel: { - ready_event_active_level = static_cast(request->ready_event_active_level()); - break; + int32 pause_when; + switch (request->pause_when_enum_case()) { + case nidaqmx_grpc::CfgBurstHandshakingTimingExportClockRequest::PauseWhenEnumCase::kPauseWhen: { + pause_when = static_cast(request->pause_when()); + break; + } + case nidaqmx_grpc::CfgBurstHandshakingTimingExportClockRequest::PauseWhenEnumCase::kPauseWhenRaw: { + pause_when = static_cast(request->pause_when_raw()); + break; + } + case nidaqmx_grpc::CfgBurstHandshakingTimingExportClockRequest::PauseWhenEnumCase::PAUSE_WHEN_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for pause_when was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CfgBurstHandshakingTimingExportClockRequest::ReadyEventActiveLevelEnumCase::kReadyEventActiveLevelRaw: { - ready_event_active_level = static_cast(request->ready_event_active_level_raw()); - break; + + int32 ready_event_active_level; + switch (request->ready_event_active_level_enum_case()) { + case nidaqmx_grpc::CfgBurstHandshakingTimingExportClockRequest::ReadyEventActiveLevelEnumCase::kReadyEventActiveLevel: { + ready_event_active_level = static_cast(request->ready_event_active_level()); + break; + } + case nidaqmx_grpc::CfgBurstHandshakingTimingExportClockRequest::ReadyEventActiveLevelEnumCase::kReadyEventActiveLevelRaw: { + ready_event_active_level = static_cast(request->ready_event_active_level_raw()); + break; + } + case nidaqmx_grpc::CfgBurstHandshakingTimingExportClockRequest::ReadyEventActiveLevelEnumCase::READY_EVENT_ACTIVE_LEVEL_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for ready_event_active_level was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CfgBurstHandshakingTimingExportClockRequest::ReadyEventActiveLevelEnumCase::READY_EVENT_ACTIVE_LEVEL_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for ready_event_active_level was not specified or out of range"); - break; + + auto status = library_->CfgBurstHandshakingTimingExportClock(task, sample_mode, samps_per_chan, sample_clk_rate, sample_clk_outp_term, sample_clk_pulse_polarity, pause_when, ready_event_active_level); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - auto status = library_->CfgBurstHandshakingTimingExportClock(task, sample_mode, samps_per_chan, sample_clk_rate, sample_clk_outp_term, sample_clk_pulse_polarity, pause_when, ready_event_active_level); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CfgBurstHandshakingTimingImportClock(::grpc::ServerContext* context, const CfgBurstHandshakingTimingImportClockRequest* request, CfgBurstHandshakingTimingImportClockResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 sample_mode; - switch (request->sample_mode_enum_case()) { - case nidaqmx_grpc::CfgBurstHandshakingTimingImportClockRequest::SampleModeEnumCase::kSampleMode: { - sample_mode = static_cast(request->sample_mode()); - break; - } - case nidaqmx_grpc::CfgBurstHandshakingTimingImportClockRequest::SampleModeEnumCase::kSampleModeRaw: { - sample_mode = static_cast(request->sample_mode_raw()); - break; - } - case nidaqmx_grpc::CfgBurstHandshakingTimingImportClockRequest::SampleModeEnumCase::SAMPLE_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sample_mode was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CfgBurstHandshakingTimingImportClock(::grpc::ServerContext* context, const CfgBurstHandshakingTimingImportClockRequest* request, CfgBurstHandshakingTimingImportClockResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 sample_mode; + switch (request->sample_mode_enum_case()) { + case nidaqmx_grpc::CfgBurstHandshakingTimingImportClockRequest::SampleModeEnumCase::kSampleMode: { + sample_mode = static_cast(request->sample_mode()); + break; + } + case nidaqmx_grpc::CfgBurstHandshakingTimingImportClockRequest::SampleModeEnumCase::kSampleModeRaw: { + sample_mode = static_cast(request->sample_mode_raw()); + break; + } + case nidaqmx_grpc::CfgBurstHandshakingTimingImportClockRequest::SampleModeEnumCase::SAMPLE_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sample_mode was not specified or out of range"); + break; + } + } - uInt64 samps_per_chan = request->samps_per_chan(); - float64 sample_clk_rate = request->sample_clk_rate(); - auto sample_clk_src_mbcs = convert_from_grpc(request->sample_clk_src()); - auto sample_clk_src = sample_clk_src_mbcs.c_str(); - int32 sample_clk_active_edge; - switch (request->sample_clk_active_edge_enum_case()) { - case nidaqmx_grpc::CfgBurstHandshakingTimingImportClockRequest::SampleClkActiveEdgeEnumCase::kSampleClkActiveEdge: { - sample_clk_active_edge = static_cast(request->sample_clk_active_edge()); - break; + uInt64 samps_per_chan = request->samps_per_chan(); + float64 sample_clk_rate = request->sample_clk_rate(); + auto sample_clk_src_mbcs = convert_from_grpc(request->sample_clk_src()); + auto sample_clk_src = sample_clk_src_mbcs.c_str(); + int32 sample_clk_active_edge; + switch (request->sample_clk_active_edge_enum_case()) { + case nidaqmx_grpc::CfgBurstHandshakingTimingImportClockRequest::SampleClkActiveEdgeEnumCase::kSampleClkActiveEdge: { + sample_clk_active_edge = static_cast(request->sample_clk_active_edge()); + break; + } + case nidaqmx_grpc::CfgBurstHandshakingTimingImportClockRequest::SampleClkActiveEdgeEnumCase::kSampleClkActiveEdgeRaw: { + sample_clk_active_edge = static_cast(request->sample_clk_active_edge_raw()); + break; + } + case nidaqmx_grpc::CfgBurstHandshakingTimingImportClockRequest::SampleClkActiveEdgeEnumCase::SAMPLE_CLK_ACTIVE_EDGE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sample_clk_active_edge was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CfgBurstHandshakingTimingImportClockRequest::SampleClkActiveEdgeEnumCase::kSampleClkActiveEdgeRaw: { - sample_clk_active_edge = static_cast(request->sample_clk_active_edge_raw()); - break; + + int32 pause_when; + switch (request->pause_when_enum_case()) { + case nidaqmx_grpc::CfgBurstHandshakingTimingImportClockRequest::PauseWhenEnumCase::kPauseWhen: { + pause_when = static_cast(request->pause_when()); + break; + } + case nidaqmx_grpc::CfgBurstHandshakingTimingImportClockRequest::PauseWhenEnumCase::kPauseWhenRaw: { + pause_when = static_cast(request->pause_when_raw()); + break; + } + case nidaqmx_grpc::CfgBurstHandshakingTimingImportClockRequest::PauseWhenEnumCase::PAUSE_WHEN_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for pause_when was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CfgBurstHandshakingTimingImportClockRequest::SampleClkActiveEdgeEnumCase::SAMPLE_CLK_ACTIVE_EDGE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sample_clk_active_edge was not specified or out of range"); - break; + + int32 ready_event_active_level; + switch (request->ready_event_active_level_enum_case()) { + case nidaqmx_grpc::CfgBurstHandshakingTimingImportClockRequest::ReadyEventActiveLevelEnumCase::kReadyEventActiveLevel: { + ready_event_active_level = static_cast(request->ready_event_active_level()); + break; + } + case nidaqmx_grpc::CfgBurstHandshakingTimingImportClockRequest::ReadyEventActiveLevelEnumCase::kReadyEventActiveLevelRaw: { + ready_event_active_level = static_cast(request->ready_event_active_level_raw()); + break; + } + case nidaqmx_grpc::CfgBurstHandshakingTimingImportClockRequest::ReadyEventActiveLevelEnumCase::READY_EVENT_ACTIVE_LEVEL_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for ready_event_active_level was not specified or out of range"); + break; + } } - } - int32 pause_when; - switch (request->pause_when_enum_case()) { - case nidaqmx_grpc::CfgBurstHandshakingTimingImportClockRequest::PauseWhenEnumCase::kPauseWhen: { - pause_when = static_cast(request->pause_when()); - break; + auto status = library_->CfgBurstHandshakingTimingImportClock(task, sample_mode, samps_per_chan, sample_clk_rate, sample_clk_src, sample_clk_active_edge, pause_when, ready_event_active_level); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - case nidaqmx_grpc::CfgBurstHandshakingTimingImportClockRequest::PauseWhenEnumCase::kPauseWhenRaw: { - pause_when = static_cast(request->pause_when_raw()); - break; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CfgChangeDetectionTiming(::grpc::ServerContext* context, const CfgChangeDetectionTimingRequest* request, CfgChangeDetectionTimingResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto rising_edge_chan_mbcs = convert_from_grpc(request->rising_edge_chan()); + auto rising_edge_chan = rising_edge_chan_mbcs.c_str(); + auto falling_edge_chan_mbcs = convert_from_grpc(request->falling_edge_chan()); + auto falling_edge_chan = falling_edge_chan_mbcs.c_str(); + int32 sample_mode; + switch (request->sample_mode_enum_case()) { + case nidaqmx_grpc::CfgChangeDetectionTimingRequest::SampleModeEnumCase::kSampleMode: { + sample_mode = static_cast(request->sample_mode()); + break; + } + case nidaqmx_grpc::CfgChangeDetectionTimingRequest::SampleModeEnumCase::kSampleModeRaw: { + sample_mode = static_cast(request->sample_mode_raw()); + break; + } + case nidaqmx_grpc::CfgChangeDetectionTimingRequest::SampleModeEnumCase::SAMPLE_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sample_mode was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CfgBurstHandshakingTimingImportClockRequest::PauseWhenEnumCase::PAUSE_WHEN_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for pause_when was not specified or out of range"); - break; + + uInt64 samps_per_chan = request->samps_per_chan(); + auto status = library_->CfgChangeDetectionTiming(task, rising_edge_chan, falling_edge_chan, sample_mode, samps_per_chan); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } + } - int32 ready_event_active_level; - switch (request->ready_event_active_level_enum_case()) { - case nidaqmx_grpc::CfgBurstHandshakingTimingImportClockRequest::ReadyEventActiveLevelEnumCase::kReadyEventActiveLevel: { - ready_event_active_level = static_cast(request->ready_event_active_level()); - break; - } - case nidaqmx_grpc::CfgBurstHandshakingTimingImportClockRequest::ReadyEventActiveLevelEnumCase::kReadyEventActiveLevelRaw: { - ready_event_active_level = static_cast(request->ready_event_active_level_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CfgDigEdgeRefTrig(::grpc::ServerContext* context, const CfgDigEdgeRefTrigRequest* request, CfgDigEdgeRefTrigResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto trigger_source_mbcs = convert_from_grpc(request->trigger_source()); + auto trigger_source = trigger_source_mbcs.c_str(); + int32 trigger_edge; + switch (request->trigger_edge_enum_case()) { + case nidaqmx_grpc::CfgDigEdgeRefTrigRequest::TriggerEdgeEnumCase::kTriggerEdge: { + trigger_edge = static_cast(request->trigger_edge()); + break; + } + case nidaqmx_grpc::CfgDigEdgeRefTrigRequest::TriggerEdgeEnumCase::kTriggerEdgeRaw: { + trigger_edge = static_cast(request->trigger_edge_raw()); + break; + } + case nidaqmx_grpc::CfgDigEdgeRefTrigRequest::TriggerEdgeEnumCase::TRIGGER_EDGE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for trigger_edge was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CfgBurstHandshakingTimingImportClockRequest::ReadyEventActiveLevelEnumCase::READY_EVENT_ACTIVE_LEVEL_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for ready_event_active_level was not specified or out of range"); - break; + + uInt32 pretrigger_samples = request->pretrigger_samples(); + auto status = library_->CfgDigEdgeRefTrig(task, trigger_source, trigger_edge, pretrigger_samples); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - auto status = library_->CfgBurstHandshakingTimingImportClock(task, sample_mode, samps_per_chan, sample_clk_rate, sample_clk_src, sample_clk_active_edge, pause_when, ready_event_active_level); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CfgChangeDetectionTiming(::grpc::ServerContext* context, const CfgChangeDetectionTimingRequest* request, CfgChangeDetectionTimingResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto rising_edge_chan_mbcs = convert_from_grpc(request->rising_edge_chan()); - auto rising_edge_chan = rising_edge_chan_mbcs.c_str(); - auto falling_edge_chan_mbcs = convert_from_grpc(request->falling_edge_chan()); - auto falling_edge_chan = falling_edge_chan_mbcs.c_str(); - int32 sample_mode; - switch (request->sample_mode_enum_case()) { - case nidaqmx_grpc::CfgChangeDetectionTimingRequest::SampleModeEnumCase::kSampleMode: { - sample_mode = static_cast(request->sample_mode()); - break; - } - case nidaqmx_grpc::CfgChangeDetectionTimingRequest::SampleModeEnumCase::kSampleModeRaw: { - sample_mode = static_cast(request->sample_mode_raw()); - break; - } - case nidaqmx_grpc::CfgChangeDetectionTimingRequest::SampleModeEnumCase::SAMPLE_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sample_mode was not specified or out of range"); - break; - } - } - - uInt64 samps_per_chan = request->samps_per_chan(); - auto status = library_->CfgChangeDetectionTiming(task, rising_edge_chan, falling_edge_chan, sample_mode, samps_per_chan); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CfgDigEdgeStartTrig(::grpc::ServerContext* context, const CfgDigEdgeStartTrigRequest* request, CfgDigEdgeStartTrigResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto trigger_source_mbcs = convert_from_grpc(request->trigger_source()); + auto trigger_source = trigger_source_mbcs.c_str(); + int32 trigger_edge; + switch (request->trigger_edge_enum_case()) { + case nidaqmx_grpc::CfgDigEdgeStartTrigRequest::TriggerEdgeEnumCase::kTriggerEdge: { + trigger_edge = static_cast(request->trigger_edge()); + break; + } + case nidaqmx_grpc::CfgDigEdgeStartTrigRequest::TriggerEdgeEnumCase::kTriggerEdgeRaw: { + trigger_edge = static_cast(request->trigger_edge_raw()); + break; + } + case nidaqmx_grpc::CfgDigEdgeStartTrigRequest::TriggerEdgeEnumCase::TRIGGER_EDGE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for trigger_edge was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CfgDigEdgeRefTrig(::grpc::ServerContext* context, const CfgDigEdgeRefTrigRequest* request, CfgDigEdgeRefTrigResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto trigger_source_mbcs = convert_from_grpc(request->trigger_source()); - auto trigger_source = trigger_source_mbcs.c_str(); - int32 trigger_edge; - switch (request->trigger_edge_enum_case()) { - case nidaqmx_grpc::CfgDigEdgeRefTrigRequest::TriggerEdgeEnumCase::kTriggerEdge: { - trigger_edge = static_cast(request->trigger_edge()); - break; + auto status = library_->CfgDigEdgeStartTrig(task, trigger_source, trigger_edge); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - case nidaqmx_grpc::CfgDigEdgeRefTrigRequest::TriggerEdgeEnumCase::kTriggerEdgeRaw: { - trigger_edge = static_cast(request->trigger_edge_raw()); - break; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CfgDigPatternRefTrig(::grpc::ServerContext* context, const CfgDigPatternRefTrigRequest* request, CfgDigPatternRefTrigResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto trigger_source_mbcs = convert_from_grpc(request->trigger_source()); + auto trigger_source = trigger_source_mbcs.c_str(); + auto trigger_pattern_mbcs = convert_from_grpc(request->trigger_pattern()); + auto trigger_pattern = trigger_pattern_mbcs.c_str(); + int32 trigger_when; + switch (request->trigger_when_enum_case()) { + case nidaqmx_grpc::CfgDigPatternRefTrigRequest::TriggerWhenEnumCase::kTriggerWhen: { + trigger_when = static_cast(request->trigger_when()); + break; + } + case nidaqmx_grpc::CfgDigPatternRefTrigRequest::TriggerWhenEnumCase::kTriggerWhenRaw: { + trigger_when = static_cast(request->trigger_when_raw()); + break; + } + case nidaqmx_grpc::CfgDigPatternRefTrigRequest::TriggerWhenEnumCase::TRIGGER_WHEN_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for trigger_when was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CfgDigEdgeRefTrigRequest::TriggerEdgeEnumCase::TRIGGER_EDGE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for trigger_edge was not specified or out of range"); - break; + + uInt32 pretrigger_samples = request->pretrigger_samples(); + auto status = library_->CfgDigPatternRefTrig(task, trigger_source, trigger_pattern, trigger_when, pretrigger_samples); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CfgDigPatternStartTrig(::grpc::ServerContext* context, const CfgDigPatternStartTrigRequest* request, CfgDigPatternStartTrigResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto trigger_source_mbcs = convert_from_grpc(request->trigger_source()); + auto trigger_source = trigger_source_mbcs.c_str(); + auto trigger_pattern_mbcs = convert_from_grpc(request->trigger_pattern()); + auto trigger_pattern = trigger_pattern_mbcs.c_str(); + int32 trigger_when; + switch (request->trigger_when_enum_case()) { + case nidaqmx_grpc::CfgDigPatternStartTrigRequest::TriggerWhenEnumCase::kTriggerWhen: { + trigger_when = static_cast(request->trigger_when()); + break; + } + case nidaqmx_grpc::CfgDigPatternStartTrigRequest::TriggerWhenEnumCase::kTriggerWhenRaw: { + trigger_when = static_cast(request->trigger_when_raw()); + break; + } + case nidaqmx_grpc::CfgDigPatternStartTrigRequest::TriggerWhenEnumCase::TRIGGER_WHEN_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for trigger_when was not specified or out of range"); + break; + } + } - uInt32 pretrigger_samples = request->pretrigger_samples(); - auto status = library_->CfgDigEdgeRefTrig(task, trigger_source, trigger_edge, pretrigger_samples); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + auto status = library_->CfgDigPatternStartTrig(task, trigger_source, trigger_pattern, trigger_when); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CfgDigEdgeStartTrig(::grpc::ServerContext* context, const CfgDigEdgeStartTrigRequest* request, CfgDigEdgeStartTrigResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto trigger_source_mbcs = convert_from_grpc(request->trigger_source()); - auto trigger_source = trigger_source_mbcs.c_str(); - int32 trigger_edge; - switch (request->trigger_edge_enum_case()) { - case nidaqmx_grpc::CfgDigEdgeStartTrigRequest::TriggerEdgeEnumCase::kTriggerEdge: { - trigger_edge = static_cast(request->trigger_edge()); - break; - } - case nidaqmx_grpc::CfgDigEdgeStartTrigRequest::TriggerEdgeEnumCase::kTriggerEdgeRaw: { - trigger_edge = static_cast(request->trigger_edge_raw()); - break; - } - case nidaqmx_grpc::CfgDigEdgeStartTrigRequest::TriggerEdgeEnumCase::TRIGGER_EDGE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for trigger_edge was not specified or out of range"); - break; - } - } - - auto status = library_->CfgDigEdgeStartTrig(task, trigger_source, trigger_edge); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CfgHandshakingTiming(::grpc::ServerContext* context, const CfgHandshakingTimingRequest* request, CfgHandshakingTimingResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CfgDigPatternRefTrig(::grpc::ServerContext* context, const CfgDigPatternRefTrigRequest* request, CfgDigPatternRefTrigResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto trigger_source_mbcs = convert_from_grpc(request->trigger_source()); - auto trigger_source = trigger_source_mbcs.c_str(); - auto trigger_pattern_mbcs = convert_from_grpc(request->trigger_pattern()); - auto trigger_pattern = trigger_pattern_mbcs.c_str(); - int32 trigger_when; - switch (request->trigger_when_enum_case()) { - case nidaqmx_grpc::CfgDigPatternRefTrigRequest::TriggerWhenEnumCase::kTriggerWhen: { - trigger_when = static_cast(request->trigger_when()); - break; - } - case nidaqmx_grpc::CfgDigPatternRefTrigRequest::TriggerWhenEnumCase::kTriggerWhenRaw: { - trigger_when = static_cast(request->trigger_when_raw()); - break; - } - case nidaqmx_grpc::CfgDigPatternRefTrigRequest::TriggerWhenEnumCase::TRIGGER_WHEN_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for trigger_when was not specified or out of range"); - break; - } - } - - uInt32 pretrigger_samples = request->pretrigger_samples(); - auto status = library_->CfgDigPatternRefTrig(task, trigger_source, trigger_pattern, trigger_when, pretrigger_samples); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CfgDigPatternStartTrig(::grpc::ServerContext* context, const CfgDigPatternStartTrigRequest* request, CfgDigPatternStartTrigResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto trigger_source_mbcs = convert_from_grpc(request->trigger_source()); - auto trigger_source = trigger_source_mbcs.c_str(); - auto trigger_pattern_mbcs = convert_from_grpc(request->trigger_pattern()); - auto trigger_pattern = trigger_pattern_mbcs.c_str(); - int32 trigger_when; - switch (request->trigger_when_enum_case()) { - case nidaqmx_grpc::CfgDigPatternStartTrigRequest::TriggerWhenEnumCase::kTriggerWhen: { - trigger_when = static_cast(request->trigger_when()); - break; - } - case nidaqmx_grpc::CfgDigPatternStartTrigRequest::TriggerWhenEnumCase::kTriggerWhenRaw: { - trigger_when = static_cast(request->trigger_when_raw()); - break; + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 sample_mode; + switch (request->sample_mode_enum_case()) { + case nidaqmx_grpc::CfgHandshakingTimingRequest::SampleModeEnumCase::kSampleMode: { + sample_mode = static_cast(request->sample_mode()); + break; + } + case nidaqmx_grpc::CfgHandshakingTimingRequest::SampleModeEnumCase::kSampleModeRaw: { + sample_mode = static_cast(request->sample_mode_raw()); + break; + } + case nidaqmx_grpc::CfgHandshakingTimingRequest::SampleModeEnumCase::SAMPLE_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sample_mode was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CfgDigPatternStartTrigRequest::TriggerWhenEnumCase::TRIGGER_WHEN_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for trigger_when was not specified or out of range"); - break; + + uInt64 samps_per_chan = request->samps_per_chan(); + auto status = library_->CfgHandshakingTiming(task, sample_mode, samps_per_chan); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - auto status = library_->CfgDigPatternStartTrig(task, trigger_source, trigger_pattern, trigger_when); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CfgHandshakingTiming(::grpc::ServerContext* context, const CfgHandshakingTimingRequest* request, CfgHandshakingTimingResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 sample_mode; - switch (request->sample_mode_enum_case()) { - case nidaqmx_grpc::CfgHandshakingTimingRequest::SampleModeEnumCase::kSampleMode: { - sample_mode = static_cast(request->sample_mode()); - break; - } - case nidaqmx_grpc::CfgHandshakingTimingRequest::SampleModeEnumCase::kSampleModeRaw: { - sample_mode = static_cast(request->sample_mode_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CfgImplicitTiming(::grpc::ServerContext* context, const CfgImplicitTimingRequest* request, CfgImplicitTimingResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 sample_mode; + switch (request->sample_mode_enum_case()) { + case nidaqmx_grpc::CfgImplicitTimingRequest::SampleModeEnumCase::kSampleMode: { + sample_mode = static_cast(request->sample_mode()); + break; + } + case nidaqmx_grpc::CfgImplicitTimingRequest::SampleModeEnumCase::kSampleModeRaw: { + sample_mode = static_cast(request->sample_mode_raw()); + break; + } + case nidaqmx_grpc::CfgImplicitTimingRequest::SampleModeEnumCase::SAMPLE_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sample_mode was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CfgHandshakingTimingRequest::SampleModeEnumCase::SAMPLE_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sample_mode was not specified or out of range"); - break; + + uInt64 samps_per_chan = request->samps_per_chan(); + auto status = library_->CfgImplicitTiming(task, sample_mode, samps_per_chan); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - uInt64 samps_per_chan = request->samps_per_chan(); - auto status = library_->CfgHandshakingTiming(task, sample_mode, samps_per_chan); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CfgImplicitTiming(::grpc::ServerContext* context, const CfgImplicitTimingRequest* request, CfgImplicitTimingResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 sample_mode; - switch (request->sample_mode_enum_case()) { - case nidaqmx_grpc::CfgImplicitTimingRequest::SampleModeEnumCase::kSampleMode: { - sample_mode = static_cast(request->sample_mode()); - break; - } - case nidaqmx_grpc::CfgImplicitTimingRequest::SampleModeEnumCase::kSampleModeRaw: { - sample_mode = static_cast(request->sample_mode_raw()); - break; - } - case nidaqmx_grpc::CfgImplicitTimingRequest::SampleModeEnumCase::SAMPLE_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sample_mode was not specified or out of range"); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CfgInputBuffer(::grpc::ServerContext* context, const CfgInputBufferRequest* request, CfgInputBufferResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + uInt32 num_samps_per_chan = request->num_samps_per_chan(); + auto status = library_->CfgInputBuffer(task, num_samps_per_chan); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - uInt64 samps_per_chan = request->samps_per_chan(); - auto status = library_->CfgImplicitTiming(task, sample_mode, samps_per_chan); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CfgInputBuffer(::grpc::ServerContext* context, const CfgInputBufferRequest* request, CfgInputBufferResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - uInt32 num_samps_per_chan = request->num_samps_per_chan(); - auto status = library_->CfgInputBuffer(task, num_samps_per_chan); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CfgOutputBuffer(::grpc::ServerContext* context, const CfgOutputBufferRequest* request, CfgOutputBufferResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - uInt32 num_samps_per_chan = request->num_samps_per_chan(); - auto status = library_->CfgOutputBuffer(task, num_samps_per_chan); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CfgPipelinedSampClkTiming(::grpc::ServerContext* context, const CfgPipelinedSampClkTimingRequest* request, CfgPipelinedSampClkTimingResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto source_mbcs = convert_from_grpc(request->source()); - auto source = source_mbcs.c_str(); - float64 rate = request->rate(); - int32 active_edge; - switch (request->active_edge_enum_case()) { - case nidaqmx_grpc::CfgPipelinedSampClkTimingRequest::ActiveEdgeEnumCase::kActiveEdge: { - active_edge = static_cast(request->active_edge()); - break; - } - case nidaqmx_grpc::CfgPipelinedSampClkTimingRequest::ActiveEdgeEnumCase::kActiveEdgeRaw: { - active_edge = static_cast(request->active_edge_raw()); - break; - } - case nidaqmx_grpc::CfgPipelinedSampClkTimingRequest::ActiveEdgeEnumCase::ACTIVE_EDGE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for active_edge was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CfgOutputBuffer(::grpc::ServerContext* context, const CfgOutputBufferRequest* request, CfgOutputBufferResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - - int32 sample_mode; - switch (request->sample_mode_enum_case()) { - case nidaqmx_grpc::CfgPipelinedSampClkTimingRequest::SampleModeEnumCase::kSampleMode: { - sample_mode = static_cast(request->sample_mode()); - break; - } - case nidaqmx_grpc::CfgPipelinedSampClkTimingRequest::SampleModeEnumCase::kSampleModeRaw: { - sample_mode = static_cast(request->sample_mode_raw()); - break; - } - case nidaqmx_grpc::CfgPipelinedSampClkTimingRequest::SampleModeEnumCase::SAMPLE_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sample_mode was not specified or out of range"); - break; + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + uInt32 num_samps_per_chan = request->num_samps_per_chan(); + auto status = library_->CfgOutputBuffer(task, num_samps_per_chan); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - uInt64 samps_per_chan = request->samps_per_chan(); - auto status = library_->CfgPipelinedSampClkTiming(task, source, rate, active_edge, sample_mode, samps_per_chan); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CfgSampClkTiming(::grpc::ServerContext* context, const CfgSampClkTimingRequest* request, CfgSampClkTimingResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto source_mbcs = convert_from_grpc(request->source()); - auto source = source_mbcs.c_str(); - float64 rate = request->rate(); - int32 active_edge; - switch (request->active_edge_enum_case()) { - case nidaqmx_grpc::CfgSampClkTimingRequest::ActiveEdgeEnumCase::kActiveEdge: { - active_edge = static_cast(request->active_edge()); - break; + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CfgPipelinedSampClkTiming(::grpc::ServerContext* context, const CfgPipelinedSampClkTimingRequest* request, CfgPipelinedSampClkTimingResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto source_mbcs = convert_from_grpc(request->source()); + auto source = source_mbcs.c_str(); + float64 rate = request->rate(); + int32 active_edge; + switch (request->active_edge_enum_case()) { + case nidaqmx_grpc::CfgPipelinedSampClkTimingRequest::ActiveEdgeEnumCase::kActiveEdge: { + active_edge = static_cast(request->active_edge()); + break; + } + case nidaqmx_grpc::CfgPipelinedSampClkTimingRequest::ActiveEdgeEnumCase::kActiveEdgeRaw: { + active_edge = static_cast(request->active_edge_raw()); + break; + } + case nidaqmx_grpc::CfgPipelinedSampClkTimingRequest::ActiveEdgeEnumCase::ACTIVE_EDGE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for active_edge was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CfgSampClkTimingRequest::ActiveEdgeEnumCase::kActiveEdgeRaw: { - active_edge = static_cast(request->active_edge_raw()); - break; + + int32 sample_mode; + switch (request->sample_mode_enum_case()) { + case nidaqmx_grpc::CfgPipelinedSampClkTimingRequest::SampleModeEnumCase::kSampleMode: { + sample_mode = static_cast(request->sample_mode()); + break; + } + case nidaqmx_grpc::CfgPipelinedSampClkTimingRequest::SampleModeEnumCase::kSampleModeRaw: { + sample_mode = static_cast(request->sample_mode_raw()); + break; + } + case nidaqmx_grpc::CfgPipelinedSampClkTimingRequest::SampleModeEnumCase::SAMPLE_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sample_mode was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CfgSampClkTimingRequest::ActiveEdgeEnumCase::ACTIVE_EDGE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for active_edge was not specified or out of range"); - break; + + uInt64 samps_per_chan = request->samps_per_chan(); + auto status = library_->CfgPipelinedSampClkTiming(task, source, rate, active_edge, sample_mode, samps_per_chan); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - int32 sample_mode; - switch (request->sample_mode_enum_case()) { - case nidaqmx_grpc::CfgSampClkTimingRequest::SampleModeEnumCase::kSampleMode: { - sample_mode = static_cast(request->sample_mode()); - break; + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CfgSampClkTiming(::grpc::ServerContext* context, const CfgSampClkTimingRequest* request, CfgSampClkTimingResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto source_mbcs = convert_from_grpc(request->source()); + auto source = source_mbcs.c_str(); + float64 rate = request->rate(); + int32 active_edge; + switch (request->active_edge_enum_case()) { + case nidaqmx_grpc::CfgSampClkTimingRequest::ActiveEdgeEnumCase::kActiveEdge: { + active_edge = static_cast(request->active_edge()); + break; + } + case nidaqmx_grpc::CfgSampClkTimingRequest::ActiveEdgeEnumCase::kActiveEdgeRaw: { + active_edge = static_cast(request->active_edge_raw()); + break; + } + case nidaqmx_grpc::CfgSampClkTimingRequest::ActiveEdgeEnumCase::ACTIVE_EDGE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for active_edge was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CfgSampClkTimingRequest::SampleModeEnumCase::kSampleModeRaw: { - sample_mode = static_cast(request->sample_mode_raw()); - break; + + int32 sample_mode; + switch (request->sample_mode_enum_case()) { + case nidaqmx_grpc::CfgSampClkTimingRequest::SampleModeEnumCase::kSampleMode: { + sample_mode = static_cast(request->sample_mode()); + break; + } + case nidaqmx_grpc::CfgSampClkTimingRequest::SampleModeEnumCase::kSampleModeRaw: { + sample_mode = static_cast(request->sample_mode_raw()); + break; + } + case nidaqmx_grpc::CfgSampClkTimingRequest::SampleModeEnumCase::SAMPLE_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sample_mode was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CfgSampClkTimingRequest::SampleModeEnumCase::SAMPLE_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sample_mode was not specified or out of range"); - break; + + uInt64 samps_per_chan = request->samps_per_chan(); + auto status = library_->CfgSampClkTiming(task, source, rate, active_edge, sample_mode, samps_per_chan); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - uInt64 samps_per_chan = request->samps_per_chan(); - auto status = library_->CfgSampClkTiming(task, source, rate, active_edge, sample_mode, samps_per_chan); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CfgTimeStartTrig(::grpc::ServerContext* context, const CfgTimeStartTrigRequest* request, CfgTimeStartTrigResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto when = convert_from_grpc(request->when()); - int32 timescale; - switch (request->timescale_enum_case()) { - case nidaqmx_grpc::CfgTimeStartTrigRequest::TimescaleEnumCase::kTimescale: { - timescale = static_cast(request->timescale()); - break; - } - case nidaqmx_grpc::CfgTimeStartTrigRequest::TimescaleEnumCase::kTimescaleRaw: { - timescale = static_cast(request->timescale_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CfgTimeStartTrig(::grpc::ServerContext* context, const CfgTimeStartTrigRequest* request, CfgTimeStartTrigResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto when = convert_from_grpc(request->when()); + int32 timescale; + switch (request->timescale_enum_case()) { + case nidaqmx_grpc::CfgTimeStartTrigRequest::TimescaleEnumCase::kTimescale: { + timescale = static_cast(request->timescale()); + break; + } + case nidaqmx_grpc::CfgTimeStartTrigRequest::TimescaleEnumCase::kTimescaleRaw: { + timescale = static_cast(request->timescale_raw()); + break; + } + case nidaqmx_grpc::CfgTimeStartTrigRequest::TimescaleEnumCase::TIMESCALE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for timescale was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CfgTimeStartTrigRequest::TimescaleEnumCase::TIMESCALE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for timescale was not specified or out of range"); - break; + + auto status = library_->CfgTimeStartTrig(task, when, timescale); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - auto status = library_->CfgTimeStartTrig(task, when, timescale); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CfgWatchdogAOExpirStates(::grpc::ServerContext* context, const CfgWatchdogAOExpirStatesRequest* request, CfgWatchdogAOExpirStatesResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto channel_names_mbcs = convert_from_grpc(request->channel_names()); - auto channel_names = channel_names_mbcs.c_str(); - auto expir_state_array = const_cast(request->expir_state_array().data()); - auto output_type_array_vector = std::vector(); - output_type_array_vector.reserve(request->output_type_array().size()); - std::transform( + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CfgWatchdogAOExpirStates(::grpc::ServerContext* context, const CfgWatchdogAOExpirStatesRequest* request, CfgWatchdogAOExpirStatesResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto channel_names_mbcs = convert_from_grpc(request->channel_names()); + auto channel_names = channel_names_mbcs.c_str(); + auto expir_state_array = const_cast(request->expir_state_array().data()); + auto output_type_array_vector = std::vector(); + output_type_array_vector.reserve(request->output_type_array().size()); + std::transform( request->output_type_array().begin(), request->output_type_array().end(), std::back_inserter(output_type_array_vector), [](auto x) { return x; }); - auto output_type_array = output_type_array_vector.data(); + auto output_type_array = output_type_array_vector.data(); - auto array_size_determine_from_sizes = std::array{ + auto array_size_determine_from_sizes = std::array + { request->expir_state_array_size(), - request->output_type_array_size()}; - const auto array_size_size_calculation = calculate_linked_array_size(array_size_determine_from_sizes, false); + request->output_type_array_size() + }; + const auto array_size_size_calculation = calculate_linked_array_size(array_size_determine_from_sizes, false); - if (array_size_size_calculation.match_state == MatchState::MISMATCH) { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The sizes of linked repeated fields [expir_state_array, output_type_array] do not match"); - } - auto array_size = array_size_size_calculation.size; + if (array_size_size_calculation.match_state == MatchState::MISMATCH) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The sizes of linked repeated fields [expir_state_array, output_type_array] do not match"); + } + auto array_size = array_size_size_calculation.size; - auto status = library_->CfgWatchdogAOExpirStates(task, channel_names, expir_state_array, output_type_array, array_size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + auto status = library_->CfgWatchdogAOExpirStates(task, channel_names, expir_state_array, output_type_array, array_size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CfgWatchdogCOExpirStates(::grpc::ServerContext* context, const CfgWatchdogCOExpirStatesRequest* request, CfgWatchdogCOExpirStatesResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto channel_names_mbcs = convert_from_grpc(request->channel_names()); - auto channel_names = channel_names_mbcs.c_str(); - auto expir_state_array_vector = std::vector(); - expir_state_array_vector.reserve(request->expir_state_array().size()); - std::transform( + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CfgWatchdogCOExpirStates(::grpc::ServerContext* context, const CfgWatchdogCOExpirStatesRequest* request, CfgWatchdogCOExpirStatesResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto channel_names_mbcs = convert_from_grpc(request->channel_names()); + auto channel_names = channel_names_mbcs.c_str(); + auto expir_state_array_vector = std::vector(); + expir_state_array_vector.reserve(request->expir_state_array().size()); + std::transform( request->expir_state_array().begin(), request->expir_state_array().end(), std::back_inserter(expir_state_array_vector), [](auto x) { return x; }); - auto expir_state_array = expir_state_array_vector.data(); + auto expir_state_array = expir_state_array_vector.data(); - uInt32 array_size = static_cast(request->expir_state_array().size()); - auto status = library_->CfgWatchdogCOExpirStates(task, channel_names, expir_state_array, array_size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + uInt32 array_size = static_cast(request->expir_state_array().size()); + auto status = library_->CfgWatchdogCOExpirStates(task, channel_names, expir_state_array, array_size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CfgWatchdogDOExpirStates(::grpc::ServerContext* context, const CfgWatchdogDOExpirStatesRequest* request, CfgWatchdogDOExpirStatesResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto channel_names_mbcs = convert_from_grpc(request->channel_names()); - auto channel_names = channel_names_mbcs.c_str(); - auto expir_state_array_vector = std::vector(); - expir_state_array_vector.reserve(request->expir_state_array().size()); - std::transform( + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CfgWatchdogDOExpirStates(::grpc::ServerContext* context, const CfgWatchdogDOExpirStatesRequest* request, CfgWatchdogDOExpirStatesResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto channel_names_mbcs = convert_from_grpc(request->channel_names()); + auto channel_names = channel_names_mbcs.c_str(); + auto expir_state_array_vector = std::vector(); + expir_state_array_vector.reserve(request->expir_state_array().size()); + std::transform( request->expir_state_array().begin(), request->expir_state_array().end(), std::back_inserter(expir_state_array_vector), [](auto x) { return x; }); - auto expir_state_array = expir_state_array_vector.data(); + auto expir_state_array = expir_state_array_vector.data(); - uInt32 array_size = static_cast(request->expir_state_array().size()); - auto status = library_->CfgWatchdogDOExpirStates(task, channel_names, expir_state_array, array_size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + uInt32 array_size = static_cast(request->expir_state_array().size()); + auto status = library_->CfgWatchdogDOExpirStates(task, channel_names, expir_state_array, array_size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ClearTEDS(::grpc::ServerContext* context, const ClearTEDSRequest* request, ClearTEDSResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto status = library_->ClearTEDS(physical_channel); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ClearTask(::grpc::ServerContext* context, const ClearTaskRequest* request, ClearTaskResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - session_repository_->remove_session(task_grpc_session.name()); - auto status = library_->ClearTask(task); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ClearTEDS(::grpc::ServerContext* context, const ClearTEDSRequest* request, ClearTEDSResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto status = library_->ClearTEDS(physical_channel); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ConfigureLogging(::grpc::ServerContext* context, const ConfigureLoggingRequest* request, ConfigureLoggingResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto file_path_mbcs = convert_from_grpc(request->file_path()); - auto file_path = file_path_mbcs.c_str(); - int32 logging_mode; - switch (request->logging_mode_enum_case()) { - case nidaqmx_grpc::ConfigureLoggingRequest::LoggingModeEnumCase::kLoggingMode: { - logging_mode = static_cast(request->logging_mode()); - break; - } - case nidaqmx_grpc::ConfigureLoggingRequest::LoggingModeEnumCase::kLoggingModeRaw: { - logging_mode = static_cast(request->logging_mode_raw()); - break; - } - case nidaqmx_grpc::ConfigureLoggingRequest::LoggingModeEnumCase::LOGGING_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for logging_mode was not specified or out of range"); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ClearTask(::grpc::ServerContext* context, const ClearTaskRequest* request, ClearTaskResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + session_repository_->remove_session(task_grpc_session.name()); + auto status = library_->ClearTask(task); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } - auto group_name_mbcs = convert_from_grpc(request->group_name()); - auto group_name = group_name_mbcs.c_str(); - int32 operation; - switch (request->operation_enum_case()) { - case nidaqmx_grpc::ConfigureLoggingRequest::OperationEnumCase::kOperation: { - operation = static_cast(request->operation()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ConfigureLogging(::grpc::ServerContext* context, const ConfigureLoggingRequest* request, ConfigureLoggingResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto file_path_mbcs = convert_from_grpc(request->file_path()); + auto file_path = file_path_mbcs.c_str(); + int32 logging_mode; + switch (request->logging_mode_enum_case()) { + case nidaqmx_grpc::ConfigureLoggingRequest::LoggingModeEnumCase::kLoggingMode: { + logging_mode = static_cast(request->logging_mode()); + break; + } + case nidaqmx_grpc::ConfigureLoggingRequest::LoggingModeEnumCase::kLoggingModeRaw: { + logging_mode = static_cast(request->logging_mode_raw()); + break; + } + case nidaqmx_grpc::ConfigureLoggingRequest::LoggingModeEnumCase::LOGGING_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for logging_mode was not specified or out of range"); + break; + } } - case nidaqmx_grpc::ConfigureLoggingRequest::OperationEnumCase::kOperationRaw: { - operation = static_cast(request->operation_raw()); - break; + + auto group_name_mbcs = convert_from_grpc(request->group_name()); + auto group_name = group_name_mbcs.c_str(); + int32 operation; + switch (request->operation_enum_case()) { + case nidaqmx_grpc::ConfigureLoggingRequest::OperationEnumCase::kOperation: { + operation = static_cast(request->operation()); + break; + } + case nidaqmx_grpc::ConfigureLoggingRequest::OperationEnumCase::kOperationRaw: { + operation = static_cast(request->operation_raw()); + break; + } + case nidaqmx_grpc::ConfigureLoggingRequest::OperationEnumCase::OPERATION_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for operation was not specified or out of range"); + break; + } } - case nidaqmx_grpc::ConfigureLoggingRequest::OperationEnumCase::OPERATION_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for operation was not specified or out of range"); - break; + + auto status = library_->ConfigureLogging(task, file_path, logging_mode, group_name, operation); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - auto status = library_->ConfigureLogging(task, file_path, logging_mode, group_name, operation); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ConfigureTEDS(::grpc::ServerContext* context, const ConfigureTEDSRequest* request, ConfigureTEDSResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto file_path_mbcs = convert_from_grpc(request->file_path()); - auto file_path = file_path_mbcs.c_str(); - auto status = library_->ConfigureTEDS(physical_channel, file_path); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ConnectTerms(::grpc::ServerContext* context, const ConnectTermsRequest* request, ConnectTermsResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto source_terminal_mbcs = convert_from_grpc(request->source_terminal()); - auto source_terminal = source_terminal_mbcs.c_str(); - auto destination_terminal_mbcs = convert_from_grpc(request->destination_terminal()); - auto destination_terminal = destination_terminal_mbcs.c_str(); - int32 signal_modifiers; - switch (request->signal_modifiers_enum_case()) { - case nidaqmx_grpc::ConnectTermsRequest::SignalModifiersEnumCase::kSignalModifiers: { - signal_modifiers = static_cast(request->signal_modifiers()); - break; - } - case nidaqmx_grpc::ConnectTermsRequest::SignalModifiersEnumCase::kSignalModifiersRaw: { - signal_modifiers = static_cast(request->signal_modifiers_raw()); - break; - } - case nidaqmx_grpc::ConnectTermsRequest::SignalModifiersEnumCase::SIGNAL_MODIFIERS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for signal_modifiers was not specified or out of range"); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ConfigureTEDS(::grpc::ServerContext* context, const ConfigureTEDSRequest* request, ConfigureTEDSResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto file_path_mbcs = convert_from_grpc(request->file_path()); + auto file_path = file_path_mbcs.c_str(); + auto status = library_->ConfigureTEDS(physical_channel, file_path); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } + response->set_status(status); + return ::grpc::Status::OK; } - - auto status = library_->ConnectTerms(source_terminal, destination_terminal, signal_modifiers); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ControlWatchdogTask(::grpc::ServerContext* context, const ControlWatchdogTaskRequest* request, ControlWatchdogTaskResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 action; - switch (request->action_enum_case()) { - case nidaqmx_grpc::ControlWatchdogTaskRequest::ActionEnumCase::kAction: { - action = static_cast(request->action()); - break; - } - case nidaqmx_grpc::ControlWatchdogTaskRequest::ActionEnumCase::kActionRaw: { - action = static_cast(request->action_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ConnectTerms(::grpc::ServerContext* context, const ConnectTermsRequest* request, ConnectTermsResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto source_terminal_mbcs = convert_from_grpc(request->source_terminal()); + auto source_terminal = source_terminal_mbcs.c_str(); + auto destination_terminal_mbcs = convert_from_grpc(request->destination_terminal()); + auto destination_terminal = destination_terminal_mbcs.c_str(); + int32 signal_modifiers; + switch (request->signal_modifiers_enum_case()) { + case nidaqmx_grpc::ConnectTermsRequest::SignalModifiersEnumCase::kSignalModifiers: { + signal_modifiers = static_cast(request->signal_modifiers()); + break; + } + case nidaqmx_grpc::ConnectTermsRequest::SignalModifiersEnumCase::kSignalModifiersRaw: { + signal_modifiers = static_cast(request->signal_modifiers_raw()); + break; + } + case nidaqmx_grpc::ConnectTermsRequest::SignalModifiersEnumCase::SIGNAL_MODIFIERS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for signal_modifiers was not specified or out of range"); + break; + } } - case nidaqmx_grpc::ControlWatchdogTaskRequest::ActionEnumCase::ACTION_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for action was not specified or out of range"); - break; + + auto status = library_->ConnectTerms(source_terminal, destination_terminal, signal_modifiers); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } + response->set_status(status); + return ::grpc::Status::OK; } - - auto status = library_->ControlWatchdogTask(task, action); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAIAccel4WireDCVoltageChan(::grpc::ServerContext* context, const CreateAIAccel4WireDCVoltageChanRequest* request, CreateAIAccel4WireDCVoltageChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - int32 terminal_config; - switch (request->terminal_config_enum_case()) { - case nidaqmx_grpc::CreateAIAccel4WireDCVoltageChanRequest::TerminalConfigEnumCase::kTerminalConfig: { - terminal_config = static_cast(request->terminal_config()); - break; - } - case nidaqmx_grpc::CreateAIAccel4WireDCVoltageChanRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { - terminal_config = static_cast(request->terminal_config_raw()); - break; - } - case nidaqmx_grpc::CreateAIAccel4WireDCVoltageChanRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ControlWatchdogTask(::grpc::ServerContext* context, const ControlWatchdogTaskRequest* request, ControlWatchdogTaskResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAIAccel4WireDCVoltageChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateAIAccel4WireDCVoltageChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateAIAccel4WireDCVoltageChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 action; + switch (request->action_enum_case()) { + case nidaqmx_grpc::ControlWatchdogTaskRequest::ActionEnumCase::kAction: { + action = static_cast(request->action()); + break; + } + case nidaqmx_grpc::ControlWatchdogTaskRequest::ActionEnumCase::kActionRaw: { + action = static_cast(request->action_raw()); + break; + } + case nidaqmx_grpc::ControlWatchdogTaskRequest::ActionEnumCase::ACTION_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for action was not specified or out of range"); + break; + } } - } - float64 sensitivity = request->sensitivity(); - int32 sensitivity_units; - switch (request->sensitivity_units_enum_case()) { - case nidaqmx_grpc::CreateAIAccel4WireDCVoltageChanRequest::SensitivityUnitsEnumCase::kSensitivityUnits: { - sensitivity_units = static_cast(request->sensitivity_units()); - break; - } - case nidaqmx_grpc::CreateAIAccel4WireDCVoltageChanRequest::SensitivityUnitsEnumCase::kSensitivityUnitsRaw: { - sensitivity_units = static_cast(request->sensitivity_units_raw()); - break; - } - case nidaqmx_grpc::CreateAIAccel4WireDCVoltageChanRequest::SensitivityUnitsEnumCase::SENSITIVITY_UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sensitivity_units was not specified or out of range"); - break; + auto status = library_->ControlWatchdogTask(task, action); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - int32 voltage_excit_source; - switch (request->voltage_excit_source_enum_case()) { - case nidaqmx_grpc::CreateAIAccel4WireDCVoltageChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { - voltage_excit_source = static_cast(request->voltage_excit_source()); - break; + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAIAccel4WireDCVoltageChan(::grpc::ServerContext* context, const CreateAIAccel4WireDCVoltageChanRequest* request, CreateAIAccel4WireDCVoltageChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + int32 terminal_config; + switch (request->terminal_config_enum_case()) { + case nidaqmx_grpc::CreateAIAccel4WireDCVoltageChanRequest::TerminalConfigEnumCase::kTerminalConfig: { + terminal_config = static_cast(request->terminal_config()); + break; + } + case nidaqmx_grpc::CreateAIAccel4WireDCVoltageChanRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { + terminal_config = static_cast(request->terminal_config_raw()); + break; + } + case nidaqmx_grpc::CreateAIAccel4WireDCVoltageChanRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIAccel4WireDCVoltageChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { - voltage_excit_source = static_cast(request->voltage_excit_source_raw()); - break; + + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAIAccel4WireDCVoltageChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAIAccel4WireDCVoltageChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAIAccel4WireDCVoltageChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIAccel4WireDCVoltageChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); - break; + + float64 sensitivity = request->sensitivity(); + int32 sensitivity_units; + switch (request->sensitivity_units_enum_case()) { + case nidaqmx_grpc::CreateAIAccel4WireDCVoltageChanRequest::SensitivityUnitsEnumCase::kSensitivityUnits: { + sensitivity_units = static_cast(request->sensitivity_units()); + break; + } + case nidaqmx_grpc::CreateAIAccel4WireDCVoltageChanRequest::SensitivityUnitsEnumCase::kSensitivityUnitsRaw: { + sensitivity_units = static_cast(request->sensitivity_units_raw()); + break; + } + case nidaqmx_grpc::CreateAIAccel4WireDCVoltageChanRequest::SensitivityUnitsEnumCase::SENSITIVITY_UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sensitivity_units was not specified or out of range"); + break; + } } - } - float64 voltage_excit_val = request->voltage_excit_val(); - bool32 use_excit_for_scaling = request->use_excit_for_scaling(); - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateAIAccel4WireDCVoltageChan(task, physical_channel, name_to_assign_to_channel, terminal_config, min_val, max_val, units, sensitivity, sensitivity_units, voltage_excit_source, voltage_excit_val, use_excit_for_scaling, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + int32 voltage_excit_source; + switch (request->voltage_excit_source_enum_case()) { + case nidaqmx_grpc::CreateAIAccel4WireDCVoltageChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { + voltage_excit_source = static_cast(request->voltage_excit_source()); + break; + } + case nidaqmx_grpc::CreateAIAccel4WireDCVoltageChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { + voltage_excit_source = static_cast(request->voltage_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateAIAccel4WireDCVoltageChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAIAccelChan(::grpc::ServerContext* context, const CreateAIAccelChanRequest* request, CreateAIAccelChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - int32 terminal_config; - switch (request->terminal_config_enum_case()) { - case nidaqmx_grpc::CreateAIAccelChanRequest::TerminalConfigEnumCase::kTerminalConfig: { - terminal_config = static_cast(request->terminal_config()); - break; + float64 voltage_excit_val = request->voltage_excit_val(); + bool32 use_excit_for_scaling = request->use_excit_for_scaling(); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateAIAccel4WireDCVoltageChan(task, physical_channel, name_to_assign_to_channel, terminal_config, min_val, max_val, units, sensitivity, sensitivity_units, voltage_excit_source, voltage_excit_val, use_excit_for_scaling, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - case nidaqmx_grpc::CreateAIAccelChanRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { - terminal_config = static_cast(request->terminal_config_raw()); - break; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAIAccelChan(::grpc::ServerContext* context, const CreateAIAccelChanRequest* request, CreateAIAccelChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + int32 terminal_config; + switch (request->terminal_config_enum_case()) { + case nidaqmx_grpc::CreateAIAccelChanRequest::TerminalConfigEnumCase::kTerminalConfig: { + terminal_config = static_cast(request->terminal_config()); + break; + } + case nidaqmx_grpc::CreateAIAccelChanRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { + terminal_config = static_cast(request->terminal_config_raw()); + break; + } + case nidaqmx_grpc::CreateAIAccelChanRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIAccelChanRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); - break; + + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAIAccelChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAIAccelChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAIAccelChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - } - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAIAccelChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; + float64 sensitivity = request->sensitivity(); + int32 sensitivity_units; + switch (request->sensitivity_units_enum_case()) { + case nidaqmx_grpc::CreateAIAccelChanRequest::SensitivityUnitsEnumCase::kSensitivityUnits: { + sensitivity_units = static_cast(request->sensitivity_units()); + break; + } + case nidaqmx_grpc::CreateAIAccelChanRequest::SensitivityUnitsEnumCase::kSensitivityUnitsRaw: { + sensitivity_units = static_cast(request->sensitivity_units_raw()); + break; + } + case nidaqmx_grpc::CreateAIAccelChanRequest::SensitivityUnitsEnumCase::SENSITIVITY_UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sensitivity_units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIAccelChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; + + int32 current_excit_source; + switch (request->current_excit_source_enum_case()) { + case nidaqmx_grpc::CreateAIAccelChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSource: { + current_excit_source = static_cast(request->current_excit_source()); + break; + } + case nidaqmx_grpc::CreateAIAccelChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSourceRaw: { + current_excit_source = static_cast(request->current_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateAIAccelChanRequest::CurrentExcitSourceEnumCase::CURRENT_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for current_excit_source was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIAccelChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + + float64 current_excit_val = request->current_excit_val(); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateAIAccelChan(task, physical_channel, name_to_assign_to_channel, terminal_config, min_val, max_val, units, sensitivity, sensitivity_units, current_excit_source, current_excit_val, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAIAccelChargeChan(::grpc::ServerContext* context, const CreateAIAccelChargeChanRequest* request, CreateAIAccelChargeChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + int32 terminal_config; + switch (request->terminal_config_enum_case()) { + case nidaqmx_grpc::CreateAIAccelChargeChanRequest::TerminalConfigEnumCase::kTerminalConfig: { + terminal_config = static_cast(request->terminal_config()); + break; + } + case nidaqmx_grpc::CreateAIAccelChargeChanRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { + terminal_config = static_cast(request->terminal_config_raw()); + break; + } + case nidaqmx_grpc::CreateAIAccelChargeChanRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); + break; + } + } - float64 sensitivity = request->sensitivity(); - int32 sensitivity_units; - switch (request->sensitivity_units_enum_case()) { - case nidaqmx_grpc::CreateAIAccelChanRequest::SensitivityUnitsEnumCase::kSensitivityUnits: { - sensitivity_units = static_cast(request->sensitivity_units()); - break; + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAIAccelChargeChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAIAccelChargeChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAIAccelChargeChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIAccelChanRequest::SensitivityUnitsEnumCase::kSensitivityUnitsRaw: { - sensitivity_units = static_cast(request->sensitivity_units_raw()); - break; + + float64 sensitivity = request->sensitivity(); + int32 sensitivity_units; + switch (request->sensitivity_units_enum_case()) { + case nidaqmx_grpc::CreateAIAccelChargeChanRequest::SensitivityUnitsEnumCase::kSensitivityUnits: { + sensitivity_units = static_cast(request->sensitivity_units()); + break; + } + case nidaqmx_grpc::CreateAIAccelChargeChanRequest::SensitivityUnitsEnumCase::kSensitivityUnitsRaw: { + sensitivity_units = static_cast(request->sensitivity_units_raw()); + break; + } + case nidaqmx_grpc::CreateAIAccelChargeChanRequest::SensitivityUnitsEnumCase::SENSITIVITY_UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sensitivity_units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIAccelChanRequest::SensitivityUnitsEnumCase::SENSITIVITY_UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sensitivity_units was not specified or out of range"); - break; + + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateAIAccelChargeChan(task, physical_channel, name_to_assign_to_channel, terminal_config, min_val, max_val, units, sensitivity, sensitivity_units, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - int32 current_excit_source; - switch (request->current_excit_source_enum_case()) { - case nidaqmx_grpc::CreateAIAccelChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSource: { - current_excit_source = static_cast(request->current_excit_source()); - break; + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAIBridgeChan(::grpc::ServerContext* context, const CreateAIBridgeChanRequest* request, CreateAIBridgeChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAIBridgeChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAIBridgeChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAIBridgeChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIAccelChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSourceRaw: { - current_excit_source = static_cast(request->current_excit_source_raw()); - break; + + int32 bridge_config; + switch (request->bridge_config_enum_case()) { + case nidaqmx_grpc::CreateAIBridgeChanRequest::BridgeConfigEnumCase::kBridgeConfig: { + bridge_config = static_cast(request->bridge_config()); + break; + } + case nidaqmx_grpc::CreateAIBridgeChanRequest::BridgeConfigEnumCase::kBridgeConfigRaw: { + bridge_config = static_cast(request->bridge_config_raw()); + break; + } + case nidaqmx_grpc::CreateAIBridgeChanRequest::BridgeConfigEnumCase::BRIDGE_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for bridge_config was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIAccelChanRequest::CurrentExcitSourceEnumCase::CURRENT_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for current_excit_source was not specified or out of range"); - break; + + int32 voltage_excit_source; + switch (request->voltage_excit_source_enum_case()) { + case nidaqmx_grpc::CreateAIBridgeChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { + voltage_excit_source = static_cast(request->voltage_excit_source()); + break; + } + case nidaqmx_grpc::CreateAIBridgeChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { + voltage_excit_source = static_cast(request->voltage_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateAIBridgeChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); + break; + } } - } - float64 current_excit_val = request->current_excit_val(); - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateAIAccelChan(task, physical_channel, name_to_assign_to_channel, terminal_config, min_val, max_val, units, sensitivity, sensitivity_units, current_excit_source, current_excit_val, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + float64 voltage_excit_val = request->voltage_excit_val(); + float64 nominal_bridge_resistance = request->nominal_bridge_resistance(); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateAIBridgeChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, bridge_config, voltage_excit_source, voltage_excit_val, nominal_bridge_resistance, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAIAccelChargeChan(::grpc::ServerContext* context, const CreateAIAccelChargeChanRequest* request, CreateAIAccelChargeChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - int32 terminal_config; - switch (request->terminal_config_enum_case()) { - case nidaqmx_grpc::CreateAIAccelChargeChanRequest::TerminalConfigEnumCase::kTerminalConfig: { - terminal_config = static_cast(request->terminal_config()); - break; + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAIChargeChan(::grpc::ServerContext* context, const CreateAIChargeChanRequest* request, CreateAIChargeChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + int32 terminal_config; + switch (request->terminal_config_enum_case()) { + case nidaqmx_grpc::CreateAIChargeChanRequest::TerminalConfigEnumCase::kTerminalConfig: { + terminal_config = static_cast(request->terminal_config()); + break; + } + case nidaqmx_grpc::CreateAIChargeChanRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { + terminal_config = static_cast(request->terminal_config_raw()); + break; + } + case nidaqmx_grpc::CreateAIChargeChanRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIAccelChargeChanRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { - terminal_config = static_cast(request->terminal_config_raw()); - break; + + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAIChargeChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAIChargeChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAIChargeChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIAccelChargeChanRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); - break; + + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateAIChargeChan(task, physical_channel, name_to_assign_to_channel, terminal_config, min_val, max_val, units, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAICurrentChan(::grpc::ServerContext* context, const CreateAICurrentChanRequest* request, CreateAICurrentChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + int32 terminal_config; + switch (request->terminal_config_enum_case()) { + case nidaqmx_grpc::CreateAICurrentChanRequest::TerminalConfigEnumCase::kTerminalConfig: { + terminal_config = static_cast(request->terminal_config()); + break; + } + case nidaqmx_grpc::CreateAICurrentChanRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { + terminal_config = static_cast(request->terminal_config_raw()); + break; + } + case nidaqmx_grpc::CreateAICurrentChanRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); + break; + } + } - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAIAccelChargeChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAICurrentChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAICurrentChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAICurrentChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIAccelChargeChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; + + int32 shunt_resistor_loc; + switch (request->shunt_resistor_loc_enum_case()) { + case nidaqmx_grpc::CreateAICurrentChanRequest::ShuntResistorLocEnumCase::kShuntResistorLoc: { + shunt_resistor_loc = static_cast(request->shunt_resistor_loc()); + break; + } + case nidaqmx_grpc::CreateAICurrentChanRequest::ShuntResistorLocEnumCase::kShuntResistorLocRaw: { + shunt_resistor_loc = static_cast(request->shunt_resistor_loc_raw()); + break; + } + case nidaqmx_grpc::CreateAICurrentChanRequest::ShuntResistorLocEnumCase::SHUNT_RESISTOR_LOC_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for shunt_resistor_loc was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIAccelChargeChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + + float64 ext_shunt_resistor_val = request->ext_shunt_resistor_val(); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateAICurrentChan(task, physical_channel, name_to_assign_to_channel, terminal_config, min_val, max_val, units, shunt_resistor_loc, ext_shunt_resistor_val, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAICurrentRMSChan(::grpc::ServerContext* context, const CreateAICurrentRMSChanRequest* request, CreateAICurrentRMSChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + int32 terminal_config; + switch (request->terminal_config_enum_case()) { + case nidaqmx_grpc::CreateAICurrentRMSChanRequest::TerminalConfigEnumCase::kTerminalConfig: { + terminal_config = static_cast(request->terminal_config()); + break; + } + case nidaqmx_grpc::CreateAICurrentRMSChanRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { + terminal_config = static_cast(request->terminal_config_raw()); + break; + } + case nidaqmx_grpc::CreateAICurrentRMSChanRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); + break; + } + } - float64 sensitivity = request->sensitivity(); - int32 sensitivity_units; - switch (request->sensitivity_units_enum_case()) { - case nidaqmx_grpc::CreateAIAccelChargeChanRequest::SensitivityUnitsEnumCase::kSensitivityUnits: { - sensitivity_units = static_cast(request->sensitivity_units()); - break; + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAICurrentRMSChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAICurrentRMSChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAICurrentRMSChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIAccelChargeChanRequest::SensitivityUnitsEnumCase::kSensitivityUnitsRaw: { - sensitivity_units = static_cast(request->sensitivity_units_raw()); - break; + + int32 shunt_resistor_loc; + switch (request->shunt_resistor_loc_enum_case()) { + case nidaqmx_grpc::CreateAICurrentRMSChanRequest::ShuntResistorLocEnumCase::kShuntResistorLoc: { + shunt_resistor_loc = static_cast(request->shunt_resistor_loc()); + break; + } + case nidaqmx_grpc::CreateAICurrentRMSChanRequest::ShuntResistorLocEnumCase::kShuntResistorLocRaw: { + shunt_resistor_loc = static_cast(request->shunt_resistor_loc_raw()); + break; + } + case nidaqmx_grpc::CreateAICurrentRMSChanRequest::ShuntResistorLocEnumCase::SHUNT_RESISTOR_LOC_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for shunt_resistor_loc was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIAccelChargeChanRequest::SensitivityUnitsEnumCase::SENSITIVITY_UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sensitivity_units was not specified or out of range"); - break; + + float64 ext_shunt_resistor_val = request->ext_shunt_resistor_val(); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateAICurrentRMSChan(task, physical_channel, name_to_assign_to_channel, terminal_config, min_val, max_val, units, shunt_resistor_loc, ext_shunt_resistor_val, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAIForceBridgePolynomialChan(::grpc::ServerContext* context, const CreateAIForceBridgePolynomialChanRequest* request, CreateAIForceBridgePolynomialChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAIForceBridgePolynomialChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAIForceBridgePolynomialChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAIForceBridgePolynomialChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } + } - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateAIAccelChargeChan(task, physical_channel, name_to_assign_to_channel, terminal_config, min_val, max_val, units, sensitivity, sensitivity_units, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + int32 bridge_config; + switch (request->bridge_config_enum_case()) { + case nidaqmx_grpc::CreateAIForceBridgePolynomialChanRequest::BridgeConfigEnumCase::kBridgeConfig: { + bridge_config = static_cast(request->bridge_config()); + break; + } + case nidaqmx_grpc::CreateAIForceBridgePolynomialChanRequest::BridgeConfigEnumCase::kBridgeConfigRaw: { + bridge_config = static_cast(request->bridge_config_raw()); + break; + } + case nidaqmx_grpc::CreateAIForceBridgePolynomialChanRequest::BridgeConfigEnumCase::BRIDGE_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for bridge_config was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAIBridgeChan(::grpc::ServerContext* context, const CreateAIBridgeChanRequest* request, CreateAIBridgeChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAIBridgeChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; + int32 voltage_excit_source; + switch (request->voltage_excit_source_enum_case()) { + case nidaqmx_grpc::CreateAIForceBridgePolynomialChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { + voltage_excit_source = static_cast(request->voltage_excit_source()); + break; + } + case nidaqmx_grpc::CreateAIForceBridgePolynomialChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { + voltage_excit_source = static_cast(request->voltage_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateAIForceBridgePolynomialChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIBridgeChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; + + float64 voltage_excit_val = request->voltage_excit_val(); + float64 nominal_bridge_resistance = request->nominal_bridge_resistance(); + auto forward_coeffs = const_cast(request->forward_coeffs().data()); + uInt32 num_forward_coeffs = static_cast(request->forward_coeffs().size()); + auto reverse_coeffs = const_cast(request->reverse_coeffs().data()); + uInt32 num_reverse_coeffs = static_cast(request->reverse_coeffs().size()); + int32 electrical_units; + switch (request->electrical_units_enum_case()) { + case nidaqmx_grpc::CreateAIForceBridgePolynomialChanRequest::ElectricalUnitsEnumCase::kElectricalUnits: { + electrical_units = static_cast(request->electrical_units()); + break; + } + case nidaqmx_grpc::CreateAIForceBridgePolynomialChanRequest::ElectricalUnitsEnumCase::kElectricalUnitsRaw: { + electrical_units = static_cast(request->electrical_units_raw()); + break; + } + case nidaqmx_grpc::CreateAIForceBridgePolynomialChanRequest::ElectricalUnitsEnumCase::ELECTRICAL_UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for electrical_units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIBridgeChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + + int32 physical_units; + switch (request->physical_units_enum_case()) { + case nidaqmx_grpc::CreateAIForceBridgePolynomialChanRequest::PhysicalUnitsEnumCase::kPhysicalUnits: { + physical_units = static_cast(request->physical_units()); + break; + } + case nidaqmx_grpc::CreateAIForceBridgePolynomialChanRequest::PhysicalUnitsEnumCase::kPhysicalUnitsRaw: { + physical_units = static_cast(request->physical_units_raw()); + break; + } + case nidaqmx_grpc::CreateAIForceBridgePolynomialChanRequest::PhysicalUnitsEnumCase::PHYSICAL_UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for physical_units was not specified or out of range"); + break; + } } - } - int32 bridge_config; - switch (request->bridge_config_enum_case()) { - case nidaqmx_grpc::CreateAIBridgeChanRequest::BridgeConfigEnumCase::kBridgeConfig: { - bridge_config = static_cast(request->bridge_config()); - break; + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateAIForceBridgePolynomialChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, bridge_config, voltage_excit_source, voltage_excit_val, nominal_bridge_resistance, forward_coeffs, num_forward_coeffs, reverse_coeffs, num_reverse_coeffs, electrical_units, physical_units, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - case nidaqmx_grpc::CreateAIBridgeChanRequest::BridgeConfigEnumCase::kBridgeConfigRaw: { - bridge_config = static_cast(request->bridge_config_raw()); - break; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAIForceBridgeTableChan(::grpc::ServerContext* context, const CreateAIForceBridgeTableChanRequest* request, CreateAIForceBridgeTableChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAIForceBridgeTableChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAIForceBridgeTableChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAIForceBridgeTableChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIBridgeChanRequest::BridgeConfigEnumCase::BRIDGE_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for bridge_config was not specified or out of range"); - break; + + int32 bridge_config; + switch (request->bridge_config_enum_case()) { + case nidaqmx_grpc::CreateAIForceBridgeTableChanRequest::BridgeConfigEnumCase::kBridgeConfig: { + bridge_config = static_cast(request->bridge_config()); + break; + } + case nidaqmx_grpc::CreateAIForceBridgeTableChanRequest::BridgeConfigEnumCase::kBridgeConfigRaw: { + bridge_config = static_cast(request->bridge_config_raw()); + break; + } + case nidaqmx_grpc::CreateAIForceBridgeTableChanRequest::BridgeConfigEnumCase::BRIDGE_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for bridge_config was not specified or out of range"); + break; + } } - } - int32 voltage_excit_source; - switch (request->voltage_excit_source_enum_case()) { - case nidaqmx_grpc::CreateAIBridgeChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { - voltage_excit_source = static_cast(request->voltage_excit_source()); - break; + int32 voltage_excit_source; + switch (request->voltage_excit_source_enum_case()) { + case nidaqmx_grpc::CreateAIForceBridgeTableChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { + voltage_excit_source = static_cast(request->voltage_excit_source()); + break; + } + case nidaqmx_grpc::CreateAIForceBridgeTableChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { + voltage_excit_source = static_cast(request->voltage_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateAIForceBridgeTableChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIBridgeChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { - voltage_excit_source = static_cast(request->voltage_excit_source_raw()); - break; + + float64 voltage_excit_val = request->voltage_excit_val(); + float64 nominal_bridge_resistance = request->nominal_bridge_resistance(); + auto electrical_vals = const_cast(request->electrical_vals().data()); + uInt32 num_electrical_vals = static_cast(request->electrical_vals().size()); + int32 electrical_units; + switch (request->electrical_units_enum_case()) { + case nidaqmx_grpc::CreateAIForceBridgeTableChanRequest::ElectricalUnitsEnumCase::kElectricalUnits: { + electrical_units = static_cast(request->electrical_units()); + break; + } + case nidaqmx_grpc::CreateAIForceBridgeTableChanRequest::ElectricalUnitsEnumCase::kElectricalUnitsRaw: { + electrical_units = static_cast(request->electrical_units_raw()); + break; + } + case nidaqmx_grpc::CreateAIForceBridgeTableChanRequest::ElectricalUnitsEnumCase::ELECTRICAL_UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for electrical_units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIBridgeChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); - break; + + auto physical_vals = const_cast(request->physical_vals().data()); + uInt32 num_physical_vals = static_cast(request->physical_vals().size()); + int32 physical_units; + switch (request->physical_units_enum_case()) { + case nidaqmx_grpc::CreateAIForceBridgeTableChanRequest::PhysicalUnitsEnumCase::kPhysicalUnits: { + physical_units = static_cast(request->physical_units()); + break; + } + case nidaqmx_grpc::CreateAIForceBridgeTableChanRequest::PhysicalUnitsEnumCase::kPhysicalUnitsRaw: { + physical_units = static_cast(request->physical_units_raw()); + break; + } + case nidaqmx_grpc::CreateAIForceBridgeTableChanRequest::PhysicalUnitsEnumCase::PHYSICAL_UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for physical_units was not specified or out of range"); + break; + } } - } - float64 voltage_excit_val = request->voltage_excit_val(); - float64 nominal_bridge_resistance = request->nominal_bridge_resistance(); - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateAIBridgeChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, bridge_config, voltage_excit_source, voltage_excit_val, nominal_bridge_resistance, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAIChargeChan(::grpc::ServerContext* context, const CreateAIChargeChanRequest* request, CreateAIChargeChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - int32 terminal_config; - switch (request->terminal_config_enum_case()) { - case nidaqmx_grpc::CreateAIChargeChanRequest::TerminalConfigEnumCase::kTerminalConfig: { - terminal_config = static_cast(request->terminal_config()); - break; - } - case nidaqmx_grpc::CreateAIChargeChanRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { - terminal_config = static_cast(request->terminal_config_raw()); - break; - } - case nidaqmx_grpc::CreateAIChargeChanRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); - break; + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateAIForceBridgeTableChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, bridge_config, voltage_excit_source, voltage_excit_val, nominal_bridge_resistance, electrical_vals, num_electrical_vals, electrical_units, physical_vals, num_physical_vals, physical_units, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAIChargeChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateAIChargeChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateAIChargeChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAIForceBridgeTwoPointLinChan(::grpc::ServerContext* context, const CreateAIForceBridgeTwoPointLinChanRequest* request, CreateAIForceBridgeTwoPointLinChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAIForceBridgeTwoPointLinChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAIForceBridgeTwoPointLinChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAIForceBridgeTwoPointLinChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - } - - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateAIChargeChan(task, physical_channel, name_to_assign_to_channel, terminal_config, min_val, max_val, units, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAICurrentChan(::grpc::ServerContext* context, const CreateAICurrentChanRequest* request, CreateAICurrentChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - int32 terminal_config; - switch (request->terminal_config_enum_case()) { - case nidaqmx_grpc::CreateAICurrentChanRequest::TerminalConfigEnumCase::kTerminalConfig: { - terminal_config = static_cast(request->terminal_config()); - break; - } - case nidaqmx_grpc::CreateAICurrentChanRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { - terminal_config = static_cast(request->terminal_config_raw()); - break; - } - case nidaqmx_grpc::CreateAICurrentChanRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); - break; + int32 bridge_config; + switch (request->bridge_config_enum_case()) { + case nidaqmx_grpc::CreateAIForceBridgeTwoPointLinChanRequest::BridgeConfigEnumCase::kBridgeConfig: { + bridge_config = static_cast(request->bridge_config()); + break; + } + case nidaqmx_grpc::CreateAIForceBridgeTwoPointLinChanRequest::BridgeConfigEnumCase::kBridgeConfigRaw: { + bridge_config = static_cast(request->bridge_config_raw()); + break; + } + case nidaqmx_grpc::CreateAIForceBridgeTwoPointLinChanRequest::BridgeConfigEnumCase::BRIDGE_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for bridge_config was not specified or out of range"); + break; + } } - } - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAICurrentChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateAICurrentChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateAICurrentChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + int32 voltage_excit_source; + switch (request->voltage_excit_source_enum_case()) { + case nidaqmx_grpc::CreateAIForceBridgeTwoPointLinChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { + voltage_excit_source = static_cast(request->voltage_excit_source()); + break; + } + case nidaqmx_grpc::CreateAIForceBridgeTwoPointLinChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { + voltage_excit_source = static_cast(request->voltage_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateAIForceBridgeTwoPointLinChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); + break; + } } - } - int32 shunt_resistor_loc; - switch (request->shunt_resistor_loc_enum_case()) { - case nidaqmx_grpc::CreateAICurrentChanRequest::ShuntResistorLocEnumCase::kShuntResistorLoc: { - shunt_resistor_loc = static_cast(request->shunt_resistor_loc()); - break; - } - case nidaqmx_grpc::CreateAICurrentChanRequest::ShuntResistorLocEnumCase::kShuntResistorLocRaw: { - shunt_resistor_loc = static_cast(request->shunt_resistor_loc_raw()); - break; - } - case nidaqmx_grpc::CreateAICurrentChanRequest::ShuntResistorLocEnumCase::SHUNT_RESISTOR_LOC_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for shunt_resistor_loc was not specified or out of range"); - break; + float64 voltage_excit_val = request->voltage_excit_val(); + float64 nominal_bridge_resistance = request->nominal_bridge_resistance(); + float64 first_electrical_val = request->first_electrical_val(); + float64 second_electrical_val = request->second_electrical_val(); + int32 electrical_units; + switch (request->electrical_units_enum_case()) { + case nidaqmx_grpc::CreateAIForceBridgeTwoPointLinChanRequest::ElectricalUnitsEnumCase::kElectricalUnits: { + electrical_units = static_cast(request->electrical_units()); + break; + } + case nidaqmx_grpc::CreateAIForceBridgeTwoPointLinChanRequest::ElectricalUnitsEnumCase::kElectricalUnitsRaw: { + electrical_units = static_cast(request->electrical_units_raw()); + break; + } + case nidaqmx_grpc::CreateAIForceBridgeTwoPointLinChanRequest::ElectricalUnitsEnumCase::ELECTRICAL_UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for electrical_units was not specified or out of range"); + break; + } } - } - - float64 ext_shunt_resistor_val = request->ext_shunt_resistor_val(); - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateAICurrentChan(task, physical_channel, name_to_assign_to_channel, terminal_config, min_val, max_val, units, shunt_resistor_loc, ext_shunt_resistor_val, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAICurrentRMSChan(::grpc::ServerContext* context, const CreateAICurrentRMSChanRequest* request, CreateAICurrentRMSChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - int32 terminal_config; - switch (request->terminal_config_enum_case()) { - case nidaqmx_grpc::CreateAICurrentRMSChanRequest::TerminalConfigEnumCase::kTerminalConfig: { - terminal_config = static_cast(request->terminal_config()); - break; - } - case nidaqmx_grpc::CreateAICurrentRMSChanRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { - terminal_config = static_cast(request->terminal_config_raw()); - break; - } - case nidaqmx_grpc::CreateAICurrentRMSChanRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); - break; + float64 first_physical_val = request->first_physical_val(); + float64 second_physical_val = request->second_physical_val(); + int32 physical_units; + switch (request->physical_units_enum_case()) { + case nidaqmx_grpc::CreateAIForceBridgeTwoPointLinChanRequest::PhysicalUnitsEnumCase::kPhysicalUnits: { + physical_units = static_cast(request->physical_units()); + break; + } + case nidaqmx_grpc::CreateAIForceBridgeTwoPointLinChanRequest::PhysicalUnitsEnumCase::kPhysicalUnitsRaw: { + physical_units = static_cast(request->physical_units_raw()); + break; + } + case nidaqmx_grpc::CreateAIForceBridgeTwoPointLinChanRequest::PhysicalUnitsEnumCase::PHYSICAL_UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for physical_units was not specified or out of range"); + break; + } } - } - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAICurrentRMSChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateAIForceBridgeTwoPointLinChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, bridge_config, voltage_excit_source, voltage_excit_val, nominal_bridge_resistance, first_electrical_val, second_electrical_val, electrical_units, first_physical_val, second_physical_val, physical_units, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - case nidaqmx_grpc::CreateAICurrentRMSChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAIForceIEPEChan(::grpc::ServerContext* context, const CreateAIForceIEPEChanRequest* request, CreateAIForceIEPEChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + int32 terminal_config; + switch (request->terminal_config_enum_case()) { + case nidaqmx_grpc::CreateAIForceIEPEChanRequest::TerminalConfigEnumCase::kTerminalConfig: { + terminal_config = static_cast(request->terminal_config()); + break; + } + case nidaqmx_grpc::CreateAIForceIEPEChanRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { + terminal_config = static_cast(request->terminal_config_raw()); + break; + } + case nidaqmx_grpc::CreateAIForceIEPEChanRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAICurrentRMSChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAIForceIEPEChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAIForceIEPEChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAIForceIEPEChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - } - int32 shunt_resistor_loc; - switch (request->shunt_resistor_loc_enum_case()) { - case nidaqmx_grpc::CreateAICurrentRMSChanRequest::ShuntResistorLocEnumCase::kShuntResistorLoc: { - shunt_resistor_loc = static_cast(request->shunt_resistor_loc()); - break; + float64 sensitivity = request->sensitivity(); + int32 sensitivity_units; + switch (request->sensitivity_units_enum_case()) { + case nidaqmx_grpc::CreateAIForceIEPEChanRequest::SensitivityUnitsEnumCase::kSensitivityUnits: { + sensitivity_units = static_cast(request->sensitivity_units()); + break; + } + case nidaqmx_grpc::CreateAIForceIEPEChanRequest::SensitivityUnitsEnumCase::kSensitivityUnitsRaw: { + sensitivity_units = static_cast(request->sensitivity_units_raw()); + break; + } + case nidaqmx_grpc::CreateAIForceIEPEChanRequest::SensitivityUnitsEnumCase::SENSITIVITY_UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sensitivity_units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAICurrentRMSChanRequest::ShuntResistorLocEnumCase::kShuntResistorLocRaw: { - shunt_resistor_loc = static_cast(request->shunt_resistor_loc_raw()); - break; + + int32 current_excit_source; + switch (request->current_excit_source_enum_case()) { + case nidaqmx_grpc::CreateAIForceIEPEChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSource: { + current_excit_source = static_cast(request->current_excit_source()); + break; + } + case nidaqmx_grpc::CreateAIForceIEPEChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSourceRaw: { + current_excit_source = static_cast(request->current_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateAIForceIEPEChanRequest::CurrentExcitSourceEnumCase::CURRENT_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for current_excit_source was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAICurrentRMSChanRequest::ShuntResistorLocEnumCase::SHUNT_RESISTOR_LOC_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for shunt_resistor_loc was not specified or out of range"); - break; + + float64 current_excit_val = request->current_excit_val(); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateAIForceIEPEChan(task, physical_channel, name_to_assign_to_channel, terminal_config, min_val, max_val, units, sensitivity, sensitivity_units, current_excit_source, current_excit_val, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAIFreqVoltageChan(::grpc::ServerContext* context, const CreateAIFreqVoltageChanRequest* request, CreateAIFreqVoltageChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAIFreqVoltageChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAIFreqVoltageChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAIFreqVoltageChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } + } - float64 ext_shunt_resistor_val = request->ext_shunt_resistor_val(); - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateAICurrentRMSChan(task, physical_channel, name_to_assign_to_channel, terminal_config, min_val, max_val, units, shunt_resistor_loc, ext_shunt_resistor_val, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + float64 threshold_level = request->threshold_level(); + float64 hysteresis = request->hysteresis(); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateAIFreqVoltageChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, threshold_level, hysteresis, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAIMicrophoneChan(::grpc::ServerContext* context, const CreateAIMicrophoneChanRequest* request, CreateAIMicrophoneChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + int32 terminal_config; + switch (request->terminal_config_enum_case()) { + case nidaqmx_grpc::CreateAIMicrophoneChanRequest::TerminalConfigEnumCase::kTerminalConfig: { + terminal_config = static_cast(request->terminal_config()); + break; + } + case nidaqmx_grpc::CreateAIMicrophoneChanRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { + terminal_config = static_cast(request->terminal_config_raw()); + break; + } + case nidaqmx_grpc::CreateAIMicrophoneChanRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAIForceBridgePolynomialChan(::grpc::ServerContext* context, const CreateAIForceBridgePolynomialChanRequest* request, CreateAIForceBridgePolynomialChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAIForceBridgePolynomialChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAIMicrophoneChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAIMicrophoneChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAIMicrophoneChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIForceBridgePolynomialChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; + + float64 mic_sensitivity = request->mic_sensitivity(); + float64 max_snd_press_level = request->max_snd_press_level(); + int32 current_excit_source; + switch (request->current_excit_source_enum_case()) { + case nidaqmx_grpc::CreateAIMicrophoneChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSource: { + current_excit_source = static_cast(request->current_excit_source()); + break; + } + case nidaqmx_grpc::CreateAIMicrophoneChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSourceRaw: { + current_excit_source = static_cast(request->current_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateAIMicrophoneChanRequest::CurrentExcitSourceEnumCase::CURRENT_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for current_excit_source was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIForceBridgePolynomialChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + + float64 current_excit_val = request->current_excit_val(); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateAIMicrophoneChan(task, physical_channel, name_to_assign_to_channel, terminal_config, units, mic_sensitivity, max_snd_press_level, current_excit_source, current_excit_val, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - int32 bridge_config; - switch (request->bridge_config_enum_case()) { - case nidaqmx_grpc::CreateAIForceBridgePolynomialChanRequest::BridgeConfigEnumCase::kBridgeConfig: { - bridge_config = static_cast(request->bridge_config()); - break; + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAIPosEddyCurrProxProbeChan(::grpc::ServerContext* context, const CreateAIPosEddyCurrProxProbeChanRequest* request, CreateAIPosEddyCurrProxProbeChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAIPosEddyCurrProxProbeChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAIPosEddyCurrProxProbeChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAIPosEddyCurrProxProbeChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIForceBridgePolynomialChanRequest::BridgeConfigEnumCase::kBridgeConfigRaw: { - bridge_config = static_cast(request->bridge_config_raw()); - break; + + float64 sensitivity = request->sensitivity(); + int32 sensitivity_units; + switch (request->sensitivity_units_enum_case()) { + case nidaqmx_grpc::CreateAIPosEddyCurrProxProbeChanRequest::SensitivityUnitsEnumCase::kSensitivityUnits: { + sensitivity_units = static_cast(request->sensitivity_units()); + break; + } + case nidaqmx_grpc::CreateAIPosEddyCurrProxProbeChanRequest::SensitivityUnitsEnumCase::kSensitivityUnitsRaw: { + sensitivity_units = static_cast(request->sensitivity_units_raw()); + break; + } + case nidaqmx_grpc::CreateAIPosEddyCurrProxProbeChanRequest::SensitivityUnitsEnumCase::SENSITIVITY_UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sensitivity_units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIForceBridgePolynomialChanRequest::BridgeConfigEnumCase::BRIDGE_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for bridge_config was not specified or out of range"); - break; + + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateAIPosEddyCurrProxProbeChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, sensitivity, sensitivity_units, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAIPosLVDTChan(::grpc::ServerContext* context, const CreateAIPosLVDTChanRequest* request, CreateAIPosLVDTChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAIPosLVDTChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAIPosLVDTChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAIPosLVDTChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } + } - int32 voltage_excit_source; - switch (request->voltage_excit_source_enum_case()) { - case nidaqmx_grpc::CreateAIForceBridgePolynomialChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { - voltage_excit_source = static_cast(request->voltage_excit_source()); - break; + float64 sensitivity = request->sensitivity(); + int32 sensitivity_units; + switch (request->sensitivity_units_enum_case()) { + case nidaqmx_grpc::CreateAIPosLVDTChanRequest::SensitivityUnitsEnumCase::kSensitivityUnits: { + sensitivity_units = static_cast(request->sensitivity_units()); + break; + } + case nidaqmx_grpc::CreateAIPosLVDTChanRequest::SensitivityUnitsEnumCase::kSensitivityUnitsRaw: { + sensitivity_units = static_cast(request->sensitivity_units_raw()); + break; + } + case nidaqmx_grpc::CreateAIPosLVDTChanRequest::SensitivityUnitsEnumCase::SENSITIVITY_UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sensitivity_units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIForceBridgePolynomialChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { - voltage_excit_source = static_cast(request->voltage_excit_source_raw()); - break; + + int32 voltage_excit_source; + switch (request->voltage_excit_source_enum_case()) { + case nidaqmx_grpc::CreateAIPosLVDTChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { + voltage_excit_source = static_cast(request->voltage_excit_source()); + break; + } + case nidaqmx_grpc::CreateAIPosLVDTChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { + voltage_excit_source = static_cast(request->voltage_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateAIPosLVDTChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIForceBridgePolynomialChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); - break; + + float64 voltage_excit_val = request->voltage_excit_val(); + float64 voltage_excit_freq = request->voltage_excit_freq(); + int32 ac_excit_wire_mode; + switch (request->ac_excit_wire_mode_enum_case()) { + case nidaqmx_grpc::CreateAIPosLVDTChanRequest::AcExcitWireModeEnumCase::kAcExcitWireMode: { + ac_excit_wire_mode = static_cast(request->ac_excit_wire_mode()); + break; + } + case nidaqmx_grpc::CreateAIPosLVDTChanRequest::AcExcitWireModeEnumCase::kAcExcitWireModeRaw: { + ac_excit_wire_mode = static_cast(request->ac_excit_wire_mode_raw()); + break; + } + case nidaqmx_grpc::CreateAIPosLVDTChanRequest::AcExcitWireModeEnumCase::AC_EXCIT_WIRE_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for ac_excit_wire_mode was not specified or out of range"); + break; + } } - } - float64 voltage_excit_val = request->voltage_excit_val(); - float64 nominal_bridge_resistance = request->nominal_bridge_resistance(); - auto forward_coeffs = const_cast(request->forward_coeffs().data()); - uInt32 num_forward_coeffs = static_cast(request->forward_coeffs().size()); - auto reverse_coeffs = const_cast(request->reverse_coeffs().data()); - uInt32 num_reverse_coeffs = static_cast(request->reverse_coeffs().size()); - int32 electrical_units; - switch (request->electrical_units_enum_case()) { - case nidaqmx_grpc::CreateAIForceBridgePolynomialChanRequest::ElectricalUnitsEnumCase::kElectricalUnits: { - electrical_units = static_cast(request->electrical_units()); - break; + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateAIPosLVDTChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, sensitivity, sensitivity_units, voltage_excit_source, voltage_excit_val, voltage_excit_freq, ac_excit_wire_mode, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - case nidaqmx_grpc::CreateAIForceBridgePolynomialChanRequest::ElectricalUnitsEnumCase::kElectricalUnitsRaw: { - electrical_units = static_cast(request->electrical_units_raw()); - break; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAIPosRVDTChan(::grpc::ServerContext* context, const CreateAIPosRVDTChanRequest* request, CreateAIPosRVDTChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAIPosRVDTChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAIPosRVDTChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAIPosRVDTChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIForceBridgePolynomialChanRequest::ElectricalUnitsEnumCase::ELECTRICAL_UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for electrical_units was not specified or out of range"); - break; + + float64 sensitivity = request->sensitivity(); + int32 sensitivity_units; + switch (request->sensitivity_units_enum_case()) { + case nidaqmx_grpc::CreateAIPosRVDTChanRequest::SensitivityUnitsEnumCase::kSensitivityUnits: { + sensitivity_units = static_cast(request->sensitivity_units()); + break; + } + case nidaqmx_grpc::CreateAIPosRVDTChanRequest::SensitivityUnitsEnumCase::kSensitivityUnitsRaw: { + sensitivity_units = static_cast(request->sensitivity_units_raw()); + break; + } + case nidaqmx_grpc::CreateAIPosRVDTChanRequest::SensitivityUnitsEnumCase::SENSITIVITY_UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sensitivity_units was not specified or out of range"); + break; + } } - } - int32 physical_units; - switch (request->physical_units_enum_case()) { - case nidaqmx_grpc::CreateAIForceBridgePolynomialChanRequest::PhysicalUnitsEnumCase::kPhysicalUnits: { - physical_units = static_cast(request->physical_units()); - break; + int32 voltage_excit_source; + switch (request->voltage_excit_source_enum_case()) { + case nidaqmx_grpc::CreateAIPosRVDTChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { + voltage_excit_source = static_cast(request->voltage_excit_source()); + break; + } + case nidaqmx_grpc::CreateAIPosRVDTChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { + voltage_excit_source = static_cast(request->voltage_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateAIPosRVDTChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIForceBridgePolynomialChanRequest::PhysicalUnitsEnumCase::kPhysicalUnitsRaw: { - physical_units = static_cast(request->physical_units_raw()); - break; + + float64 voltage_excit_val = request->voltage_excit_val(); + float64 voltage_excit_freq = request->voltage_excit_freq(); + int32 ac_excit_wire_mode; + switch (request->ac_excit_wire_mode_enum_case()) { + case nidaqmx_grpc::CreateAIPosRVDTChanRequest::AcExcitWireModeEnumCase::kAcExcitWireMode: { + ac_excit_wire_mode = static_cast(request->ac_excit_wire_mode()); + break; + } + case nidaqmx_grpc::CreateAIPosRVDTChanRequest::AcExcitWireModeEnumCase::kAcExcitWireModeRaw: { + ac_excit_wire_mode = static_cast(request->ac_excit_wire_mode_raw()); + break; + } + case nidaqmx_grpc::CreateAIPosRVDTChanRequest::AcExcitWireModeEnumCase::AC_EXCIT_WIRE_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for ac_excit_wire_mode was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIForceBridgePolynomialChanRequest::PhysicalUnitsEnumCase::PHYSICAL_UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for physical_units was not specified or out of range"); - break; + + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateAIPosRVDTChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, sensitivity, sensitivity_units, voltage_excit_source, voltage_excit_val, voltage_excit_freq, ac_excit_wire_mode, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateAIForceBridgePolynomialChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, bridge_config, voltage_excit_source, voltage_excit_val, nominal_bridge_resistance, forward_coeffs, num_forward_coeffs, reverse_coeffs, num_reverse_coeffs, electrical_units, physical_units, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAIPowerChan(::grpc::ServerContext* context, const CreateAIPowerChanRequest* request, CreateAIPowerChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 voltage_setpoint = request->voltage_setpoint(); + float64 current_setpoint = request->current_setpoint(); + bool32 output_enable = request->output_enable(); + auto status = library_->CreateAIPowerChan(task, physical_channel, name_to_assign_to_channel, voltage_setpoint, current_setpoint, output_enable); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAIForceBridgeTableChan(::grpc::ServerContext* context, const CreateAIForceBridgeTableChanRequest* request, CreateAIForceBridgeTableChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAIForceBridgeTableChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAIPressureBridgePolynomialChan(::grpc::ServerContext* context, const CreateAIPressureBridgePolynomialChanRequest* request, CreateAIPressureBridgePolynomialChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAIPressureBridgePolynomialChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAIPressureBridgePolynomialChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAIPressureBridgePolynomialChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIForceBridgeTableChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; + + int32 bridge_config; + switch (request->bridge_config_enum_case()) { + case nidaqmx_grpc::CreateAIPressureBridgePolynomialChanRequest::BridgeConfigEnumCase::kBridgeConfig: { + bridge_config = static_cast(request->bridge_config()); + break; + } + case nidaqmx_grpc::CreateAIPressureBridgePolynomialChanRequest::BridgeConfigEnumCase::kBridgeConfigRaw: { + bridge_config = static_cast(request->bridge_config_raw()); + break; + } + case nidaqmx_grpc::CreateAIPressureBridgePolynomialChanRequest::BridgeConfigEnumCase::BRIDGE_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for bridge_config was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIForceBridgeTableChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + + int32 voltage_excit_source; + switch (request->voltage_excit_source_enum_case()) { + case nidaqmx_grpc::CreateAIPressureBridgePolynomialChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { + voltage_excit_source = static_cast(request->voltage_excit_source()); + break; + } + case nidaqmx_grpc::CreateAIPressureBridgePolynomialChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { + voltage_excit_source = static_cast(request->voltage_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateAIPressureBridgePolynomialChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); + break; + } } - } - int32 bridge_config; - switch (request->bridge_config_enum_case()) { - case nidaqmx_grpc::CreateAIForceBridgeTableChanRequest::BridgeConfigEnumCase::kBridgeConfig: { - bridge_config = static_cast(request->bridge_config()); - break; + float64 voltage_excit_val = request->voltage_excit_val(); + float64 nominal_bridge_resistance = request->nominal_bridge_resistance(); + auto forward_coeffs = const_cast(request->forward_coeffs().data()); + uInt32 num_forward_coeffs = static_cast(request->forward_coeffs().size()); + auto reverse_coeffs = const_cast(request->reverse_coeffs().data()); + uInt32 num_reverse_coeffs = static_cast(request->reverse_coeffs().size()); + int32 electrical_units; + switch (request->electrical_units_enum_case()) { + case nidaqmx_grpc::CreateAIPressureBridgePolynomialChanRequest::ElectricalUnitsEnumCase::kElectricalUnits: { + electrical_units = static_cast(request->electrical_units()); + break; + } + case nidaqmx_grpc::CreateAIPressureBridgePolynomialChanRequest::ElectricalUnitsEnumCase::kElectricalUnitsRaw: { + electrical_units = static_cast(request->electrical_units_raw()); + break; + } + case nidaqmx_grpc::CreateAIPressureBridgePolynomialChanRequest::ElectricalUnitsEnumCase::ELECTRICAL_UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for electrical_units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIForceBridgeTableChanRequest::BridgeConfigEnumCase::kBridgeConfigRaw: { - bridge_config = static_cast(request->bridge_config_raw()); - break; + + int32 physical_units; + switch (request->physical_units_enum_case()) { + case nidaqmx_grpc::CreateAIPressureBridgePolynomialChanRequest::PhysicalUnitsEnumCase::kPhysicalUnits: { + physical_units = static_cast(request->physical_units()); + break; + } + case nidaqmx_grpc::CreateAIPressureBridgePolynomialChanRequest::PhysicalUnitsEnumCase::kPhysicalUnitsRaw: { + physical_units = static_cast(request->physical_units_raw()); + break; + } + case nidaqmx_grpc::CreateAIPressureBridgePolynomialChanRequest::PhysicalUnitsEnumCase::PHYSICAL_UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for physical_units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIForceBridgeTableChanRequest::BridgeConfigEnumCase::BRIDGE_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for bridge_config was not specified or out of range"); - break; + + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateAIPressureBridgePolynomialChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, bridge_config, voltage_excit_source, voltage_excit_val, nominal_bridge_resistance, forward_coeffs, num_forward_coeffs, reverse_coeffs, num_reverse_coeffs, electrical_units, physical_units, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - int32 voltage_excit_source; - switch (request->voltage_excit_source_enum_case()) { - case nidaqmx_grpc::CreateAIForceBridgeTableChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { - voltage_excit_source = static_cast(request->voltage_excit_source()); - break; + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAIPressureBridgeTableChan(::grpc::ServerContext* context, const CreateAIPressureBridgeTableChanRequest* request, CreateAIPressureBridgeTableChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAIPressureBridgeTableChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAIPressureBridgeTableChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAIPressureBridgeTableChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIForceBridgeTableChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { - voltage_excit_source = static_cast(request->voltage_excit_source_raw()); - break; + + int32 bridge_config; + switch (request->bridge_config_enum_case()) { + case nidaqmx_grpc::CreateAIPressureBridgeTableChanRequest::BridgeConfigEnumCase::kBridgeConfig: { + bridge_config = static_cast(request->bridge_config()); + break; + } + case nidaqmx_grpc::CreateAIPressureBridgeTableChanRequest::BridgeConfigEnumCase::kBridgeConfigRaw: { + bridge_config = static_cast(request->bridge_config_raw()); + break; + } + case nidaqmx_grpc::CreateAIPressureBridgeTableChanRequest::BridgeConfigEnumCase::BRIDGE_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for bridge_config was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIForceBridgeTableChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); - break; + + int32 voltage_excit_source; + switch (request->voltage_excit_source_enum_case()) { + case nidaqmx_grpc::CreateAIPressureBridgeTableChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { + voltage_excit_source = static_cast(request->voltage_excit_source()); + break; + } + case nidaqmx_grpc::CreateAIPressureBridgeTableChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { + voltage_excit_source = static_cast(request->voltage_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateAIPressureBridgeTableChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); + break; + } } - } - float64 voltage_excit_val = request->voltage_excit_val(); - float64 nominal_bridge_resistance = request->nominal_bridge_resistance(); - auto electrical_vals = const_cast(request->electrical_vals().data()); - uInt32 num_electrical_vals = static_cast(request->electrical_vals().size()); - int32 electrical_units; - switch (request->electrical_units_enum_case()) { - case nidaqmx_grpc::CreateAIForceBridgeTableChanRequest::ElectricalUnitsEnumCase::kElectricalUnits: { - electrical_units = static_cast(request->electrical_units()); - break; + float64 voltage_excit_val = request->voltage_excit_val(); + float64 nominal_bridge_resistance = request->nominal_bridge_resistance(); + auto electrical_vals = const_cast(request->electrical_vals().data()); + uInt32 num_electrical_vals = static_cast(request->electrical_vals().size()); + int32 electrical_units; + switch (request->electrical_units_enum_case()) { + case nidaqmx_grpc::CreateAIPressureBridgeTableChanRequest::ElectricalUnitsEnumCase::kElectricalUnits: { + electrical_units = static_cast(request->electrical_units()); + break; + } + case nidaqmx_grpc::CreateAIPressureBridgeTableChanRequest::ElectricalUnitsEnumCase::kElectricalUnitsRaw: { + electrical_units = static_cast(request->electrical_units_raw()); + break; + } + case nidaqmx_grpc::CreateAIPressureBridgeTableChanRequest::ElectricalUnitsEnumCase::ELECTRICAL_UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for electrical_units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIForceBridgeTableChanRequest::ElectricalUnitsEnumCase::kElectricalUnitsRaw: { - electrical_units = static_cast(request->electrical_units_raw()); - break; + + auto physical_vals = const_cast(request->physical_vals().data()); + uInt32 num_physical_vals = static_cast(request->physical_vals().size()); + int32 physical_units; + switch (request->physical_units_enum_case()) { + case nidaqmx_grpc::CreateAIPressureBridgeTableChanRequest::PhysicalUnitsEnumCase::kPhysicalUnits: { + physical_units = static_cast(request->physical_units()); + break; + } + case nidaqmx_grpc::CreateAIPressureBridgeTableChanRequest::PhysicalUnitsEnumCase::kPhysicalUnitsRaw: { + physical_units = static_cast(request->physical_units_raw()); + break; + } + case nidaqmx_grpc::CreateAIPressureBridgeTableChanRequest::PhysicalUnitsEnumCase::PHYSICAL_UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for physical_units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIForceBridgeTableChanRequest::ElectricalUnitsEnumCase::ELECTRICAL_UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for electrical_units was not specified or out of range"); - break; + + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateAIPressureBridgeTableChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, bridge_config, voltage_excit_source, voltage_excit_val, nominal_bridge_resistance, electrical_vals, num_electrical_vals, electrical_units, physical_vals, num_physical_vals, physical_units, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - auto physical_vals = const_cast(request->physical_vals().data()); - uInt32 num_physical_vals = static_cast(request->physical_vals().size()); - int32 physical_units; - switch (request->physical_units_enum_case()) { - case nidaqmx_grpc::CreateAIForceBridgeTableChanRequest::PhysicalUnitsEnumCase::kPhysicalUnits: { - physical_units = static_cast(request->physical_units()); - break; + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAIPressureBridgeTwoPointLinChan(::grpc::ServerContext* context, const CreateAIPressureBridgeTwoPointLinChanRequest* request, CreateAIPressureBridgeTwoPointLinChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAIPressureBridgeTwoPointLinChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAIPressureBridgeTwoPointLinChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAIPressureBridgeTwoPointLinChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIForceBridgeTableChanRequest::PhysicalUnitsEnumCase::kPhysicalUnitsRaw: { - physical_units = static_cast(request->physical_units_raw()); - break; + + int32 bridge_config; + switch (request->bridge_config_enum_case()) { + case nidaqmx_grpc::CreateAIPressureBridgeTwoPointLinChanRequest::BridgeConfigEnumCase::kBridgeConfig: { + bridge_config = static_cast(request->bridge_config()); + break; + } + case nidaqmx_grpc::CreateAIPressureBridgeTwoPointLinChanRequest::BridgeConfigEnumCase::kBridgeConfigRaw: { + bridge_config = static_cast(request->bridge_config_raw()); + break; + } + case nidaqmx_grpc::CreateAIPressureBridgeTwoPointLinChanRequest::BridgeConfigEnumCase::BRIDGE_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for bridge_config was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIForceBridgeTableChanRequest::PhysicalUnitsEnumCase::PHYSICAL_UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for physical_units was not specified or out of range"); - break; + + int32 voltage_excit_source; + switch (request->voltage_excit_source_enum_case()) { + case nidaqmx_grpc::CreateAIPressureBridgeTwoPointLinChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { + voltage_excit_source = static_cast(request->voltage_excit_source()); + break; + } + case nidaqmx_grpc::CreateAIPressureBridgeTwoPointLinChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { + voltage_excit_source = static_cast(request->voltage_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateAIPressureBridgeTwoPointLinChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); + break; + } } - } - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateAIForceBridgeTableChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, bridge_config, voltage_excit_source, voltage_excit_val, nominal_bridge_resistance, electrical_vals, num_electrical_vals, electrical_units, physical_vals, num_physical_vals, physical_units, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAIForceBridgeTwoPointLinChan(::grpc::ServerContext* context, const CreateAIForceBridgeTwoPointLinChanRequest* request, CreateAIForceBridgeTwoPointLinChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAIForceBridgeTwoPointLinChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; + float64 voltage_excit_val = request->voltage_excit_val(); + float64 nominal_bridge_resistance = request->nominal_bridge_resistance(); + float64 first_electrical_val = request->first_electrical_val(); + float64 second_electrical_val = request->second_electrical_val(); + int32 electrical_units; + switch (request->electrical_units_enum_case()) { + case nidaqmx_grpc::CreateAIPressureBridgeTwoPointLinChanRequest::ElectricalUnitsEnumCase::kElectricalUnits: { + electrical_units = static_cast(request->electrical_units()); + break; + } + case nidaqmx_grpc::CreateAIPressureBridgeTwoPointLinChanRequest::ElectricalUnitsEnumCase::kElectricalUnitsRaw: { + electrical_units = static_cast(request->electrical_units_raw()); + break; + } + case nidaqmx_grpc::CreateAIPressureBridgeTwoPointLinChanRequest::ElectricalUnitsEnumCase::ELECTRICAL_UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for electrical_units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIForceBridgeTwoPointLinChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; + + float64 first_physical_val = request->first_physical_val(); + float64 second_physical_val = request->second_physical_val(); + int32 physical_units; + switch (request->physical_units_enum_case()) { + case nidaqmx_grpc::CreateAIPressureBridgeTwoPointLinChanRequest::PhysicalUnitsEnumCase::kPhysicalUnits: { + physical_units = static_cast(request->physical_units()); + break; + } + case nidaqmx_grpc::CreateAIPressureBridgeTwoPointLinChanRequest::PhysicalUnitsEnumCase::kPhysicalUnitsRaw: { + physical_units = static_cast(request->physical_units_raw()); + break; + } + case nidaqmx_grpc::CreateAIPressureBridgeTwoPointLinChanRequest::PhysicalUnitsEnumCase::PHYSICAL_UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for physical_units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIForceBridgeTwoPointLinChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateAIPressureBridgeTwoPointLinChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, bridge_config, voltage_excit_source, voltage_excit_val, nominal_bridge_resistance, first_electrical_val, second_electrical_val, electrical_units, first_physical_val, second_physical_val, physical_units, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAIRTDChan(::grpc::ServerContext* context, const CreateAIRTDChanRequest* request, CreateAIRTDChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAIRTDChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAIRTDChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAIRTDChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } + } + + int32 rtd_type; + switch (request->rtd_type_enum_case()) { + case nidaqmx_grpc::CreateAIRTDChanRequest::RtdTypeEnumCase::kRtdType: { + rtd_type = static_cast(request->rtd_type()); + break; + } + case nidaqmx_grpc::CreateAIRTDChanRequest::RtdTypeEnumCase::kRtdTypeRaw: { + rtd_type = static_cast(request->rtd_type_raw()); + break; + } + case nidaqmx_grpc::CreateAIRTDChanRequest::RtdTypeEnumCase::RTD_TYPE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for rtd_type was not specified or out of range"); + break; + } + } - int32 bridge_config; - switch (request->bridge_config_enum_case()) { - case nidaqmx_grpc::CreateAIForceBridgeTwoPointLinChanRequest::BridgeConfigEnumCase::kBridgeConfig: { - bridge_config = static_cast(request->bridge_config()); - break; + int32 resistance_config; + switch (request->resistance_config_enum_case()) { + case nidaqmx_grpc::CreateAIRTDChanRequest::ResistanceConfigEnumCase::kResistanceConfig: { + resistance_config = static_cast(request->resistance_config()); + break; + } + case nidaqmx_grpc::CreateAIRTDChanRequest::ResistanceConfigEnumCase::kResistanceConfigRaw: { + resistance_config = static_cast(request->resistance_config_raw()); + break; + } + case nidaqmx_grpc::CreateAIRTDChanRequest::ResistanceConfigEnumCase::RESISTANCE_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for resistance_config was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIForceBridgeTwoPointLinChanRequest::BridgeConfigEnumCase::kBridgeConfigRaw: { - bridge_config = static_cast(request->bridge_config_raw()); - break; + + int32 current_excit_source; + switch (request->current_excit_source_enum_case()) { + case nidaqmx_grpc::CreateAIRTDChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSource: { + current_excit_source = static_cast(request->current_excit_source()); + break; + } + case nidaqmx_grpc::CreateAIRTDChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSourceRaw: { + current_excit_source = static_cast(request->current_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateAIRTDChanRequest::CurrentExcitSourceEnumCase::CURRENT_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for current_excit_source was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIForceBridgeTwoPointLinChanRequest::BridgeConfigEnumCase::BRIDGE_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for bridge_config was not specified or out of range"); - break; + + float64 current_excit_val = request->current_excit_val(); + float64 r0 = request->r0(); + auto status = library_->CreateAIRTDChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, rtd_type, resistance_config, current_excit_source, current_excit_val, r0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAIResistanceChan(::grpc::ServerContext* context, const CreateAIResistanceChanRequest* request, CreateAIResistanceChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAIResistanceChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAIResistanceChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAIResistanceChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } + } - int32 voltage_excit_source; - switch (request->voltage_excit_source_enum_case()) { - case nidaqmx_grpc::CreateAIForceBridgeTwoPointLinChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { - voltage_excit_source = static_cast(request->voltage_excit_source()); - break; + int32 resistance_config; + switch (request->resistance_config_enum_case()) { + case nidaqmx_grpc::CreateAIResistanceChanRequest::ResistanceConfigEnumCase::kResistanceConfig: { + resistance_config = static_cast(request->resistance_config()); + break; + } + case nidaqmx_grpc::CreateAIResistanceChanRequest::ResistanceConfigEnumCase::kResistanceConfigRaw: { + resistance_config = static_cast(request->resistance_config_raw()); + break; + } + case nidaqmx_grpc::CreateAIResistanceChanRequest::ResistanceConfigEnumCase::RESISTANCE_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for resistance_config was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIForceBridgeTwoPointLinChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { - voltage_excit_source = static_cast(request->voltage_excit_source_raw()); - break; + + int32 current_excit_source; + switch (request->current_excit_source_enum_case()) { + case nidaqmx_grpc::CreateAIResistanceChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSource: { + current_excit_source = static_cast(request->current_excit_source()); + break; + } + case nidaqmx_grpc::CreateAIResistanceChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSourceRaw: { + current_excit_source = static_cast(request->current_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateAIResistanceChanRequest::CurrentExcitSourceEnumCase::CURRENT_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for current_excit_source was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIForceBridgeTwoPointLinChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); - break; + + float64 current_excit_val = request->current_excit_val(); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateAIResistanceChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, resistance_config, current_excit_source, current_excit_val, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAIRosetteStrainGageChan(::grpc::ServerContext* context, const CreateAIRosetteStrainGageChanRequest* request, CreateAIRosetteStrainGageChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 rosette_type; + switch (request->rosette_type_enum_case()) { + case nidaqmx_grpc::CreateAIRosetteStrainGageChanRequest::RosetteTypeEnumCase::kRosetteType: { + rosette_type = static_cast(request->rosette_type()); + break; + } + case nidaqmx_grpc::CreateAIRosetteStrainGageChanRequest::RosetteTypeEnumCase::kRosetteTypeRaw: { + rosette_type = static_cast(request->rosette_type_raw()); + break; + } + case nidaqmx_grpc::CreateAIRosetteStrainGageChanRequest::RosetteTypeEnumCase::ROSETTE_TYPE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for rosette_type was not specified or out of range"); + break; + } + } - float64 voltage_excit_val = request->voltage_excit_val(); - float64 nominal_bridge_resistance = request->nominal_bridge_resistance(); - float64 first_electrical_val = request->first_electrical_val(); - float64 second_electrical_val = request->second_electrical_val(); - int32 electrical_units; - switch (request->electrical_units_enum_case()) { - case nidaqmx_grpc::CreateAIForceBridgeTwoPointLinChanRequest::ElectricalUnitsEnumCase::kElectricalUnits: { - electrical_units = static_cast(request->electrical_units()); - break; + float64 gage_orientation = request->gage_orientation(); + auto rosette_meas_types_vector = std::vector(); + rosette_meas_types_vector.reserve(request->rosette_meas_types().size()); + std::transform( + request->rosette_meas_types().begin(), + request->rosette_meas_types().end(), + std::back_inserter(rosette_meas_types_vector), + [](auto x) { return x; }); + auto rosette_meas_types = rosette_meas_types_vector.data(); + + uInt32 num_rosette_meas_types = static_cast(request->rosette_meas_types().size()); + int32 strain_config; + switch (request->strain_config_enum_case()) { + case nidaqmx_grpc::CreateAIRosetteStrainGageChanRequest::StrainConfigEnumCase::kStrainConfig: { + strain_config = static_cast(request->strain_config()); + break; + } + case nidaqmx_grpc::CreateAIRosetteStrainGageChanRequest::StrainConfigEnumCase::kStrainConfigRaw: { + strain_config = static_cast(request->strain_config_raw()); + break; + } + case nidaqmx_grpc::CreateAIRosetteStrainGageChanRequest::StrainConfigEnumCase::STRAIN_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for strain_config was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIForceBridgeTwoPointLinChanRequest::ElectricalUnitsEnumCase::kElectricalUnitsRaw: { - electrical_units = static_cast(request->electrical_units_raw()); - break; + + int32 voltage_excit_source; + switch (request->voltage_excit_source_enum_case()) { + case nidaqmx_grpc::CreateAIRosetteStrainGageChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { + voltage_excit_source = static_cast(request->voltage_excit_source()); + break; + } + case nidaqmx_grpc::CreateAIRosetteStrainGageChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { + voltage_excit_source = static_cast(request->voltage_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateAIRosetteStrainGageChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIForceBridgeTwoPointLinChanRequest::ElectricalUnitsEnumCase::ELECTRICAL_UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for electrical_units was not specified or out of range"); - break; + + float64 voltage_excit_val = request->voltage_excit_val(); + float64 gage_factor = request->gage_factor(); + float64 nominal_gage_resistance = request->nominal_gage_resistance(); + float64 poisson_ratio = request->poisson_ratio(); + float64 lead_wire_resistance = request->lead_wire_resistance(); + auto status = library_->CreateAIRosetteStrainGageChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, rosette_type, gage_orientation, rosette_meas_types, num_rosette_meas_types, strain_config, voltage_excit_source, voltage_excit_val, gage_factor, nominal_gage_resistance, poisson_ratio, lead_wire_resistance); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAIStrainGageChan(::grpc::ServerContext* context, const CreateAIStrainGageChanRequest* request, CreateAIStrainGageChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAIStrainGageChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAIStrainGageChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAIStrainGageChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } + } - float64 first_physical_val = request->first_physical_val(); - float64 second_physical_val = request->second_physical_val(); - int32 physical_units; - switch (request->physical_units_enum_case()) { - case nidaqmx_grpc::CreateAIForceBridgeTwoPointLinChanRequest::PhysicalUnitsEnumCase::kPhysicalUnits: { - physical_units = static_cast(request->physical_units()); - break; + int32 strain_config; + switch (request->strain_config_enum_case()) { + case nidaqmx_grpc::CreateAIStrainGageChanRequest::StrainConfigEnumCase::kStrainConfig: { + strain_config = static_cast(request->strain_config()); + break; + } + case nidaqmx_grpc::CreateAIStrainGageChanRequest::StrainConfigEnumCase::kStrainConfigRaw: { + strain_config = static_cast(request->strain_config_raw()); + break; + } + case nidaqmx_grpc::CreateAIStrainGageChanRequest::StrainConfigEnumCase::STRAIN_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for strain_config was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIForceBridgeTwoPointLinChanRequest::PhysicalUnitsEnumCase::kPhysicalUnitsRaw: { - physical_units = static_cast(request->physical_units_raw()); - break; + + int32 voltage_excit_source; + switch (request->voltage_excit_source_enum_case()) { + case nidaqmx_grpc::CreateAIStrainGageChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { + voltage_excit_source = static_cast(request->voltage_excit_source()); + break; + } + case nidaqmx_grpc::CreateAIStrainGageChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { + voltage_excit_source = static_cast(request->voltage_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateAIStrainGageChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIForceBridgeTwoPointLinChanRequest::PhysicalUnitsEnumCase::PHYSICAL_UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for physical_units was not specified or out of range"); - break; + + float64 voltage_excit_val = request->voltage_excit_val(); + float64 gage_factor = request->gage_factor(); + float64 initial_bridge_voltage = request->initial_bridge_voltage(); + float64 nominal_gage_resistance = request->nominal_gage_resistance(); + float64 poisson_ratio = request->poisson_ratio(); + float64 lead_wire_resistance = request->lead_wire_resistance(); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateAIStrainGageChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, strain_config, voltage_excit_source, voltage_excit_val, gage_factor, initial_bridge_voltage, nominal_gage_resistance, poisson_ratio, lead_wire_resistance, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAITempBuiltInSensorChan(::grpc::ServerContext* context, const CreateAITempBuiltInSensorChanRequest* request, CreateAITempBuiltInSensorChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAITempBuiltInSensorChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAITempBuiltInSensorChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAITempBuiltInSensorChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } + } - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateAIForceBridgeTwoPointLinChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, bridge_config, voltage_excit_source, voltage_excit_val, nominal_bridge_resistance, first_electrical_val, second_electrical_val, electrical_units, first_physical_val, second_physical_val, physical_units, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + auto status = library_->CreateAITempBuiltInSensorChan(task, physical_channel, name_to_assign_to_channel, units); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAIThrmcplChan(::grpc::ServerContext* context, const CreateAIThrmcplChanRequest* request, CreateAIThrmcplChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAIThrmcplChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAIThrmcplChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAIThrmcplChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAIForceIEPEChan(::grpc::ServerContext* context, const CreateAIForceIEPEChanRequest* request, CreateAIForceIEPEChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - int32 terminal_config; - switch (request->terminal_config_enum_case()) { - case nidaqmx_grpc::CreateAIForceIEPEChanRequest::TerminalConfigEnumCase::kTerminalConfig: { - terminal_config = static_cast(request->terminal_config()); - break; + int32 thermocouple_type; + switch (request->thermocouple_type_enum_case()) { + case nidaqmx_grpc::CreateAIThrmcplChanRequest::ThermocoupleTypeEnumCase::kThermocoupleType: { + thermocouple_type = static_cast(request->thermocouple_type()); + break; + } + case nidaqmx_grpc::CreateAIThrmcplChanRequest::ThermocoupleTypeEnumCase::kThermocoupleTypeRaw: { + thermocouple_type = static_cast(request->thermocouple_type_raw()); + break; + } + case nidaqmx_grpc::CreateAIThrmcplChanRequest::ThermocoupleTypeEnumCase::THERMOCOUPLE_TYPE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for thermocouple_type was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIForceIEPEChanRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { - terminal_config = static_cast(request->terminal_config_raw()); - break; + + int32 cjc_source; + switch (request->cjc_source_enum_case()) { + case nidaqmx_grpc::CreateAIThrmcplChanRequest::CjcSourceEnumCase::kCjcSource: { + cjc_source = static_cast(request->cjc_source()); + break; + } + case nidaqmx_grpc::CreateAIThrmcplChanRequest::CjcSourceEnumCase::kCjcSourceRaw: { + cjc_source = static_cast(request->cjc_source_raw()); + break; + } + case nidaqmx_grpc::CreateAIThrmcplChanRequest::CjcSourceEnumCase::CJC_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for cjc_source was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIForceIEPEChanRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); - break; + + float64 cjc_val = request->cjc_val(); + auto cjc_channel_mbcs = convert_from_grpc(request->cjc_channel()); + auto cjc_channel = cjc_channel_mbcs.c_str(); + auto status = library_->CreateAIThrmcplChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, thermocouple_type, cjc_source, cjc_val, cjc_channel); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAIThrmstrChanIex(::grpc::ServerContext* context, const CreateAIThrmstrChanIexRequest* request, CreateAIThrmstrChanIexResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAIThrmstrChanIexRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAIThrmstrChanIexRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAIThrmstrChanIexRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } + } - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAIForceIEPEChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; + int32 resistance_config; + switch (request->resistance_config_enum_case()) { + case nidaqmx_grpc::CreateAIThrmstrChanIexRequest::ResistanceConfigEnumCase::kResistanceConfig: { + resistance_config = static_cast(request->resistance_config()); + break; + } + case nidaqmx_grpc::CreateAIThrmstrChanIexRequest::ResistanceConfigEnumCase::kResistanceConfigRaw: { + resistance_config = static_cast(request->resistance_config_raw()); + break; + } + case nidaqmx_grpc::CreateAIThrmstrChanIexRequest::ResistanceConfigEnumCase::RESISTANCE_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for resistance_config was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIForceIEPEChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; + + int32 current_excit_source; + switch (request->current_excit_source_enum_case()) { + case nidaqmx_grpc::CreateAIThrmstrChanIexRequest::CurrentExcitSourceEnumCase::kCurrentExcitSource: { + current_excit_source = static_cast(request->current_excit_source()); + break; + } + case nidaqmx_grpc::CreateAIThrmstrChanIexRequest::CurrentExcitSourceEnumCase::kCurrentExcitSourceRaw: { + current_excit_source = static_cast(request->current_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateAIThrmstrChanIexRequest::CurrentExcitSourceEnumCase::CURRENT_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for current_excit_source was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIForceIEPEChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + + float64 current_excit_val = request->current_excit_val(); + float64 a = request->a(); + float64 b = request->b(); + float64 c = request->c(); + auto status = library_->CreateAIThrmstrChanIex(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, resistance_config, current_excit_source, current_excit_val, a, b, c); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAIThrmstrChanVex(::grpc::ServerContext* context, const CreateAIThrmstrChanVexRequest* request, CreateAIThrmstrChanVexResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAIThrmstrChanVexRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAIThrmstrChanVexRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAIThrmstrChanVexRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } + } - float64 sensitivity = request->sensitivity(); - int32 sensitivity_units; - switch (request->sensitivity_units_enum_case()) { - case nidaqmx_grpc::CreateAIForceIEPEChanRequest::SensitivityUnitsEnumCase::kSensitivityUnits: { - sensitivity_units = static_cast(request->sensitivity_units()); - break; + int32 resistance_config; + switch (request->resistance_config_enum_case()) { + case nidaqmx_grpc::CreateAIThrmstrChanVexRequest::ResistanceConfigEnumCase::kResistanceConfig: { + resistance_config = static_cast(request->resistance_config()); + break; + } + case nidaqmx_grpc::CreateAIThrmstrChanVexRequest::ResistanceConfigEnumCase::kResistanceConfigRaw: { + resistance_config = static_cast(request->resistance_config_raw()); + break; + } + case nidaqmx_grpc::CreateAIThrmstrChanVexRequest::ResistanceConfigEnumCase::RESISTANCE_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for resistance_config was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIForceIEPEChanRequest::SensitivityUnitsEnumCase::kSensitivityUnitsRaw: { - sensitivity_units = static_cast(request->sensitivity_units_raw()); - break; + + int32 voltage_excit_source; + switch (request->voltage_excit_source_enum_case()) { + case nidaqmx_grpc::CreateAIThrmstrChanVexRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { + voltage_excit_source = static_cast(request->voltage_excit_source()); + break; + } + case nidaqmx_grpc::CreateAIThrmstrChanVexRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { + voltage_excit_source = static_cast(request->voltage_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateAIThrmstrChanVexRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIForceIEPEChanRequest::SensitivityUnitsEnumCase::SENSITIVITY_UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sensitivity_units was not specified or out of range"); - break; + + float64 voltage_excit_val = request->voltage_excit_val(); + float64 a = request->a(); + float64 b = request->b(); + float64 c = request->c(); + float64 r1 = request->r1(); + auto status = library_->CreateAIThrmstrChanVex(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, resistance_config, voltage_excit_source, voltage_excit_val, a, b, c, r1); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAITorqueBridgePolynomialChan(::grpc::ServerContext* context, const CreateAITorqueBridgePolynomialChanRequest* request, CreateAITorqueBridgePolynomialChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAITorqueBridgePolynomialChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAITorqueBridgePolynomialChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAITorqueBridgePolynomialChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } + } + + int32 bridge_config; + switch (request->bridge_config_enum_case()) { + case nidaqmx_grpc::CreateAITorqueBridgePolynomialChanRequest::BridgeConfigEnumCase::kBridgeConfig: { + bridge_config = static_cast(request->bridge_config()); + break; + } + case nidaqmx_grpc::CreateAITorqueBridgePolynomialChanRequest::BridgeConfigEnumCase::kBridgeConfigRaw: { + bridge_config = static_cast(request->bridge_config_raw()); + break; + } + case nidaqmx_grpc::CreateAITorqueBridgePolynomialChanRequest::BridgeConfigEnumCase::BRIDGE_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for bridge_config was not specified or out of range"); + break; + } + } - int32 current_excit_source; - switch (request->current_excit_source_enum_case()) { - case nidaqmx_grpc::CreateAIForceIEPEChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSource: { - current_excit_source = static_cast(request->current_excit_source()); - break; + int32 voltage_excit_source; + switch (request->voltage_excit_source_enum_case()) { + case nidaqmx_grpc::CreateAITorqueBridgePolynomialChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { + voltage_excit_source = static_cast(request->voltage_excit_source()); + break; + } + case nidaqmx_grpc::CreateAITorqueBridgePolynomialChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { + voltage_excit_source = static_cast(request->voltage_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateAITorqueBridgePolynomialChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIForceIEPEChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSourceRaw: { - current_excit_source = static_cast(request->current_excit_source_raw()); - break; + + float64 voltage_excit_val = request->voltage_excit_val(); + float64 nominal_bridge_resistance = request->nominal_bridge_resistance(); + auto forward_coeffs = const_cast(request->forward_coeffs().data()); + uInt32 num_forward_coeffs = static_cast(request->forward_coeffs().size()); + auto reverse_coeffs = const_cast(request->reverse_coeffs().data()); + uInt32 num_reverse_coeffs = static_cast(request->reverse_coeffs().size()); + int32 electrical_units; + switch (request->electrical_units_enum_case()) { + case nidaqmx_grpc::CreateAITorqueBridgePolynomialChanRequest::ElectricalUnitsEnumCase::kElectricalUnits: { + electrical_units = static_cast(request->electrical_units()); + break; + } + case nidaqmx_grpc::CreateAITorqueBridgePolynomialChanRequest::ElectricalUnitsEnumCase::kElectricalUnitsRaw: { + electrical_units = static_cast(request->electrical_units_raw()); + break; + } + case nidaqmx_grpc::CreateAITorqueBridgePolynomialChanRequest::ElectricalUnitsEnumCase::ELECTRICAL_UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for electrical_units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIForceIEPEChanRequest::CurrentExcitSourceEnumCase::CURRENT_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for current_excit_source was not specified or out of range"); - break; + + int32 physical_units; + switch (request->physical_units_enum_case()) { + case nidaqmx_grpc::CreateAITorqueBridgePolynomialChanRequest::PhysicalUnitsEnumCase::kPhysicalUnits: { + physical_units = static_cast(request->physical_units()); + break; + } + case nidaqmx_grpc::CreateAITorqueBridgePolynomialChanRequest::PhysicalUnitsEnumCase::kPhysicalUnitsRaw: { + physical_units = static_cast(request->physical_units_raw()); + break; + } + case nidaqmx_grpc::CreateAITorqueBridgePolynomialChanRequest::PhysicalUnitsEnumCase::PHYSICAL_UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for physical_units was not specified or out of range"); + break; + } } - } - float64 current_excit_val = request->current_excit_val(); - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateAIForceIEPEChan(task, physical_channel, name_to_assign_to_channel, terminal_config, min_val, max_val, units, sensitivity, sensitivity_units, current_excit_source, current_excit_val, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateAITorqueBridgePolynomialChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, bridge_config, voltage_excit_source, voltage_excit_val, nominal_bridge_resistance, forward_coeffs, num_forward_coeffs, reverse_coeffs, num_reverse_coeffs, electrical_units, physical_units, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAITorqueBridgeTableChan(::grpc::ServerContext* context, const CreateAITorqueBridgeTableChanRequest* request, CreateAITorqueBridgeTableChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAITorqueBridgeTableChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAITorqueBridgeTableChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAITorqueBridgeTableChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAIFreqVoltageChan(::grpc::ServerContext* context, const CreateAIFreqVoltageChanRequest* request, CreateAIFreqVoltageChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAIFreqVoltageChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateAIFreqVoltageChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateAIFreqVoltageChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; - } - } - - float64 threshold_level = request->threshold_level(); - float64 hysteresis = request->hysteresis(); - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateAIFreqVoltageChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, threshold_level, hysteresis, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + int32 bridge_config; + switch (request->bridge_config_enum_case()) { + case nidaqmx_grpc::CreateAITorqueBridgeTableChanRequest::BridgeConfigEnumCase::kBridgeConfig: { + bridge_config = static_cast(request->bridge_config()); + break; + } + case nidaqmx_grpc::CreateAITorqueBridgeTableChanRequest::BridgeConfigEnumCase::kBridgeConfigRaw: { + bridge_config = static_cast(request->bridge_config_raw()); + break; + } + case nidaqmx_grpc::CreateAITorqueBridgeTableChanRequest::BridgeConfigEnumCase::BRIDGE_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for bridge_config was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAIMicrophoneChan(::grpc::ServerContext* context, const CreateAIMicrophoneChanRequest* request, CreateAIMicrophoneChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - int32 terminal_config; - switch (request->terminal_config_enum_case()) { - case nidaqmx_grpc::CreateAIMicrophoneChanRequest::TerminalConfigEnumCase::kTerminalConfig: { - terminal_config = static_cast(request->terminal_config()); - break; + int32 voltage_excit_source; + switch (request->voltage_excit_source_enum_case()) { + case nidaqmx_grpc::CreateAITorqueBridgeTableChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { + voltage_excit_source = static_cast(request->voltage_excit_source()); + break; + } + case nidaqmx_grpc::CreateAITorqueBridgeTableChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { + voltage_excit_source = static_cast(request->voltage_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateAITorqueBridgeTableChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIMicrophoneChanRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { - terminal_config = static_cast(request->terminal_config_raw()); - break; + + float64 voltage_excit_val = request->voltage_excit_val(); + float64 nominal_bridge_resistance = request->nominal_bridge_resistance(); + auto electrical_vals = const_cast(request->electrical_vals().data()); + uInt32 num_electrical_vals = static_cast(request->electrical_vals().size()); + int32 electrical_units; + switch (request->electrical_units_enum_case()) { + case nidaqmx_grpc::CreateAITorqueBridgeTableChanRequest::ElectricalUnitsEnumCase::kElectricalUnits: { + electrical_units = static_cast(request->electrical_units()); + break; + } + case nidaqmx_grpc::CreateAITorqueBridgeTableChanRequest::ElectricalUnitsEnumCase::kElectricalUnitsRaw: { + electrical_units = static_cast(request->electrical_units_raw()); + break; + } + case nidaqmx_grpc::CreateAITorqueBridgeTableChanRequest::ElectricalUnitsEnumCase::ELECTRICAL_UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for electrical_units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIMicrophoneChanRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); - break; + + auto physical_vals = const_cast(request->physical_vals().data()); + uInt32 num_physical_vals = static_cast(request->physical_vals().size()); + int32 physical_units; + switch (request->physical_units_enum_case()) { + case nidaqmx_grpc::CreateAITorqueBridgeTableChanRequest::PhysicalUnitsEnumCase::kPhysicalUnits: { + physical_units = static_cast(request->physical_units()); + break; + } + case nidaqmx_grpc::CreateAITorqueBridgeTableChanRequest::PhysicalUnitsEnumCase::kPhysicalUnitsRaw: { + physical_units = static_cast(request->physical_units_raw()); + break; + } + case nidaqmx_grpc::CreateAITorqueBridgeTableChanRequest::PhysicalUnitsEnumCase::PHYSICAL_UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for physical_units was not specified or out of range"); + break; + } } - } - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAIMicrophoneChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateAITorqueBridgeTableChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, bridge_config, voltage_excit_source, voltage_excit_val, nominal_bridge_resistance, electrical_vals, num_electrical_vals, electrical_units, physical_vals, num_physical_vals, physical_units, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - case nidaqmx_grpc::CreateAIMicrophoneChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAITorqueBridgeTwoPointLinChan(::grpc::ServerContext* context, const CreateAITorqueBridgeTwoPointLinChanRequest* request, CreateAITorqueBridgeTwoPointLinChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAITorqueBridgeTwoPointLinChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAITorqueBridgeTwoPointLinChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAITorqueBridgeTwoPointLinChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIMicrophoneChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + + int32 bridge_config; + switch (request->bridge_config_enum_case()) { + case nidaqmx_grpc::CreateAITorqueBridgeTwoPointLinChanRequest::BridgeConfigEnumCase::kBridgeConfig: { + bridge_config = static_cast(request->bridge_config()); + break; + } + case nidaqmx_grpc::CreateAITorqueBridgeTwoPointLinChanRequest::BridgeConfigEnumCase::kBridgeConfigRaw: { + bridge_config = static_cast(request->bridge_config_raw()); + break; + } + case nidaqmx_grpc::CreateAITorqueBridgeTwoPointLinChanRequest::BridgeConfigEnumCase::BRIDGE_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for bridge_config was not specified or out of range"); + break; + } } - } - float64 mic_sensitivity = request->mic_sensitivity(); - float64 max_snd_press_level = request->max_snd_press_level(); - int32 current_excit_source; - switch (request->current_excit_source_enum_case()) { - case nidaqmx_grpc::CreateAIMicrophoneChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSource: { - current_excit_source = static_cast(request->current_excit_source()); - break; + int32 voltage_excit_source; + switch (request->voltage_excit_source_enum_case()) { + case nidaqmx_grpc::CreateAITorqueBridgeTwoPointLinChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { + voltage_excit_source = static_cast(request->voltage_excit_source()); + break; + } + case nidaqmx_grpc::CreateAITorqueBridgeTwoPointLinChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { + voltage_excit_source = static_cast(request->voltage_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateAITorqueBridgeTwoPointLinChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIMicrophoneChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSourceRaw: { - current_excit_source = static_cast(request->current_excit_source_raw()); - break; + + float64 voltage_excit_val = request->voltage_excit_val(); + float64 nominal_bridge_resistance = request->nominal_bridge_resistance(); + float64 first_electrical_val = request->first_electrical_val(); + float64 second_electrical_val = request->second_electrical_val(); + int32 electrical_units; + switch (request->electrical_units_enum_case()) { + case nidaqmx_grpc::CreateAITorqueBridgeTwoPointLinChanRequest::ElectricalUnitsEnumCase::kElectricalUnits: { + electrical_units = static_cast(request->electrical_units()); + break; + } + case nidaqmx_grpc::CreateAITorqueBridgeTwoPointLinChanRequest::ElectricalUnitsEnumCase::kElectricalUnitsRaw: { + electrical_units = static_cast(request->electrical_units_raw()); + break; + } + case nidaqmx_grpc::CreateAITorqueBridgeTwoPointLinChanRequest::ElectricalUnitsEnumCase::ELECTRICAL_UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for electrical_units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIMicrophoneChanRequest::CurrentExcitSourceEnumCase::CURRENT_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for current_excit_source was not specified or out of range"); - break; + + float64 first_physical_val = request->first_physical_val(); + float64 second_physical_val = request->second_physical_val(); + int32 physical_units; + switch (request->physical_units_enum_case()) { + case nidaqmx_grpc::CreateAITorqueBridgeTwoPointLinChanRequest::PhysicalUnitsEnumCase::kPhysicalUnits: { + physical_units = static_cast(request->physical_units()); + break; + } + case nidaqmx_grpc::CreateAITorqueBridgeTwoPointLinChanRequest::PhysicalUnitsEnumCase::kPhysicalUnitsRaw: { + physical_units = static_cast(request->physical_units_raw()); + break; + } + case nidaqmx_grpc::CreateAITorqueBridgeTwoPointLinChanRequest::PhysicalUnitsEnumCase::PHYSICAL_UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for physical_units was not specified or out of range"); + break; + } } - } - float64 current_excit_val = request->current_excit_val(); - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateAIMicrophoneChan(task, physical_channel, name_to_assign_to_channel, terminal_config, units, mic_sensitivity, max_snd_press_level, current_excit_source, current_excit_val, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateAITorqueBridgeTwoPointLinChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, bridge_config, voltage_excit_source, voltage_excit_val, nominal_bridge_resistance, first_electrical_val, second_electrical_val, electrical_units, first_physical_val, second_physical_val, physical_units, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAIPosEddyCurrProxProbeChan(::grpc::ServerContext* context, const CreateAIPosEddyCurrProxProbeChanRequest* request, CreateAIPosEddyCurrProxProbeChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAIPosEddyCurrProxProbeChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateAIPosEddyCurrProxProbeChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateAIPosEddyCurrProxProbeChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; - } - } - - float64 sensitivity = request->sensitivity(); - int32 sensitivity_units; - switch (request->sensitivity_units_enum_case()) { - case nidaqmx_grpc::CreateAIPosEddyCurrProxProbeChanRequest::SensitivityUnitsEnumCase::kSensitivityUnits: { - sensitivity_units = static_cast(request->sensitivity_units()); - break; - } - case nidaqmx_grpc::CreateAIPosEddyCurrProxProbeChanRequest::SensitivityUnitsEnumCase::kSensitivityUnitsRaw: { - sensitivity_units = static_cast(request->sensitivity_units_raw()); - break; - } - case nidaqmx_grpc::CreateAIPosEddyCurrProxProbeChanRequest::SensitivityUnitsEnumCase::SENSITIVITY_UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sensitivity_units was not specified or out of range"); - break; - } - } - - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateAIPosEddyCurrProxProbeChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, sensitivity, sensitivity_units, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAIPosLVDTChan(::grpc::ServerContext* context, const CreateAIPosLVDTChanRequest* request, CreateAIPosLVDTChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAIPosLVDTChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateAIPosLVDTChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateAIPosLVDTChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAIVelocityIEPEChan(::grpc::ServerContext* context, const CreateAIVelocityIEPEChanRequest* request, CreateAIVelocityIEPEChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + int32 terminal_config; + switch (request->terminal_config_enum_case()) { + case nidaqmx_grpc::CreateAIVelocityIEPEChanRequest::TerminalConfigEnumCase::kTerminalConfig: { + terminal_config = static_cast(request->terminal_config()); + break; + } + case nidaqmx_grpc::CreateAIVelocityIEPEChanRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { + terminal_config = static_cast(request->terminal_config_raw()); + break; + } + case nidaqmx_grpc::CreateAIVelocityIEPEChanRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); + break; + } } - } - float64 sensitivity = request->sensitivity(); - int32 sensitivity_units; - switch (request->sensitivity_units_enum_case()) { - case nidaqmx_grpc::CreateAIPosLVDTChanRequest::SensitivityUnitsEnumCase::kSensitivityUnits: { - sensitivity_units = static_cast(request->sensitivity_units()); - break; - } - case nidaqmx_grpc::CreateAIPosLVDTChanRequest::SensitivityUnitsEnumCase::kSensitivityUnitsRaw: { - sensitivity_units = static_cast(request->sensitivity_units_raw()); - break; - } - case nidaqmx_grpc::CreateAIPosLVDTChanRequest::SensitivityUnitsEnumCase::SENSITIVITY_UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sensitivity_units was not specified or out of range"); - break; + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAIVelocityIEPEChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAIVelocityIEPEChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAIVelocityIEPEChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - } - int32 voltage_excit_source; - switch (request->voltage_excit_source_enum_case()) { - case nidaqmx_grpc::CreateAIPosLVDTChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { - voltage_excit_source = static_cast(request->voltage_excit_source()); - break; - } - case nidaqmx_grpc::CreateAIPosLVDTChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { - voltage_excit_source = static_cast(request->voltage_excit_source_raw()); - break; - } - case nidaqmx_grpc::CreateAIPosLVDTChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); - break; + float64 sensitivity = request->sensitivity(); + int32 sensitivity_units; + switch (request->sensitivity_units_enum_case()) { + case nidaqmx_grpc::CreateAIVelocityIEPEChanRequest::SensitivityUnitsEnumCase::kSensitivityUnits: { + sensitivity_units = static_cast(request->sensitivity_units()); + break; + } + case nidaqmx_grpc::CreateAIVelocityIEPEChanRequest::SensitivityUnitsEnumCase::kSensitivityUnitsRaw: { + sensitivity_units = static_cast(request->sensitivity_units_raw()); + break; + } + case nidaqmx_grpc::CreateAIVelocityIEPEChanRequest::SensitivityUnitsEnumCase::SENSITIVITY_UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sensitivity_units was not specified or out of range"); + break; + } } - } - float64 voltage_excit_val = request->voltage_excit_val(); - float64 voltage_excit_freq = request->voltage_excit_freq(); - int32 ac_excit_wire_mode; - switch (request->ac_excit_wire_mode_enum_case()) { - case nidaqmx_grpc::CreateAIPosLVDTChanRequest::AcExcitWireModeEnumCase::kAcExcitWireMode: { - ac_excit_wire_mode = static_cast(request->ac_excit_wire_mode()); - break; - } - case nidaqmx_grpc::CreateAIPosLVDTChanRequest::AcExcitWireModeEnumCase::kAcExcitWireModeRaw: { - ac_excit_wire_mode = static_cast(request->ac_excit_wire_mode_raw()); - break; + int32 current_excit_source; + switch (request->current_excit_source_enum_case()) { + case nidaqmx_grpc::CreateAIVelocityIEPEChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSource: { + current_excit_source = static_cast(request->current_excit_source()); + break; + } + case nidaqmx_grpc::CreateAIVelocityIEPEChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSourceRaw: { + current_excit_source = static_cast(request->current_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateAIVelocityIEPEChanRequest::CurrentExcitSourceEnumCase::CURRENT_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for current_excit_source was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIPosLVDTChanRequest::AcExcitWireModeEnumCase::AC_EXCIT_WIRE_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for ac_excit_wire_mode was not specified or out of range"); - break; + + float64 current_excit_val = request->current_excit_val(); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateAIVelocityIEPEChan(task, physical_channel, name_to_assign_to_channel, terminal_config, min_val, max_val, units, sensitivity, sensitivity_units, current_excit_source, current_excit_val, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAIVoltageChan(::grpc::ServerContext* context, const CreateAIVoltageChanRequest* request, CreateAIVoltageChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + int32 terminal_config; + switch (request->terminal_config_enum_case()) { + case nidaqmx_grpc::CreateAIVoltageChanRequest::TerminalConfigEnumCase::kTerminalConfig: { + terminal_config = static_cast(request->terminal_config()); + break; + } + case nidaqmx_grpc::CreateAIVoltageChanRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { + terminal_config = static_cast(request->terminal_config_raw()); + break; + } + case nidaqmx_grpc::CreateAIVoltageChanRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); + break; + } + } - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateAIPosLVDTChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, sensitivity, sensitivity_units, voltage_excit_source, voltage_excit_val, voltage_excit_freq, ac_excit_wire_mode, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAIVoltageChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAIVoltageChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAIVoltageChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAIPosRVDTChan(::grpc::ServerContext* context, const CreateAIPosRVDTChanRequest* request, CreateAIPosRVDTChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAIPosRVDTChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateAIVoltageChan(task, physical_channel, name_to_assign_to_channel, terminal_config, min_val, max_val, units, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - case nidaqmx_grpc::CreateAIPosRVDTChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAIVoltageChanWithExcit(::grpc::ServerContext* context, const CreateAIVoltageChanWithExcitRequest* request, CreateAIVoltageChanWithExcitResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + int32 terminal_config; + switch (request->terminal_config_enum_case()) { + case nidaqmx_grpc::CreateAIVoltageChanWithExcitRequest::TerminalConfigEnumCase::kTerminalConfig: { + terminal_config = static_cast(request->terminal_config()); + break; + } + case nidaqmx_grpc::CreateAIVoltageChanWithExcitRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { + terminal_config = static_cast(request->terminal_config_raw()); + break; + } + case nidaqmx_grpc::CreateAIVoltageChanWithExcitRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIPosRVDTChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAIVoltageChanWithExcitRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAIVoltageChanWithExcitRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAIVoltageChanWithExcitRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - } - float64 sensitivity = request->sensitivity(); - int32 sensitivity_units; - switch (request->sensitivity_units_enum_case()) { - case nidaqmx_grpc::CreateAIPosRVDTChanRequest::SensitivityUnitsEnumCase::kSensitivityUnits: { - sensitivity_units = static_cast(request->sensitivity_units()); - break; + int32 bridge_config; + switch (request->bridge_config_enum_case()) { + case nidaqmx_grpc::CreateAIVoltageChanWithExcitRequest::BridgeConfigEnumCase::kBridgeConfig: { + bridge_config = static_cast(request->bridge_config()); + break; + } + case nidaqmx_grpc::CreateAIVoltageChanWithExcitRequest::BridgeConfigEnumCase::kBridgeConfigRaw: { + bridge_config = static_cast(request->bridge_config_raw()); + break; + } + case nidaqmx_grpc::CreateAIVoltageChanWithExcitRequest::BridgeConfigEnumCase::BRIDGE_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for bridge_config was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIPosRVDTChanRequest::SensitivityUnitsEnumCase::kSensitivityUnitsRaw: { - sensitivity_units = static_cast(request->sensitivity_units_raw()); - break; + + int32 voltage_excit_source; + switch (request->voltage_excit_source_enum_case()) { + case nidaqmx_grpc::CreateAIVoltageChanWithExcitRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { + voltage_excit_source = static_cast(request->voltage_excit_source()); + break; + } + case nidaqmx_grpc::CreateAIVoltageChanWithExcitRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { + voltage_excit_source = static_cast(request->voltage_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateAIVoltageChanWithExcitRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIPosRVDTChanRequest::SensitivityUnitsEnumCase::SENSITIVITY_UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sensitivity_units was not specified or out of range"); - break; + + float64 voltage_excit_val = request->voltage_excit_val(); + bool32 use_excit_for_scaling = request->use_excit_for_scaling(); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateAIVoltageChanWithExcit(task, physical_channel, name_to_assign_to_channel, terminal_config, min_val, max_val, units, bridge_config, voltage_excit_source, voltage_excit_val, use_excit_for_scaling, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - int32 voltage_excit_source; - switch (request->voltage_excit_source_enum_case()) { - case nidaqmx_grpc::CreateAIPosRVDTChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { - voltage_excit_source = static_cast(request->voltage_excit_source()); - break; + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAIVoltageRMSChan(::grpc::ServerContext* context, const CreateAIVoltageRMSChanRequest* request, CreateAIVoltageRMSChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + int32 terminal_config; + switch (request->terminal_config_enum_case()) { + case nidaqmx_grpc::CreateAIVoltageRMSChanRequest::TerminalConfigEnumCase::kTerminalConfig: { + terminal_config = static_cast(request->terminal_config()); + break; + } + case nidaqmx_grpc::CreateAIVoltageRMSChanRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { + terminal_config = static_cast(request->terminal_config_raw()); + break; + } + case nidaqmx_grpc::CreateAIVoltageRMSChanRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIPosRVDTChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { - voltage_excit_source = static_cast(request->voltage_excit_source_raw()); - break; + + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAIVoltageRMSChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAIVoltageRMSChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAIVoltageRMSChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIPosRVDTChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); - break; + + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateAIVoltageRMSChan(task, physical_channel, name_to_assign_to_channel, terminal_config, min_val, max_val, units, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAOCurrentChan(::grpc::ServerContext* context, const CreateAOCurrentChanRequest* request, CreateAOCurrentChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAOCurrentChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAOCurrentChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAOCurrentChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } + } - float64 voltage_excit_val = request->voltage_excit_val(); - float64 voltage_excit_freq = request->voltage_excit_freq(); - int32 ac_excit_wire_mode; - switch (request->ac_excit_wire_mode_enum_case()) { - case nidaqmx_grpc::CreateAIPosRVDTChanRequest::AcExcitWireModeEnumCase::kAcExcitWireMode: { - ac_excit_wire_mode = static_cast(request->ac_excit_wire_mode()); - break; + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateAOCurrentChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - case nidaqmx_grpc::CreateAIPosRVDTChanRequest::AcExcitWireModeEnumCase::kAcExcitWireModeRaw: { - ac_excit_wire_mode = static_cast(request->ac_excit_wire_mode_raw()); - break; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAOFuncGenChan(::grpc::ServerContext* context, const CreateAOFuncGenChanRequest* request, CreateAOFuncGenChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + int32 type; + switch (request->type_enum_case()) { + case nidaqmx_grpc::CreateAOFuncGenChanRequest::TypeEnumCase::kType: { + type = static_cast(request->type()); + break; + } + case nidaqmx_grpc::CreateAOFuncGenChanRequest::TypeEnumCase::kTypeRaw: { + type = static_cast(request->type_raw()); + break; + } + case nidaqmx_grpc::CreateAOFuncGenChanRequest::TypeEnumCase::TYPE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for type was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIPosRVDTChanRequest::AcExcitWireModeEnumCase::AC_EXCIT_WIRE_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for ac_excit_wire_mode was not specified or out of range"); - break; + + float64 freq = request->freq(); + float64 amplitude = request->amplitude(); + float64 offset = request->offset(); + auto status = library_->CreateAOFuncGenChan(task, physical_channel, name_to_assign_to_channel, type, freq, amplitude, offset); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAOVoltageChan(::grpc::ServerContext* context, const CreateAOVoltageChanRequest* request, CreateAOVoltageChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAOVoltageChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAOVoltageChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAOVoltageChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } + } - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateAIPosRVDTChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, sensitivity, sensitivity_units, voltage_excit_source, voltage_excit_val, voltage_excit_freq, ac_excit_wire_mode, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateAOVoltageChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAIPowerChan(::grpc::ServerContext* context, const CreateAIPowerChanRequest* request, CreateAIPowerChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 voltage_setpoint = request->voltage_setpoint(); - float64 current_setpoint = request->current_setpoint(); - bool32 output_enable = request->output_enable(); - auto status = library_->CreateAIPowerChan(task, physical_channel, name_to_assign_to_channel, voltage_setpoint, current_setpoint, output_enable); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAIPressureBridgePolynomialChan(::grpc::ServerContext* context, const CreateAIPressureBridgePolynomialChanRequest* request, CreateAIPressureBridgePolynomialChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAIPressureBridgePolynomialChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateCIAngEncoderChan(::grpc::ServerContext* context, const CreateCIAngEncoderChanRequest* request, CreateCIAngEncoderChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto counter_mbcs = convert_from_grpc(request->counter()); + auto counter = counter_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + int32 decoding_type; + switch (request->decoding_type_enum_case()) { + case nidaqmx_grpc::CreateCIAngEncoderChanRequest::DecodingTypeEnumCase::kDecodingType: { + decoding_type = static_cast(request->decoding_type()); + break; + } + case nidaqmx_grpc::CreateCIAngEncoderChanRequest::DecodingTypeEnumCase::kDecodingTypeRaw: { + decoding_type = static_cast(request->decoding_type_raw()); + break; + } + case nidaqmx_grpc::CreateCIAngEncoderChanRequest::DecodingTypeEnumCase::DECODING_TYPE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for decoding_type was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIPressureBridgePolynomialChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; + + bool32 zidx_enable = request->zidx_enable(); + float64 zidx_val = request->zidx_val(); + int32 zidx_phase; + switch (request->zidx_phase_enum_case()) { + case nidaqmx_grpc::CreateCIAngEncoderChanRequest::ZidxPhaseEnumCase::kZidxPhase: { + zidx_phase = static_cast(request->zidx_phase()); + break; + } + case nidaqmx_grpc::CreateCIAngEncoderChanRequest::ZidxPhaseEnumCase::kZidxPhaseRaw: { + zidx_phase = static_cast(request->zidx_phase_raw()); + break; + } + case nidaqmx_grpc::CreateCIAngEncoderChanRequest::ZidxPhaseEnumCase::ZIDX_PHASE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for zidx_phase was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIPressureBridgePolynomialChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateCIAngEncoderChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateCIAngEncoderChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateCIAngEncoderChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - } - int32 bridge_config; - switch (request->bridge_config_enum_case()) { - case nidaqmx_grpc::CreateAIPressureBridgePolynomialChanRequest::BridgeConfigEnumCase::kBridgeConfig: { - bridge_config = static_cast(request->bridge_config()); - break; + uInt32 pulses_per_rev = request->pulses_per_rev(); + float64 initial_angle = request->initial_angle(); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateCIAngEncoderChan(task, counter, name_to_assign_to_channel, decoding_type, zidx_enable, zidx_val, zidx_phase, units, pulses_per_rev, initial_angle, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - case nidaqmx_grpc::CreateAIPressureBridgePolynomialChanRequest::BridgeConfigEnumCase::kBridgeConfigRaw: { - bridge_config = static_cast(request->bridge_config_raw()); - break; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateCIAngVelocityChan(::grpc::ServerContext* context, const CreateCIAngVelocityChanRequest* request, CreateCIAngVelocityChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto counter_mbcs = convert_from_grpc(request->counter()); + auto counter = counter_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 decoding_type; + switch (request->decoding_type_enum_case()) { + case nidaqmx_grpc::CreateCIAngVelocityChanRequest::DecodingTypeEnumCase::kDecodingType: { + decoding_type = static_cast(request->decoding_type()); + break; + } + case nidaqmx_grpc::CreateCIAngVelocityChanRequest::DecodingTypeEnumCase::kDecodingTypeRaw: { + decoding_type = static_cast(request->decoding_type_raw()); + break; + } + case nidaqmx_grpc::CreateCIAngVelocityChanRequest::DecodingTypeEnumCase::DECODING_TYPE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for decoding_type was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIPressureBridgePolynomialChanRequest::BridgeConfigEnumCase::BRIDGE_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for bridge_config was not specified or out of range"); - break; + + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateCIAngVelocityChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateCIAngVelocityChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateCIAngVelocityChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - } - int32 voltage_excit_source; - switch (request->voltage_excit_source_enum_case()) { - case nidaqmx_grpc::CreateAIPressureBridgePolynomialChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { - voltage_excit_source = static_cast(request->voltage_excit_source()); - break; + uInt32 pulses_per_rev = request->pulses_per_rev(); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateCIAngVelocityChan(task, counter, name_to_assign_to_channel, min_val, max_val, decoding_type, units, pulses_per_rev, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - case nidaqmx_grpc::CreateAIPressureBridgePolynomialChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { - voltage_excit_source = static_cast(request->voltage_excit_source_raw()); - break; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateCICountEdgesChan(::grpc::ServerContext* context, const CreateCICountEdgesChanRequest* request, CreateCICountEdgesChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto counter_mbcs = convert_from_grpc(request->counter()); + auto counter = counter_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + int32 edge; + switch (request->edge_enum_case()) { + case nidaqmx_grpc::CreateCICountEdgesChanRequest::EdgeEnumCase::kEdge: { + edge = static_cast(request->edge()); + break; + } + case nidaqmx_grpc::CreateCICountEdgesChanRequest::EdgeEnumCase::kEdgeRaw: { + edge = static_cast(request->edge_raw()); + break; + } + case nidaqmx_grpc::CreateCICountEdgesChanRequest::EdgeEnumCase::EDGE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for edge was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIPressureBridgePolynomialChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); - break; + + uInt32 initial_count = request->initial_count(); + int32 count_direction; + switch (request->count_direction_enum_case()) { + case nidaqmx_grpc::CreateCICountEdgesChanRequest::CountDirectionEnumCase::kCountDirection: { + count_direction = static_cast(request->count_direction()); + break; + } + case nidaqmx_grpc::CreateCICountEdgesChanRequest::CountDirectionEnumCase::kCountDirectionRaw: { + count_direction = static_cast(request->count_direction_raw()); + break; + } + case nidaqmx_grpc::CreateCICountEdgesChanRequest::CountDirectionEnumCase::COUNT_DIRECTION_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for count_direction was not specified or out of range"); + break; + } } - } - float64 voltage_excit_val = request->voltage_excit_val(); - float64 nominal_bridge_resistance = request->nominal_bridge_resistance(); - auto forward_coeffs = const_cast(request->forward_coeffs().data()); - uInt32 num_forward_coeffs = static_cast(request->forward_coeffs().size()); - auto reverse_coeffs = const_cast(request->reverse_coeffs().data()); - uInt32 num_reverse_coeffs = static_cast(request->reverse_coeffs().size()); - int32 electrical_units; - switch (request->electrical_units_enum_case()) { - case nidaqmx_grpc::CreateAIPressureBridgePolynomialChanRequest::ElectricalUnitsEnumCase::kElectricalUnits: { - electrical_units = static_cast(request->electrical_units()); - break; + auto status = library_->CreateCICountEdgesChan(task, counter, name_to_assign_to_channel, edge, initial_count, count_direction); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - case nidaqmx_grpc::CreateAIPressureBridgePolynomialChanRequest::ElectricalUnitsEnumCase::kElectricalUnitsRaw: { - electrical_units = static_cast(request->electrical_units_raw()); - break; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateCIDutyCycleChan(::grpc::ServerContext* context, const CreateCIDutyCycleChanRequest* request, CreateCIDutyCycleChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto counter_mbcs = convert_from_grpc(request->counter()); + auto counter = counter_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_freq = request->min_freq(); + float64 max_freq = request->max_freq(); + int32 edge; + switch (request->edge_enum_case()) { + case nidaqmx_grpc::CreateCIDutyCycleChanRequest::EdgeEnumCase::kEdge: { + edge = static_cast(request->edge()); + break; + } + case nidaqmx_grpc::CreateCIDutyCycleChanRequest::EdgeEnumCase::kEdgeRaw: { + edge = static_cast(request->edge_raw()); + break; + } + case nidaqmx_grpc::CreateCIDutyCycleChanRequest::EdgeEnumCase::EDGE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for edge was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIPressureBridgePolynomialChanRequest::ElectricalUnitsEnumCase::ELECTRICAL_UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for electrical_units was not specified or out of range"); - break; + + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateCIDutyCycleChan(task, counter, name_to_assign_to_channel, min_freq, max_freq, edge, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - int32 physical_units; - switch (request->physical_units_enum_case()) { - case nidaqmx_grpc::CreateAIPressureBridgePolynomialChanRequest::PhysicalUnitsEnumCase::kPhysicalUnits: { - physical_units = static_cast(request->physical_units()); - break; + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateCIFreqChan(::grpc::ServerContext* context, const CreateCIFreqChanRequest* request, CreateCIFreqChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto counter_mbcs = convert_from_grpc(request->counter()); + auto counter = counter_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateCIFreqChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateCIFreqChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateCIFreqChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIPressureBridgePolynomialChanRequest::PhysicalUnitsEnumCase::kPhysicalUnitsRaw: { - physical_units = static_cast(request->physical_units_raw()); - break; + + int32 edge; + switch (request->edge_enum_case()) { + case nidaqmx_grpc::CreateCIFreqChanRequest::EdgeEnumCase::kEdge: { + edge = static_cast(request->edge()); + break; + } + case nidaqmx_grpc::CreateCIFreqChanRequest::EdgeEnumCase::kEdgeRaw: { + edge = static_cast(request->edge_raw()); + break; + } + case nidaqmx_grpc::CreateCIFreqChanRequest::EdgeEnumCase::EDGE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for edge was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIPressureBridgePolynomialChanRequest::PhysicalUnitsEnumCase::PHYSICAL_UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for physical_units was not specified or out of range"); - break; + + int32 meas_method; + switch (request->meas_method_enum_case()) { + case nidaqmx_grpc::CreateCIFreqChanRequest::MeasMethodEnumCase::kMeasMethod: { + meas_method = static_cast(request->meas_method()); + break; + } + case nidaqmx_grpc::CreateCIFreqChanRequest::MeasMethodEnumCase::kMeasMethodRaw: { + meas_method = static_cast(request->meas_method_raw()); + break; + } + case nidaqmx_grpc::CreateCIFreqChanRequest::MeasMethodEnumCase::MEAS_METHOD_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for meas_method was not specified or out of range"); + break; + } } - } - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateAIPressureBridgePolynomialChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, bridge_config, voltage_excit_source, voltage_excit_val, nominal_bridge_resistance, forward_coeffs, num_forward_coeffs, reverse_coeffs, num_reverse_coeffs, electrical_units, physical_units, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + float64 meas_time = request->meas_time(); + uInt32 divisor = request->divisor(); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateCIFreqChan(task, counter, name_to_assign_to_channel, min_val, max_val, units, edge, meas_method, meas_time, divisor, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAIPressureBridgeTableChan(::grpc::ServerContext* context, const CreateAIPressureBridgeTableChanRequest* request, CreateAIPressureBridgeTableChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAIPressureBridgeTableChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateCIGPSTimestampChan(::grpc::ServerContext* context, const CreateCIGPSTimestampChanRequest* request, CreateCIGPSTimestampChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto counter_mbcs = convert_from_grpc(request->counter()); + auto counter = counter_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateCIGPSTimestampChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateCIGPSTimestampChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateCIGPSTimestampChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIPressureBridgeTableChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; + + int32 sync_method; + switch (request->sync_method_enum_case()) { + case nidaqmx_grpc::CreateCIGPSTimestampChanRequest::SyncMethodEnumCase::kSyncMethod: { + sync_method = static_cast(request->sync_method()); + break; + } + case nidaqmx_grpc::CreateCIGPSTimestampChanRequest::SyncMethodEnumCase::kSyncMethodRaw: { + sync_method = static_cast(request->sync_method_raw()); + break; + } + case nidaqmx_grpc::CreateCIGPSTimestampChanRequest::SyncMethodEnumCase::SYNC_METHOD_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sync_method was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIPressureBridgeTableChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateCIGPSTimestampChan(task, counter, name_to_assign_to_channel, units, sync_method, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - int32 bridge_config; - switch (request->bridge_config_enum_case()) { - case nidaqmx_grpc::CreateAIPressureBridgeTableChanRequest::BridgeConfigEnumCase::kBridgeConfig: { - bridge_config = static_cast(request->bridge_config()); - break; + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateCILinEncoderChan(::grpc::ServerContext* context, const CreateCILinEncoderChanRequest* request, CreateCILinEncoderChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto counter_mbcs = convert_from_grpc(request->counter()); + auto counter = counter_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + int32 decoding_type; + switch (request->decoding_type_enum_case()) { + case nidaqmx_grpc::CreateCILinEncoderChanRequest::DecodingTypeEnumCase::kDecodingType: { + decoding_type = static_cast(request->decoding_type()); + break; + } + case nidaqmx_grpc::CreateCILinEncoderChanRequest::DecodingTypeEnumCase::kDecodingTypeRaw: { + decoding_type = static_cast(request->decoding_type_raw()); + break; + } + case nidaqmx_grpc::CreateCILinEncoderChanRequest::DecodingTypeEnumCase::DECODING_TYPE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for decoding_type was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIPressureBridgeTableChanRequest::BridgeConfigEnumCase::kBridgeConfigRaw: { - bridge_config = static_cast(request->bridge_config_raw()); - break; + + bool32 zidx_enable = request->zidx_enable(); + float64 zidx_val = request->zidx_val(); + int32 zidx_phase; + switch (request->zidx_phase_enum_case()) { + case nidaqmx_grpc::CreateCILinEncoderChanRequest::ZidxPhaseEnumCase::kZidxPhase: { + zidx_phase = static_cast(request->zidx_phase()); + break; + } + case nidaqmx_grpc::CreateCILinEncoderChanRequest::ZidxPhaseEnumCase::kZidxPhaseRaw: { + zidx_phase = static_cast(request->zidx_phase_raw()); + break; + } + case nidaqmx_grpc::CreateCILinEncoderChanRequest::ZidxPhaseEnumCase::ZIDX_PHASE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for zidx_phase was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIPressureBridgeTableChanRequest::BridgeConfigEnumCase::BRIDGE_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for bridge_config was not specified or out of range"); - break; + + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateCILinEncoderChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateCILinEncoderChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateCILinEncoderChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - } - int32 voltage_excit_source; - switch (request->voltage_excit_source_enum_case()) { - case nidaqmx_grpc::CreateAIPressureBridgeTableChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { - voltage_excit_source = static_cast(request->voltage_excit_source()); - break; + float64 dist_per_pulse = request->dist_per_pulse(); + float64 initial_pos = request->initial_pos(); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateCILinEncoderChan(task, counter, name_to_assign_to_channel, decoding_type, zidx_enable, zidx_val, zidx_phase, units, dist_per_pulse, initial_pos, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - case nidaqmx_grpc::CreateAIPressureBridgeTableChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { - voltage_excit_source = static_cast(request->voltage_excit_source_raw()); - break; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateCILinVelocityChan(::grpc::ServerContext* context, const CreateCILinVelocityChanRequest* request, CreateCILinVelocityChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto counter_mbcs = convert_from_grpc(request->counter()); + auto counter = counter_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 decoding_type; + switch (request->decoding_type_enum_case()) { + case nidaqmx_grpc::CreateCILinVelocityChanRequest::DecodingTypeEnumCase::kDecodingType: { + decoding_type = static_cast(request->decoding_type()); + break; + } + case nidaqmx_grpc::CreateCILinVelocityChanRequest::DecodingTypeEnumCase::kDecodingTypeRaw: { + decoding_type = static_cast(request->decoding_type_raw()); + break; + } + case nidaqmx_grpc::CreateCILinVelocityChanRequest::DecodingTypeEnumCase::DECODING_TYPE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for decoding_type was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIPressureBridgeTableChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); - break; + + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateCILinVelocityChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateCILinVelocityChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateCILinVelocityChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - } - float64 voltage_excit_val = request->voltage_excit_val(); - float64 nominal_bridge_resistance = request->nominal_bridge_resistance(); - auto electrical_vals = const_cast(request->electrical_vals().data()); - uInt32 num_electrical_vals = static_cast(request->electrical_vals().size()); - int32 electrical_units; - switch (request->electrical_units_enum_case()) { - case nidaqmx_grpc::CreateAIPressureBridgeTableChanRequest::ElectricalUnitsEnumCase::kElectricalUnits: { - electrical_units = static_cast(request->electrical_units()); - break; - } - case nidaqmx_grpc::CreateAIPressureBridgeTableChanRequest::ElectricalUnitsEnumCase::kElectricalUnitsRaw: { - electrical_units = static_cast(request->electrical_units_raw()); - break; - } - case nidaqmx_grpc::CreateAIPressureBridgeTableChanRequest::ElectricalUnitsEnumCase::ELECTRICAL_UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for electrical_units was not specified or out of range"); - break; + float64 dist_per_pulse = request->dist_per_pulse(); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateCILinVelocityChan(task, counter, name_to_assign_to_channel, min_val, max_val, decoding_type, units, dist_per_pulse, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - auto physical_vals = const_cast(request->physical_vals().data()); - uInt32 num_physical_vals = static_cast(request->physical_vals().size()); - int32 physical_units; - switch (request->physical_units_enum_case()) { - case nidaqmx_grpc::CreateAIPressureBridgeTableChanRequest::PhysicalUnitsEnumCase::kPhysicalUnits: { - physical_units = static_cast(request->physical_units()); - break; - } - case nidaqmx_grpc::CreateAIPressureBridgeTableChanRequest::PhysicalUnitsEnumCase::kPhysicalUnitsRaw: { - physical_units = static_cast(request->physical_units_raw()); - break; - } - case nidaqmx_grpc::CreateAIPressureBridgeTableChanRequest::PhysicalUnitsEnumCase::PHYSICAL_UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for physical_units was not specified or out of range"); - break; + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateCIPeriodChan(::grpc::ServerContext* context, const CreateCIPeriodChanRequest* request, CreateCIPeriodChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto counter_mbcs = convert_from_grpc(request->counter()); + auto counter = counter_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateCIPeriodChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateCIPeriodChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateCIPeriodChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - } - - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateAIPressureBridgeTableChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, bridge_config, voltage_excit_source, voltage_excit_val, nominal_bridge_resistance, electrical_vals, num_electrical_vals, electrical_units, physical_vals, num_physical_vals, physical_units, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAIPressureBridgeTwoPointLinChan(::grpc::ServerContext* context, const CreateAIPressureBridgeTwoPointLinChanRequest* request, CreateAIPressureBridgeTwoPointLinChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAIPressureBridgeTwoPointLinChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateAIPressureBridgeTwoPointLinChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; + int32 edge; + switch (request->edge_enum_case()) { + case nidaqmx_grpc::CreateCIPeriodChanRequest::EdgeEnumCase::kEdge: { + edge = static_cast(request->edge()); + break; + } + case nidaqmx_grpc::CreateCIPeriodChanRequest::EdgeEnumCase::kEdgeRaw: { + edge = static_cast(request->edge_raw()); + break; + } + case nidaqmx_grpc::CreateCIPeriodChanRequest::EdgeEnumCase::EDGE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for edge was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIPressureBridgeTwoPointLinChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + + int32 meas_method; + switch (request->meas_method_enum_case()) { + case nidaqmx_grpc::CreateCIPeriodChanRequest::MeasMethodEnumCase::kMeasMethod: { + meas_method = static_cast(request->meas_method()); + break; + } + case nidaqmx_grpc::CreateCIPeriodChanRequest::MeasMethodEnumCase::kMeasMethodRaw: { + meas_method = static_cast(request->meas_method_raw()); + break; + } + case nidaqmx_grpc::CreateCIPeriodChanRequest::MeasMethodEnumCase::MEAS_METHOD_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for meas_method was not specified or out of range"); + break; + } } - } - int32 bridge_config; - switch (request->bridge_config_enum_case()) { - case nidaqmx_grpc::CreateAIPressureBridgeTwoPointLinChanRequest::BridgeConfigEnumCase::kBridgeConfig: { - bridge_config = static_cast(request->bridge_config()); - break; + float64 meas_time = request->meas_time(); + uInt32 divisor = request->divisor(); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateCIPeriodChan(task, counter, name_to_assign_to_channel, min_val, max_val, units, edge, meas_method, meas_time, divisor, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - case nidaqmx_grpc::CreateAIPressureBridgeTwoPointLinChanRequest::BridgeConfigEnumCase::kBridgeConfigRaw: { - bridge_config = static_cast(request->bridge_config_raw()); - break; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateCIPulseChanFreq(::grpc::ServerContext* context, const CreateCIPulseChanFreqRequest* request, CreateCIPulseChanFreqResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto counter_mbcs = convert_from_grpc(request->counter()); + auto counter = counter_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateCIPulseChanFreqRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateCIPulseChanFreqRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateCIPulseChanFreqRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIPressureBridgeTwoPointLinChanRequest::BridgeConfigEnumCase::BRIDGE_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for bridge_config was not specified or out of range"); - break; + + auto status = library_->CreateCIPulseChanFreq(task, counter, name_to_assign_to_channel, min_val, max_val, units); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - int32 voltage_excit_source; - switch (request->voltage_excit_source_enum_case()) { - case nidaqmx_grpc::CreateAIPressureBridgeTwoPointLinChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { - voltage_excit_source = static_cast(request->voltage_excit_source()); - break; + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateCIPulseChanTicks(::grpc::ServerContext* context, const CreateCIPulseChanTicksRequest* request, CreateCIPulseChanTicksResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto counter_mbcs = convert_from_grpc(request->counter()); + auto counter = counter_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + auto source_terminal_mbcs = convert_from_grpc(request->source_terminal()); + auto source_terminal = source_terminal_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + auto status = library_->CreateCIPulseChanTicks(task, counter, name_to_assign_to_channel, source_terminal, min_val, max_val); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - case nidaqmx_grpc::CreateAIPressureBridgeTwoPointLinChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { - voltage_excit_source = static_cast(request->voltage_excit_source_raw()); - break; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateCIPulseChanTime(::grpc::ServerContext* context, const CreateCIPulseChanTimeRequest* request, CreateCIPulseChanTimeResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto counter_mbcs = convert_from_grpc(request->counter()); + auto counter = counter_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateCIPulseChanTimeRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateCIPulseChanTimeRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateCIPulseChanTimeRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIPressureBridgeTwoPointLinChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); - break; + + auto status = library_->CreateCIPulseChanTime(task, counter, name_to_assign_to_channel, min_val, max_val, units); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - float64 voltage_excit_val = request->voltage_excit_val(); - float64 nominal_bridge_resistance = request->nominal_bridge_resistance(); - float64 first_electrical_val = request->first_electrical_val(); - float64 second_electrical_val = request->second_electrical_val(); - int32 electrical_units; - switch (request->electrical_units_enum_case()) { - case nidaqmx_grpc::CreateAIPressureBridgeTwoPointLinChanRequest::ElectricalUnitsEnumCase::kElectricalUnits: { - electrical_units = static_cast(request->electrical_units()); - break; + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateCIPulseWidthChan(::grpc::ServerContext* context, const CreateCIPulseWidthChanRequest* request, CreateCIPulseWidthChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto counter_mbcs = convert_from_grpc(request->counter()); + auto counter = counter_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateCIPulseWidthChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateCIPulseWidthChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateCIPulseWidthChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIPressureBridgeTwoPointLinChanRequest::ElectricalUnitsEnumCase::kElectricalUnitsRaw: { - electrical_units = static_cast(request->electrical_units_raw()); - break; + + int32 starting_edge; + switch (request->starting_edge_enum_case()) { + case nidaqmx_grpc::CreateCIPulseWidthChanRequest::StartingEdgeEnumCase::kStartingEdge: { + starting_edge = static_cast(request->starting_edge()); + break; + } + case nidaqmx_grpc::CreateCIPulseWidthChanRequest::StartingEdgeEnumCase::kStartingEdgeRaw: { + starting_edge = static_cast(request->starting_edge_raw()); + break; + } + case nidaqmx_grpc::CreateCIPulseWidthChanRequest::StartingEdgeEnumCase::STARTING_EDGE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for starting_edge was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIPressureBridgeTwoPointLinChanRequest::ElectricalUnitsEnumCase::ELECTRICAL_UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for electrical_units was not specified or out of range"); - break; + + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateCIPulseWidthChan(task, counter, name_to_assign_to_channel, min_val, max_val, units, starting_edge, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateCISemiPeriodChan(::grpc::ServerContext* context, const CreateCISemiPeriodChanRequest* request, CreateCISemiPeriodChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto counter_mbcs = convert_from_grpc(request->counter()); + auto counter = counter_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateCISemiPeriodChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateCISemiPeriodChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateCISemiPeriodChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } + } - float64 first_physical_val = request->first_physical_val(); - float64 second_physical_val = request->second_physical_val(); - int32 physical_units; - switch (request->physical_units_enum_case()) { - case nidaqmx_grpc::CreateAIPressureBridgeTwoPointLinChanRequest::PhysicalUnitsEnumCase::kPhysicalUnits: { - physical_units = static_cast(request->physical_units()); - break; + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateCISemiPeriodChan(task, counter, name_to_assign_to_channel, min_val, max_val, units, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - case nidaqmx_grpc::CreateAIPressureBridgeTwoPointLinChanRequest::PhysicalUnitsEnumCase::kPhysicalUnitsRaw: { - physical_units = static_cast(request->physical_units_raw()); - break; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateCITwoEdgeSepChan(::grpc::ServerContext* context, const CreateCITwoEdgeSepChanRequest* request, CreateCITwoEdgeSepChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto counter_mbcs = convert_from_grpc(request->counter()); + auto counter = counter_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateCITwoEdgeSepChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateCITwoEdgeSepChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateCITwoEdgeSepChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIPressureBridgeTwoPointLinChanRequest::PhysicalUnitsEnumCase::PHYSICAL_UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for physical_units was not specified or out of range"); - break; + + int32 first_edge; + switch (request->first_edge_enum_case()) { + case nidaqmx_grpc::CreateCITwoEdgeSepChanRequest::FirstEdgeEnumCase::kFirstEdge: { + first_edge = static_cast(request->first_edge()); + break; + } + case nidaqmx_grpc::CreateCITwoEdgeSepChanRequest::FirstEdgeEnumCase::kFirstEdgeRaw: { + first_edge = static_cast(request->first_edge_raw()); + break; + } + case nidaqmx_grpc::CreateCITwoEdgeSepChanRequest::FirstEdgeEnumCase::FIRST_EDGE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for first_edge was not specified or out of range"); + break; + } } - } - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateAIPressureBridgeTwoPointLinChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, bridge_config, voltage_excit_source, voltage_excit_val, nominal_bridge_resistance, first_electrical_val, second_electrical_val, electrical_units, first_physical_val, second_physical_val, physical_units, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + int32 second_edge; + switch (request->second_edge_enum_case()) { + case nidaqmx_grpc::CreateCITwoEdgeSepChanRequest::SecondEdgeEnumCase::kSecondEdge: { + second_edge = static_cast(request->second_edge()); + break; + } + case nidaqmx_grpc::CreateCITwoEdgeSepChanRequest::SecondEdgeEnumCase::kSecondEdgeRaw: { + second_edge = static_cast(request->second_edge_raw()); + break; + } + case nidaqmx_grpc::CreateCITwoEdgeSepChanRequest::SecondEdgeEnumCase::SECOND_EDGE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for second_edge was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAIRTDChan(::grpc::ServerContext* context, const CreateAIRTDChanRequest* request, CreateAIRTDChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAIRTDChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateCITwoEdgeSepChan(task, counter, name_to_assign_to_channel, min_val, max_val, units, first_edge, second_edge, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - case nidaqmx_grpc::CreateAIRTDChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateCOPulseChanFreq(::grpc::ServerContext* context, const CreateCOPulseChanFreqRequest* request, CreateCOPulseChanFreqResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto counter_mbcs = convert_from_grpc(request->counter()); + auto counter = counter_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateCOPulseChanFreqRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateCOPulseChanFreqRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateCOPulseChanFreqRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIRTDChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + + int32 idle_state; + switch (request->idle_state_enum_case()) { + case nidaqmx_grpc::CreateCOPulseChanFreqRequest::IdleStateEnumCase::kIdleState: { + idle_state = static_cast(request->idle_state()); + break; + } + case nidaqmx_grpc::CreateCOPulseChanFreqRequest::IdleStateEnumCase::kIdleStateRaw: { + idle_state = static_cast(request->idle_state_raw()); + break; + } + case nidaqmx_grpc::CreateCOPulseChanFreqRequest::IdleStateEnumCase::IDLE_STATE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for idle_state was not specified or out of range"); + break; + } } - } - int32 rtd_type; - switch (request->rtd_type_enum_case()) { - case nidaqmx_grpc::CreateAIRTDChanRequest::RtdTypeEnumCase::kRtdType: { - rtd_type = static_cast(request->rtd_type()); - break; + float64 initial_delay = request->initial_delay(); + float64 freq = request->freq(); + float64 duty_cycle = request->duty_cycle(); + auto status = library_->CreateCOPulseChanFreq(task, counter, name_to_assign_to_channel, units, idle_state, initial_delay, freq, duty_cycle); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - case nidaqmx_grpc::CreateAIRTDChanRequest::RtdTypeEnumCase::kRtdTypeRaw: { - rtd_type = static_cast(request->rtd_type_raw()); - break; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateCOPulseChanTicks(::grpc::ServerContext* context, const CreateCOPulseChanTicksRequest* request, CreateCOPulseChanTicksResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto counter_mbcs = convert_from_grpc(request->counter()); + auto counter = counter_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + auto source_terminal_mbcs = convert_from_grpc(request->source_terminal()); + auto source_terminal = source_terminal_mbcs.c_str(); + int32 idle_state; + switch (request->idle_state_enum_case()) { + case nidaqmx_grpc::CreateCOPulseChanTicksRequest::IdleStateEnumCase::kIdleState: { + idle_state = static_cast(request->idle_state()); + break; + } + case nidaqmx_grpc::CreateCOPulseChanTicksRequest::IdleStateEnumCase::kIdleStateRaw: { + idle_state = static_cast(request->idle_state_raw()); + break; + } + case nidaqmx_grpc::CreateCOPulseChanTicksRequest::IdleStateEnumCase::IDLE_STATE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for idle_state was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIRTDChanRequest::RtdTypeEnumCase::RTD_TYPE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for rtd_type was not specified or out of range"); - break; + + int32 initial_delay = request->initial_delay(); + int32 low_ticks = request->low_ticks(); + int32 high_ticks = request->high_ticks(); + auto status = library_->CreateCOPulseChanTicks(task, counter, name_to_assign_to_channel, source_terminal, idle_state, initial_delay, low_ticks, high_ticks); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - int32 resistance_config; - switch (request->resistance_config_enum_case()) { - case nidaqmx_grpc::CreateAIRTDChanRequest::ResistanceConfigEnumCase::kResistanceConfig: { - resistance_config = static_cast(request->resistance_config()); - break; + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateCOPulseChanTime(::grpc::ServerContext* context, const CreateCOPulseChanTimeRequest* request, CreateCOPulseChanTimeResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto counter_mbcs = convert_from_grpc(request->counter()); + auto counter = counter_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateCOPulseChanTimeRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateCOPulseChanTimeRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateCOPulseChanTimeRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIRTDChanRequest::ResistanceConfigEnumCase::kResistanceConfigRaw: { - resistance_config = static_cast(request->resistance_config_raw()); - break; + + int32 idle_state; + switch (request->idle_state_enum_case()) { + case nidaqmx_grpc::CreateCOPulseChanTimeRequest::IdleStateEnumCase::kIdleState: { + idle_state = static_cast(request->idle_state()); + break; + } + case nidaqmx_grpc::CreateCOPulseChanTimeRequest::IdleStateEnumCase::kIdleStateRaw: { + idle_state = static_cast(request->idle_state_raw()); + break; + } + case nidaqmx_grpc::CreateCOPulseChanTimeRequest::IdleStateEnumCase::IDLE_STATE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for idle_state was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIRTDChanRequest::ResistanceConfigEnumCase::RESISTANCE_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for resistance_config was not specified or out of range"); - break; + + float64 initial_delay = request->initial_delay(); + float64 low_time = request->low_time(); + float64 high_time = request->high_time(); + auto status = library_->CreateCOPulseChanTime(task, counter, name_to_assign_to_channel, units, idle_state, initial_delay, low_time, high_time); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateDIChan(::grpc::ServerContext* context, const CreateDIChanRequest* request, CreateDIChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto lines_mbcs = convert_from_grpc(request->lines()); + auto lines = lines_mbcs.c_str(); + auto name_to_assign_to_lines_mbcs = convert_from_grpc(request->name_to_assign_to_lines()); + auto name_to_assign_to_lines = name_to_assign_to_lines_mbcs.c_str(); + int32 line_grouping; + switch (request->line_grouping_enum_case()) { + case nidaqmx_grpc::CreateDIChanRequest::LineGroupingEnumCase::kLineGrouping: { + line_grouping = static_cast(request->line_grouping()); + break; + } + case nidaqmx_grpc::CreateDIChanRequest::LineGroupingEnumCase::kLineGroupingRaw: { + line_grouping = static_cast(request->line_grouping_raw()); + break; + } + case nidaqmx_grpc::CreateDIChanRequest::LineGroupingEnumCase::LINE_GROUPING_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for line_grouping was not specified or out of range"); + break; + } + } - int32 current_excit_source; - switch (request->current_excit_source_enum_case()) { - case nidaqmx_grpc::CreateAIRTDChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSource: { - current_excit_source = static_cast(request->current_excit_source()); - break; + auto status = library_->CreateDIChan(task, lines, name_to_assign_to_lines, line_grouping); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - case nidaqmx_grpc::CreateAIRTDChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSourceRaw: { - current_excit_source = static_cast(request->current_excit_source_raw()); - break; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateDOChan(::grpc::ServerContext* context, const CreateDOChanRequest* request, CreateDOChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto lines_mbcs = convert_from_grpc(request->lines()); + auto lines = lines_mbcs.c_str(); + auto name_to_assign_to_lines_mbcs = convert_from_grpc(request->name_to_assign_to_lines()); + auto name_to_assign_to_lines = name_to_assign_to_lines_mbcs.c_str(); + int32 line_grouping; + switch (request->line_grouping_enum_case()) { + case nidaqmx_grpc::CreateDOChanRequest::LineGroupingEnumCase::kLineGrouping: { + line_grouping = static_cast(request->line_grouping()); + break; + } + case nidaqmx_grpc::CreateDOChanRequest::LineGroupingEnumCase::kLineGroupingRaw: { + line_grouping = static_cast(request->line_grouping_raw()); + break; + } + case nidaqmx_grpc::CreateDOChanRequest::LineGroupingEnumCase::LINE_GROUPING_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for line_grouping was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIRTDChanRequest::CurrentExcitSourceEnumCase::CURRENT_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for current_excit_source was not specified or out of range"); - break; + + auto status = library_->CreateDOChan(task, lines, name_to_assign_to_lines, line_grouping); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - float64 current_excit_val = request->current_excit_val(); - float64 r0 = request->r0(); - auto status = library_->CreateAIRTDChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, rtd_type, resistance_config, current_excit_source, current_excit_val, r0); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAIResistanceChan(::grpc::ServerContext* context, const CreateAIResistanceChanRequest* request, CreateAIResistanceChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAIResistanceChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateAIResistanceChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateLinScale(::grpc::ServerContext* context, const CreateLinScaleRequest* request, CreateLinScaleResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto name_mbcs = convert_from_grpc(request->name()); + auto name = name_mbcs.c_str(); + float64 slope = request->slope(); + float64 y_intercept = request->y_intercept(); + int32 pre_scaled_units; + switch (request->pre_scaled_units_enum_case()) { + case nidaqmx_grpc::CreateLinScaleRequest::PreScaledUnitsEnumCase::kPreScaledUnits: { + pre_scaled_units = static_cast(request->pre_scaled_units()); + break; + } + case nidaqmx_grpc::CreateLinScaleRequest::PreScaledUnitsEnumCase::kPreScaledUnitsRaw: { + pre_scaled_units = static_cast(request->pre_scaled_units_raw()); + break; + } + case nidaqmx_grpc::CreateLinScaleRequest::PreScaledUnitsEnumCase::PRE_SCALED_UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for pre_scaled_units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIResistanceChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + + auto scaled_units_mbcs = convert_from_grpc(request->scaled_units()); + auto scaled_units = scaled_units_mbcs.c_str(); + auto status = library_->CreateLinScale(name, slope, y_intercept, pre_scaled_units, scaled_units); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateMapScale(::grpc::ServerContext* context, const CreateMapScaleRequest* request, CreateMapScaleResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto name_mbcs = convert_from_grpc(request->name()); + auto name = name_mbcs.c_str(); + float64 prescaled_min = request->prescaled_min(); + float64 prescaled_max = request->prescaled_max(); + float64 scaled_min = request->scaled_min(); + float64 scaled_max = request->scaled_max(); + int32 pre_scaled_units; + switch (request->pre_scaled_units_enum_case()) { + case nidaqmx_grpc::CreateMapScaleRequest::PreScaledUnitsEnumCase::kPreScaledUnits: { + pre_scaled_units = static_cast(request->pre_scaled_units()); + break; + } + case nidaqmx_grpc::CreateMapScaleRequest::PreScaledUnitsEnumCase::kPreScaledUnitsRaw: { + pre_scaled_units = static_cast(request->pre_scaled_units_raw()); + break; + } + case nidaqmx_grpc::CreateMapScaleRequest::PreScaledUnitsEnumCase::PRE_SCALED_UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for pre_scaled_units was not specified or out of range"); + break; + } + } - int32 resistance_config; - switch (request->resistance_config_enum_case()) { - case nidaqmx_grpc::CreateAIResistanceChanRequest::ResistanceConfigEnumCase::kResistanceConfig: { - resistance_config = static_cast(request->resistance_config()); - break; + auto scaled_units_mbcs = convert_from_grpc(request->scaled_units()); + auto scaled_units = scaled_units_mbcs.c_str(); + auto status = library_->CreateMapScale(name, prescaled_min, prescaled_max, scaled_min, scaled_max, pre_scaled_units, scaled_units); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } - case nidaqmx_grpc::CreateAIResistanceChanRequest::ResistanceConfigEnumCase::kResistanceConfigRaw: { - resistance_config = static_cast(request->resistance_config_raw()); - break; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreatePolynomialScale(::grpc::ServerContext* context, const CreatePolynomialScaleRequest* request, CreatePolynomialScaleResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto name_mbcs = convert_from_grpc(request->name()); + auto name = name_mbcs.c_str(); + auto forward_coeffs = const_cast(request->forward_coeffs().data()); + uInt32 num_forward_coeffs_in = static_cast(request->forward_coeffs().size()); + auto reverse_coeffs = const_cast(request->reverse_coeffs().data()); + uInt32 num_reverse_coeffs_in = static_cast(request->reverse_coeffs().size()); + int32 pre_scaled_units; + switch (request->pre_scaled_units_enum_case()) { + case nidaqmx_grpc::CreatePolynomialScaleRequest::PreScaledUnitsEnumCase::kPreScaledUnits: { + pre_scaled_units = static_cast(request->pre_scaled_units()); + break; + } + case nidaqmx_grpc::CreatePolynomialScaleRequest::PreScaledUnitsEnumCase::kPreScaledUnitsRaw: { + pre_scaled_units = static_cast(request->pre_scaled_units_raw()); + break; + } + case nidaqmx_grpc::CreatePolynomialScaleRequest::PreScaledUnitsEnumCase::PRE_SCALED_UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for pre_scaled_units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIResistanceChanRequest::ResistanceConfigEnumCase::RESISTANCE_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for resistance_config was not specified or out of range"); - break; + + auto scaled_units_mbcs = convert_from_grpc(request->scaled_units()); + auto scaled_units = scaled_units_mbcs.c_str(); + auto status = library_->CreatePolynomialScale(name, forward_coeffs, num_forward_coeffs_in, reverse_coeffs, num_reverse_coeffs_in, pre_scaled_units, scaled_units); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } + response->set_status(status); + return ::grpc::Status::OK; } - - int32 current_excit_source; - switch (request->current_excit_source_enum_case()) { - case nidaqmx_grpc::CreateAIResistanceChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSource: { - current_excit_source = static_cast(request->current_excit_source()); - break; + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateTEDSAIAccelChan(::grpc::ServerContext* context, const CreateTEDSAIAccelChanRequest* request, CreateTEDSAIAccelChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + int32 terminal_config; + switch (request->terminal_config_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIAccelChanRequest::TerminalConfigEnumCase::kTerminalConfig: { + terminal_config = static_cast(request->terminal_config()); + break; + } + case nidaqmx_grpc::CreateTEDSAIAccelChanRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { + terminal_config = static_cast(request->terminal_config_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIAccelChanRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIResistanceChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSourceRaw: { - current_excit_source = static_cast(request->current_excit_source_raw()); - break; + + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIAccelChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateTEDSAIAccelChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIAccelChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIResistanceChanRequest::CurrentExcitSourceEnumCase::CURRENT_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for current_excit_source was not specified or out of range"); - break; + + int32 current_excit_source; + switch (request->current_excit_source_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIAccelChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSource: { + current_excit_source = static_cast(request->current_excit_source()); + break; + } + case nidaqmx_grpc::CreateTEDSAIAccelChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSourceRaw: { + current_excit_source = static_cast(request->current_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIAccelChanRequest::CurrentExcitSourceEnumCase::CURRENT_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for current_excit_source was not specified or out of range"); + break; + } } - } - float64 current_excit_val = request->current_excit_val(); - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateAIResistanceChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, resistance_config, current_excit_source, current_excit_val, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + float64 current_excit_val = request->current_excit_val(); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateTEDSAIAccelChan(task, physical_channel, name_to_assign_to_channel, terminal_config, min_val, max_val, units, current_excit_source, current_excit_val, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAIRosetteStrainGageChan(::grpc::ServerContext* context, const CreateAIRosetteStrainGageChanRequest* request, CreateAIRosetteStrainGageChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 rosette_type; - switch (request->rosette_type_enum_case()) { - case nidaqmx_grpc::CreateAIRosetteStrainGageChanRequest::RosetteTypeEnumCase::kRosetteType: { - rosette_type = static_cast(request->rosette_type()); - break; - } - case nidaqmx_grpc::CreateAIRosetteStrainGageChanRequest::RosetteTypeEnumCase::kRosetteTypeRaw: { - rosette_type = static_cast(request->rosette_type_raw()); - break; - } - case nidaqmx_grpc::CreateAIRosetteStrainGageChanRequest::RosetteTypeEnumCase::ROSETTE_TYPE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for rosette_type was not specified or out of range"); - break; - } - } - - float64 gage_orientation = request->gage_orientation(); - auto rosette_meas_types_vector = std::vector(); - rosette_meas_types_vector.reserve(request->rosette_meas_types().size()); - std::transform( - request->rosette_meas_types().begin(), - request->rosette_meas_types().end(), - std::back_inserter(rosette_meas_types_vector), - [](auto x) { return x; }); - auto rosette_meas_types = rosette_meas_types_vector.data(); - - uInt32 num_rosette_meas_types = static_cast(request->rosette_meas_types().size()); - int32 strain_config; - switch (request->strain_config_enum_case()) { - case nidaqmx_grpc::CreateAIRosetteStrainGageChanRequest::StrainConfigEnumCase::kStrainConfig: { - strain_config = static_cast(request->strain_config()); - break; + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateTEDSAIBridgeChan(::grpc::ServerContext* context, const CreateTEDSAIBridgeChanRequest* request, CreateTEDSAIBridgeChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIBridgeChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateTEDSAIBridgeChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIBridgeChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIRosetteStrainGageChanRequest::StrainConfigEnumCase::kStrainConfigRaw: { - strain_config = static_cast(request->strain_config_raw()); - break; + + int32 voltage_excit_source; + switch (request->voltage_excit_source_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIBridgeChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { + voltage_excit_source = static_cast(request->voltage_excit_source()); + break; + } + case nidaqmx_grpc::CreateTEDSAIBridgeChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { + voltage_excit_source = static_cast(request->voltage_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIBridgeChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIRosetteStrainGageChanRequest::StrainConfigEnumCase::STRAIN_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for strain_config was not specified or out of range"); - break; + + float64 voltage_excit_val = request->voltage_excit_val(); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateTEDSAIBridgeChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, voltage_excit_source, voltage_excit_val, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateTEDSAICurrentChan(::grpc::ServerContext* context, const CreateTEDSAICurrentChanRequest* request, CreateTEDSAICurrentChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + int32 terminal_config; + switch (request->terminal_config_enum_case()) { + case nidaqmx_grpc::CreateTEDSAICurrentChanRequest::TerminalConfigEnumCase::kTerminalConfig: { + terminal_config = static_cast(request->terminal_config()); + break; + } + case nidaqmx_grpc::CreateTEDSAICurrentChanRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { + terminal_config = static_cast(request->terminal_config_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAICurrentChanRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); + break; + } + } - int32 voltage_excit_source; - switch (request->voltage_excit_source_enum_case()) { - case nidaqmx_grpc::CreateAIRosetteStrainGageChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { - voltage_excit_source = static_cast(request->voltage_excit_source()); - break; + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateTEDSAICurrentChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateTEDSAICurrentChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAICurrentChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIRosetteStrainGageChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { - voltage_excit_source = static_cast(request->voltage_excit_source_raw()); - break; + + int32 shunt_resistor_loc; + switch (request->shunt_resistor_loc_enum_case()) { + case nidaqmx_grpc::CreateTEDSAICurrentChanRequest::ShuntResistorLocEnumCase::kShuntResistorLoc: { + shunt_resistor_loc = static_cast(request->shunt_resistor_loc()); + break; + } + case nidaqmx_grpc::CreateTEDSAICurrentChanRequest::ShuntResistorLocEnumCase::kShuntResistorLocRaw: { + shunt_resistor_loc = static_cast(request->shunt_resistor_loc_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAICurrentChanRequest::ShuntResistorLocEnumCase::SHUNT_RESISTOR_LOC_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for shunt_resistor_loc was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIRosetteStrainGageChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); - break; + + float64 ext_shunt_resistor_val = request->ext_shunt_resistor_val(); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateTEDSAICurrentChan(task, physical_channel, name_to_assign_to_channel, terminal_config, min_val, max_val, units, shunt_resistor_loc, ext_shunt_resistor_val, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateTEDSAIForceBridgeChan(::grpc::ServerContext* context, const CreateTEDSAIForceBridgeChanRequest* request, CreateTEDSAIForceBridgeChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIForceBridgeChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateTEDSAIForceBridgeChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIForceBridgeChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } + } - float64 voltage_excit_val = request->voltage_excit_val(); - float64 gage_factor = request->gage_factor(); - float64 nominal_gage_resistance = request->nominal_gage_resistance(); - float64 poisson_ratio = request->poisson_ratio(); - float64 lead_wire_resistance = request->lead_wire_resistance(); - auto status = library_->CreateAIRosetteStrainGageChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, rosette_type, gage_orientation, rosette_meas_types, num_rosette_meas_types, strain_config, voltage_excit_source, voltage_excit_val, gage_factor, nominal_gage_resistance, poisson_ratio, lead_wire_resistance); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAIStrainGageChan(::grpc::ServerContext* context, const CreateAIStrainGageChanRequest* request, CreateAIStrainGageChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAIStrainGageChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateAIStrainGageChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateAIStrainGageChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; - } - } - - int32 strain_config; - switch (request->strain_config_enum_case()) { - case nidaqmx_grpc::CreateAIStrainGageChanRequest::StrainConfigEnumCase::kStrainConfig: { - strain_config = static_cast(request->strain_config()); - break; - } - case nidaqmx_grpc::CreateAIStrainGageChanRequest::StrainConfigEnumCase::kStrainConfigRaw: { - strain_config = static_cast(request->strain_config_raw()); - break; - } - case nidaqmx_grpc::CreateAIStrainGageChanRequest::StrainConfigEnumCase::STRAIN_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for strain_config was not specified or out of range"); - break; - } - } - - int32 voltage_excit_source; - switch (request->voltage_excit_source_enum_case()) { - case nidaqmx_grpc::CreateAIStrainGageChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { - voltage_excit_source = static_cast(request->voltage_excit_source()); - break; - } - case nidaqmx_grpc::CreateAIStrainGageChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { - voltage_excit_source = static_cast(request->voltage_excit_source_raw()); - break; - } - case nidaqmx_grpc::CreateAIStrainGageChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); - break; - } - } - - float64 voltage_excit_val = request->voltage_excit_val(); - float64 gage_factor = request->gage_factor(); - float64 initial_bridge_voltage = request->initial_bridge_voltage(); - float64 nominal_gage_resistance = request->nominal_gage_resistance(); - float64 poisson_ratio = request->poisson_ratio(); - float64 lead_wire_resistance = request->lead_wire_resistance(); - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateAIStrainGageChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, strain_config, voltage_excit_source, voltage_excit_val, gage_factor, initial_bridge_voltage, nominal_gage_resistance, poisson_ratio, lead_wire_resistance, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAITempBuiltInSensorChan(::grpc::ServerContext* context, const CreateAITempBuiltInSensorChanRequest* request, CreateAITempBuiltInSensorChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAITempBuiltInSensorChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateAITempBuiltInSensorChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateAITempBuiltInSensorChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + int32 voltage_excit_source; + switch (request->voltage_excit_source_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIForceBridgeChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { + voltage_excit_source = static_cast(request->voltage_excit_source()); + break; + } + case nidaqmx_grpc::CreateTEDSAIForceBridgeChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { + voltage_excit_source = static_cast(request->voltage_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIForceBridgeChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); + break; + } } - } - - auto status = library_->CreateAITempBuiltInSensorChan(task, physical_channel, name_to_assign_to_channel, units); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAIThrmcplChan(::grpc::ServerContext* context, const CreateAIThrmcplChanRequest* request, CreateAIThrmcplChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAIThrmcplChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateAIThrmcplChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateAIThrmcplChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + float64 voltage_excit_val = request->voltage_excit_val(); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateTEDSAIForceBridgeChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, voltage_excit_source, voltage_excit_val, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - int32 thermocouple_type; - switch (request->thermocouple_type_enum_case()) { - case nidaqmx_grpc::CreateAIThrmcplChanRequest::ThermocoupleTypeEnumCase::kThermocoupleType: { - thermocouple_type = static_cast(request->thermocouple_type()); - break; - } - case nidaqmx_grpc::CreateAIThrmcplChanRequest::ThermocoupleTypeEnumCase::kThermocoupleTypeRaw: { - thermocouple_type = static_cast(request->thermocouple_type_raw()); - break; - } - case nidaqmx_grpc::CreateAIThrmcplChanRequest::ThermocoupleTypeEnumCase::THERMOCOUPLE_TYPE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for thermocouple_type was not specified or out of range"); - break; + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateTEDSAIForceIEPEChan(::grpc::ServerContext* context, const CreateTEDSAIForceIEPEChanRequest* request, CreateTEDSAIForceIEPEChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + int32 terminal_config; + switch (request->terminal_config_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIForceIEPEChanRequest::TerminalConfigEnumCase::kTerminalConfig: { + terminal_config = static_cast(request->terminal_config()); + break; + } + case nidaqmx_grpc::CreateTEDSAIForceIEPEChanRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { + terminal_config = static_cast(request->terminal_config_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIForceIEPEChanRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); + break; + } } - } - int32 cjc_source; - switch (request->cjc_source_enum_case()) { - case nidaqmx_grpc::CreateAIThrmcplChanRequest::CjcSourceEnumCase::kCjcSource: { - cjc_source = static_cast(request->cjc_source()); - break; - } - case nidaqmx_grpc::CreateAIThrmcplChanRequest::CjcSourceEnumCase::kCjcSourceRaw: { - cjc_source = static_cast(request->cjc_source_raw()); - break; + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIForceIEPEChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateTEDSAIForceIEPEChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIForceIEPEChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIThrmcplChanRequest::CjcSourceEnumCase::CJC_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for cjc_source was not specified or out of range"); - break; + + int32 current_excit_source; + switch (request->current_excit_source_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIForceIEPEChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSource: { + current_excit_source = static_cast(request->current_excit_source()); + break; + } + case nidaqmx_grpc::CreateTEDSAIForceIEPEChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSourceRaw: { + current_excit_source = static_cast(request->current_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIForceIEPEChanRequest::CurrentExcitSourceEnumCase::CURRENT_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for current_excit_source was not specified or out of range"); + break; + } } - } - float64 cjc_val = request->cjc_val(); - auto cjc_channel_mbcs = convert_from_grpc(request->cjc_channel()); - auto cjc_channel = cjc_channel_mbcs.c_str(); - auto status = library_->CreateAIThrmcplChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, thermocouple_type, cjc_source, cjc_val, cjc_channel); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + float64 current_excit_val = request->current_excit_val(); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateTEDSAIForceIEPEChan(task, physical_channel, name_to_assign_to_channel, terminal_config, min_val, max_val, units, current_excit_source, current_excit_val, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateTEDSAIMicrophoneChan(::grpc::ServerContext* context, const CreateTEDSAIMicrophoneChanRequest* request, CreateTEDSAIMicrophoneChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + int32 terminal_config; + switch (request->terminal_config_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIMicrophoneChanRequest::TerminalConfigEnumCase::kTerminalConfig: { + terminal_config = static_cast(request->terminal_config()); + break; + } + case nidaqmx_grpc::CreateTEDSAIMicrophoneChanRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { + terminal_config = static_cast(request->terminal_config_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIMicrophoneChanRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAIThrmstrChanIex(::grpc::ServerContext* context, const CreateAIThrmstrChanIexRequest* request, CreateAIThrmstrChanIexResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAIThrmstrChanIexRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIMicrophoneChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateTEDSAIMicrophoneChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIMicrophoneChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIThrmstrChanIexRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; + + float64 max_snd_press_level = request->max_snd_press_level(); + int32 current_excit_source; + switch (request->current_excit_source_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIMicrophoneChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSource: { + current_excit_source = static_cast(request->current_excit_source()); + break; + } + case nidaqmx_grpc::CreateTEDSAIMicrophoneChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSourceRaw: { + current_excit_source = static_cast(request->current_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIMicrophoneChanRequest::CurrentExcitSourceEnumCase::CURRENT_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for current_excit_source was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIThrmstrChanIexRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + + float64 current_excit_val = request->current_excit_val(); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateTEDSAIMicrophoneChan(task, physical_channel, name_to_assign_to_channel, terminal_config, units, max_snd_press_level, current_excit_source, current_excit_val, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateTEDSAIPosLVDTChan(::grpc::ServerContext* context, const CreateTEDSAIPosLVDTChanRequest* request, CreateTEDSAIPosLVDTChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIPosLVDTChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateTEDSAIPosLVDTChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIPosLVDTChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } + } - int32 resistance_config; - switch (request->resistance_config_enum_case()) { - case nidaqmx_grpc::CreateAIThrmstrChanIexRequest::ResistanceConfigEnumCase::kResistanceConfig: { - resistance_config = static_cast(request->resistance_config()); - break; + int32 voltage_excit_source; + switch (request->voltage_excit_source_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIPosLVDTChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { + voltage_excit_source = static_cast(request->voltage_excit_source()); + break; + } + case nidaqmx_grpc::CreateTEDSAIPosLVDTChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { + voltage_excit_source = static_cast(request->voltage_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIPosLVDTChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIThrmstrChanIexRequest::ResistanceConfigEnumCase::kResistanceConfigRaw: { - resistance_config = static_cast(request->resistance_config_raw()); - break; + + float64 voltage_excit_val = request->voltage_excit_val(); + float64 voltage_excit_freq = request->voltage_excit_freq(); + int32 ac_excit_wire_mode; + switch (request->ac_excit_wire_mode_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIPosLVDTChanRequest::AcExcitWireModeEnumCase::kAcExcitWireMode: { + ac_excit_wire_mode = static_cast(request->ac_excit_wire_mode()); + break; + } + case nidaqmx_grpc::CreateTEDSAIPosLVDTChanRequest::AcExcitWireModeEnumCase::kAcExcitWireModeRaw: { + ac_excit_wire_mode = static_cast(request->ac_excit_wire_mode_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIPosLVDTChanRequest::AcExcitWireModeEnumCase::AC_EXCIT_WIRE_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for ac_excit_wire_mode was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIThrmstrChanIexRequest::ResistanceConfigEnumCase::RESISTANCE_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for resistance_config was not specified or out of range"); - break; + + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateTEDSAIPosLVDTChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, voltage_excit_source, voltage_excit_val, voltage_excit_freq, ac_excit_wire_mode, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - int32 current_excit_source; - switch (request->current_excit_source_enum_case()) { - case nidaqmx_grpc::CreateAIThrmstrChanIexRequest::CurrentExcitSourceEnumCase::kCurrentExcitSource: { - current_excit_source = static_cast(request->current_excit_source()); - break; + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateTEDSAIPosRVDTChan(::grpc::ServerContext* context, const CreateTEDSAIPosRVDTChanRequest* request, CreateTEDSAIPosRVDTChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIPosRVDTChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateTEDSAIPosRVDTChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIPosRVDTChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIThrmstrChanIexRequest::CurrentExcitSourceEnumCase::kCurrentExcitSourceRaw: { - current_excit_source = static_cast(request->current_excit_source_raw()); - break; + + int32 voltage_excit_source; + switch (request->voltage_excit_source_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIPosRVDTChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { + voltage_excit_source = static_cast(request->voltage_excit_source()); + break; + } + case nidaqmx_grpc::CreateTEDSAIPosRVDTChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { + voltage_excit_source = static_cast(request->voltage_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIPosRVDTChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIThrmstrChanIexRequest::CurrentExcitSourceEnumCase::CURRENT_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for current_excit_source was not specified or out of range"); - break; + + float64 voltage_excit_val = request->voltage_excit_val(); + float64 voltage_excit_freq = request->voltage_excit_freq(); + int32 ac_excit_wire_mode; + switch (request->ac_excit_wire_mode_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIPosRVDTChanRequest::AcExcitWireModeEnumCase::kAcExcitWireMode: { + ac_excit_wire_mode = static_cast(request->ac_excit_wire_mode()); + break; + } + case nidaqmx_grpc::CreateTEDSAIPosRVDTChanRequest::AcExcitWireModeEnumCase::kAcExcitWireModeRaw: { + ac_excit_wire_mode = static_cast(request->ac_excit_wire_mode_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIPosRVDTChanRequest::AcExcitWireModeEnumCase::AC_EXCIT_WIRE_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for ac_excit_wire_mode was not specified or out of range"); + break; + } } - } - float64 current_excit_val = request->current_excit_val(); - float64 a = request->a(); - float64 b = request->b(); - float64 c = request->c(); - auto status = library_->CreateAIThrmstrChanIex(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, resistance_config, current_excit_source, current_excit_val, a, b, c); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateTEDSAIPosRVDTChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, voltage_excit_source, voltage_excit_val, voltage_excit_freq, ac_excit_wire_mode, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAIThrmstrChanVex(::grpc::ServerContext* context, const CreateAIThrmstrChanVexRequest* request, CreateAIThrmstrChanVexResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAIThrmstrChanVexRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateTEDSAIPressureBridgeChan(::grpc::ServerContext* context, const CreateTEDSAIPressureBridgeChanRequest* request, CreateTEDSAIPressureBridgeChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIPressureBridgeChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateTEDSAIPressureBridgeChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIPressureBridgeChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIThrmstrChanVexRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; + + int32 voltage_excit_source; + switch (request->voltage_excit_source_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIPressureBridgeChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { + voltage_excit_source = static_cast(request->voltage_excit_source()); + break; + } + case nidaqmx_grpc::CreateTEDSAIPressureBridgeChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { + voltage_excit_source = static_cast(request->voltage_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIPressureBridgeChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIThrmstrChanVexRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + + float64 voltage_excit_val = request->voltage_excit_val(); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateTEDSAIPressureBridgeChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, voltage_excit_source, voltage_excit_val, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateTEDSAIRTDChan(::grpc::ServerContext* context, const CreateTEDSAIRTDChanRequest* request, CreateTEDSAIRTDChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIRTDChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateTEDSAIRTDChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIRTDChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } + } - int32 resistance_config; - switch (request->resistance_config_enum_case()) { - case nidaqmx_grpc::CreateAIThrmstrChanVexRequest::ResistanceConfigEnumCase::kResistanceConfig: { - resistance_config = static_cast(request->resistance_config()); - break; + int32 resistance_config; + switch (request->resistance_config_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIRTDChanRequest::ResistanceConfigEnumCase::kResistanceConfig: { + resistance_config = static_cast(request->resistance_config()); + break; + } + case nidaqmx_grpc::CreateTEDSAIRTDChanRequest::ResistanceConfigEnumCase::kResistanceConfigRaw: { + resistance_config = static_cast(request->resistance_config_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIRTDChanRequest::ResistanceConfigEnumCase::RESISTANCE_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for resistance_config was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIThrmstrChanVexRequest::ResistanceConfigEnumCase::kResistanceConfigRaw: { - resistance_config = static_cast(request->resistance_config_raw()); - break; + + int32 current_excit_source; + switch (request->current_excit_source_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIRTDChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSource: { + current_excit_source = static_cast(request->current_excit_source()); + break; + } + case nidaqmx_grpc::CreateTEDSAIRTDChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSourceRaw: { + current_excit_source = static_cast(request->current_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIRTDChanRequest::CurrentExcitSourceEnumCase::CURRENT_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for current_excit_source was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIThrmstrChanVexRequest::ResistanceConfigEnumCase::RESISTANCE_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for resistance_config was not specified or out of range"); - break; + + float64 current_excit_val = request->current_excit_val(); + auto status = library_->CreateTEDSAIRTDChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, resistance_config, current_excit_source, current_excit_val); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - int32 voltage_excit_source; - switch (request->voltage_excit_source_enum_case()) { - case nidaqmx_grpc::CreateAIThrmstrChanVexRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { - voltage_excit_source = static_cast(request->voltage_excit_source()); - break; + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateTEDSAIResistanceChan(::grpc::ServerContext* context, const CreateTEDSAIResistanceChanRequest* request, CreateTEDSAIResistanceChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIResistanceChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateTEDSAIResistanceChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIResistanceChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIThrmstrChanVexRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { - voltage_excit_source = static_cast(request->voltage_excit_source_raw()); - break; + + int32 resistance_config; + switch (request->resistance_config_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIResistanceChanRequest::ResistanceConfigEnumCase::kResistanceConfig: { + resistance_config = static_cast(request->resistance_config()); + break; + } + case nidaqmx_grpc::CreateTEDSAIResistanceChanRequest::ResistanceConfigEnumCase::kResistanceConfigRaw: { + resistance_config = static_cast(request->resistance_config_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIResistanceChanRequest::ResistanceConfigEnumCase::RESISTANCE_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for resistance_config was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIThrmstrChanVexRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); - break; + + int32 current_excit_source; + switch (request->current_excit_source_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIResistanceChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSource: { + current_excit_source = static_cast(request->current_excit_source()); + break; + } + case nidaqmx_grpc::CreateTEDSAIResistanceChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSourceRaw: { + current_excit_source = static_cast(request->current_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIResistanceChanRequest::CurrentExcitSourceEnumCase::CURRENT_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for current_excit_source was not specified or out of range"); + break; + } } - } - float64 voltage_excit_val = request->voltage_excit_val(); - float64 a = request->a(); - float64 b = request->b(); - float64 c = request->c(); - float64 r1 = request->r1(); - auto status = library_->CreateAIThrmstrChanVex(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, resistance_config, voltage_excit_source, voltage_excit_val, a, b, c, r1); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + float64 current_excit_val = request->current_excit_val(); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateTEDSAIResistanceChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, resistance_config, current_excit_source, current_excit_val, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAITorqueBridgePolynomialChan(::grpc::ServerContext* context, const CreateAITorqueBridgePolynomialChanRequest* request, CreateAITorqueBridgePolynomialChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAITorqueBridgePolynomialChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateTEDSAIStrainGageChan(::grpc::ServerContext* context, const CreateTEDSAIStrainGageChanRequest* request, CreateTEDSAIStrainGageChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIStrainGageChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateTEDSAIStrainGageChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIStrainGageChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAITorqueBridgePolynomialChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; + + int32 voltage_excit_source; + switch (request->voltage_excit_source_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIStrainGageChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { + voltage_excit_source = static_cast(request->voltage_excit_source()); + break; + } + case nidaqmx_grpc::CreateTEDSAIStrainGageChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { + voltage_excit_source = static_cast(request->voltage_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIStrainGageChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAITorqueBridgePolynomialChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + + float64 voltage_excit_val = request->voltage_excit_val(); + float64 initial_bridge_voltage = request->initial_bridge_voltage(); + float64 lead_wire_resistance = request->lead_wire_resistance(); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateTEDSAIStrainGageChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, voltage_excit_source, voltage_excit_val, initial_bridge_voltage, lead_wire_resistance, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - int32 bridge_config; - switch (request->bridge_config_enum_case()) { - case nidaqmx_grpc::CreateAITorqueBridgePolynomialChanRequest::BridgeConfigEnumCase::kBridgeConfig: { - bridge_config = static_cast(request->bridge_config()); - break; + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateTEDSAIThrmcplChan(::grpc::ServerContext* context, const CreateTEDSAIThrmcplChanRequest* request, CreateTEDSAIThrmcplChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIThrmcplChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateTEDSAIThrmcplChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIThrmcplChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAITorqueBridgePolynomialChanRequest::BridgeConfigEnumCase::kBridgeConfigRaw: { - bridge_config = static_cast(request->bridge_config_raw()); - break; + + int32 cjc_source; + switch (request->cjc_source_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIThrmcplChanRequest::CjcSourceEnumCase::kCjcSource: { + cjc_source = static_cast(request->cjc_source()); + break; + } + case nidaqmx_grpc::CreateTEDSAIThrmcplChanRequest::CjcSourceEnumCase::kCjcSourceRaw: { + cjc_source = static_cast(request->cjc_source_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIThrmcplChanRequest::CjcSourceEnumCase::CJC_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for cjc_source was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAITorqueBridgePolynomialChanRequest::BridgeConfigEnumCase::BRIDGE_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for bridge_config was not specified or out of range"); - break; + + float64 cjc_val = request->cjc_val(); + auto cjc_channel_mbcs = convert_from_grpc(request->cjc_channel()); + auto cjc_channel = cjc_channel_mbcs.c_str(); + auto status = library_->CreateTEDSAIThrmcplChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, cjc_source, cjc_val, cjc_channel); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateTEDSAIThrmstrChanIex(::grpc::ServerContext* context, const CreateTEDSAIThrmstrChanIexRequest* request, CreateTEDSAIThrmstrChanIexResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIThrmstrChanIexRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateTEDSAIThrmstrChanIexRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIThrmstrChanIexRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } + } - int32 voltage_excit_source; - switch (request->voltage_excit_source_enum_case()) { - case nidaqmx_grpc::CreateAITorqueBridgePolynomialChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { - voltage_excit_source = static_cast(request->voltage_excit_source()); - break; + int32 resistance_config; + switch (request->resistance_config_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIThrmstrChanIexRequest::ResistanceConfigEnumCase::kResistanceConfig: { + resistance_config = static_cast(request->resistance_config()); + break; + } + case nidaqmx_grpc::CreateTEDSAIThrmstrChanIexRequest::ResistanceConfigEnumCase::kResistanceConfigRaw: { + resistance_config = static_cast(request->resistance_config_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIThrmstrChanIexRequest::ResistanceConfigEnumCase::RESISTANCE_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for resistance_config was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAITorqueBridgePolynomialChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { - voltage_excit_source = static_cast(request->voltage_excit_source_raw()); - break; + + int32 current_excit_source; + switch (request->current_excit_source_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIThrmstrChanIexRequest::CurrentExcitSourceEnumCase::kCurrentExcitSource: { + current_excit_source = static_cast(request->current_excit_source()); + break; + } + case nidaqmx_grpc::CreateTEDSAIThrmstrChanIexRequest::CurrentExcitSourceEnumCase::kCurrentExcitSourceRaw: { + current_excit_source = static_cast(request->current_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIThrmstrChanIexRequest::CurrentExcitSourceEnumCase::CURRENT_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for current_excit_source was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAITorqueBridgePolynomialChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); - break; + + float64 current_excit_val = request->current_excit_val(); + auto status = library_->CreateTEDSAIThrmstrChanIex(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, resistance_config, current_excit_source, current_excit_val); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateTEDSAIThrmstrChanVex(::grpc::ServerContext* context, const CreateTEDSAIThrmstrChanVexRequest* request, CreateTEDSAIThrmstrChanVexResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIThrmstrChanVexRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateTEDSAIThrmstrChanVexRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIThrmstrChanVexRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } + } - float64 voltage_excit_val = request->voltage_excit_val(); - float64 nominal_bridge_resistance = request->nominal_bridge_resistance(); - auto forward_coeffs = const_cast(request->forward_coeffs().data()); - uInt32 num_forward_coeffs = static_cast(request->forward_coeffs().size()); - auto reverse_coeffs = const_cast(request->reverse_coeffs().data()); - uInt32 num_reverse_coeffs = static_cast(request->reverse_coeffs().size()); - int32 electrical_units; - switch (request->electrical_units_enum_case()) { - case nidaqmx_grpc::CreateAITorqueBridgePolynomialChanRequest::ElectricalUnitsEnumCase::kElectricalUnits: { - electrical_units = static_cast(request->electrical_units()); - break; + int32 resistance_config; + switch (request->resistance_config_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIThrmstrChanVexRequest::ResistanceConfigEnumCase::kResistanceConfig: { + resistance_config = static_cast(request->resistance_config()); + break; + } + case nidaqmx_grpc::CreateTEDSAIThrmstrChanVexRequest::ResistanceConfigEnumCase::kResistanceConfigRaw: { + resistance_config = static_cast(request->resistance_config_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIThrmstrChanVexRequest::ResistanceConfigEnumCase::RESISTANCE_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for resistance_config was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAITorqueBridgePolynomialChanRequest::ElectricalUnitsEnumCase::kElectricalUnitsRaw: { - electrical_units = static_cast(request->electrical_units_raw()); - break; + + int32 voltage_excit_source; + switch (request->voltage_excit_source_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIThrmstrChanVexRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { + voltage_excit_source = static_cast(request->voltage_excit_source()); + break; + } + case nidaqmx_grpc::CreateTEDSAIThrmstrChanVexRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { + voltage_excit_source = static_cast(request->voltage_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIThrmstrChanVexRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAITorqueBridgePolynomialChanRequest::ElectricalUnitsEnumCase::ELECTRICAL_UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for electrical_units was not specified or out of range"); - break; + + float64 voltage_excit_val = request->voltage_excit_val(); + float64 r1 = request->r1(); + auto status = library_->CreateTEDSAIThrmstrChanVex(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, resistance_config, voltage_excit_source, voltage_excit_val, r1); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - int32 physical_units; - switch (request->physical_units_enum_case()) { - case nidaqmx_grpc::CreateAITorqueBridgePolynomialChanRequest::PhysicalUnitsEnumCase::kPhysicalUnits: { - physical_units = static_cast(request->physical_units()); - break; + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateTEDSAITorqueBridgeChan(::grpc::ServerContext* context, const CreateTEDSAITorqueBridgeChanRequest* request, CreateTEDSAITorqueBridgeChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateTEDSAITorqueBridgeChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateTEDSAITorqueBridgeChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAITorqueBridgeChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAITorqueBridgePolynomialChanRequest::PhysicalUnitsEnumCase::kPhysicalUnitsRaw: { - physical_units = static_cast(request->physical_units_raw()); - break; + + int32 voltage_excit_source; + switch (request->voltage_excit_source_enum_case()) { + case nidaqmx_grpc::CreateTEDSAITorqueBridgeChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { + voltage_excit_source = static_cast(request->voltage_excit_source()); + break; + } + case nidaqmx_grpc::CreateTEDSAITorqueBridgeChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { + voltage_excit_source = static_cast(request->voltage_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAITorqueBridgeChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAITorqueBridgePolynomialChanRequest::PhysicalUnitsEnumCase::PHYSICAL_UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for physical_units was not specified or out of range"); - break; + + float64 voltage_excit_val = request->voltage_excit_val(); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateTEDSAITorqueBridgeChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, voltage_excit_source, voltage_excit_val, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateTEDSAIVoltageChan(::grpc::ServerContext* context, const CreateTEDSAIVoltageChanRequest* request, CreateTEDSAIVoltageChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + int32 terminal_config; + switch (request->terminal_config_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIVoltageChanRequest::TerminalConfigEnumCase::kTerminalConfig: { + terminal_config = static_cast(request->terminal_config()); + break; + } + case nidaqmx_grpc::CreateTEDSAIVoltageChanRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { + terminal_config = static_cast(request->terminal_config_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIVoltageChanRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); + break; + } + } - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateAITorqueBridgePolynomialChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, bridge_config, voltage_excit_source, voltage_excit_val, nominal_bridge_resistance, forward_coeffs, num_forward_coeffs, reverse_coeffs, num_reverse_coeffs, electrical_units, physical_units, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAITorqueBridgeTableChan(::grpc::ServerContext* context, const CreateAITorqueBridgeTableChanRequest* request, CreateAITorqueBridgeTableChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAITorqueBridgeTableChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateAITorqueBridgeTableChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIVoltageChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateTEDSAIVoltageChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIVoltageChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAITorqueBridgeTableChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateTEDSAIVoltageChan(task, physical_channel, name_to_assign_to_channel, terminal_config, min_val, max_val, units, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - int32 bridge_config; - switch (request->bridge_config_enum_case()) { - case nidaqmx_grpc::CreateAITorqueBridgeTableChanRequest::BridgeConfigEnumCase::kBridgeConfig: { - bridge_config = static_cast(request->bridge_config()); - break; + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateTEDSAIVoltageChanWithExcit(::grpc::ServerContext* context, const CreateTEDSAIVoltageChanWithExcitRequest* request, CreateTEDSAIVoltageChanWithExcitResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + int32 terminal_config; + switch (request->terminal_config_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIVoltageChanWithExcitRequest::TerminalConfigEnumCase::kTerminalConfig: { + terminal_config = static_cast(request->terminal_config()); + break; + } + case nidaqmx_grpc::CreateTEDSAIVoltageChanWithExcitRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { + terminal_config = static_cast(request->terminal_config_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIVoltageChanWithExcitRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAITorqueBridgeTableChanRequest::BridgeConfigEnumCase::kBridgeConfigRaw: { - bridge_config = static_cast(request->bridge_config_raw()); - break; + + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIVoltageChanWithExcitRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateTEDSAIVoltageChanWithExcitRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIVoltageChanWithExcitRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAITorqueBridgeTableChanRequest::BridgeConfigEnumCase::BRIDGE_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for bridge_config was not specified or out of range"); - break; + + int32 voltage_excit_source; + switch (request->voltage_excit_source_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIVoltageChanWithExcitRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { + voltage_excit_source = static_cast(request->voltage_excit_source()); + break; + } + case nidaqmx_grpc::CreateTEDSAIVoltageChanWithExcitRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { + voltage_excit_source = static_cast(request->voltage_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIVoltageChanWithExcitRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); + break; + } } - } - int32 voltage_excit_source; - switch (request->voltage_excit_source_enum_case()) { - case nidaqmx_grpc::CreateAITorqueBridgeTableChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { - voltage_excit_source = static_cast(request->voltage_excit_source()); - break; + float64 voltage_excit_val = request->voltage_excit_val(); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateTEDSAIVoltageChanWithExcit(task, physical_channel, name_to_assign_to_channel, terminal_config, min_val, max_val, units, voltage_excit_source, voltage_excit_val, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - case nidaqmx_grpc::CreateAITorqueBridgeTableChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { - voltage_excit_source = static_cast(request->voltage_excit_source_raw()); - break; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateTableScale(::grpc::ServerContext* context, const CreateTableScaleRequest* request, CreateTableScaleResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto name_mbcs = convert_from_grpc(request->name()); + auto name = name_mbcs.c_str(); + auto prescaled_vals = const_cast(request->prescaled_vals().data()); + uInt32 num_prescaled_vals_in = static_cast(request->prescaled_vals().size()); + auto scaled_vals = const_cast(request->scaled_vals().data()); + uInt32 num_scaled_vals_in = static_cast(request->scaled_vals().size()); + int32 pre_scaled_units; + switch (request->pre_scaled_units_enum_case()) { + case nidaqmx_grpc::CreateTableScaleRequest::PreScaledUnitsEnumCase::kPreScaledUnits: { + pre_scaled_units = static_cast(request->pre_scaled_units()); + break; + } + case nidaqmx_grpc::CreateTableScaleRequest::PreScaledUnitsEnumCase::kPreScaledUnitsRaw: { + pre_scaled_units = static_cast(request->pre_scaled_units_raw()); + break; + } + case nidaqmx_grpc::CreateTableScaleRequest::PreScaledUnitsEnumCase::PRE_SCALED_UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for pre_scaled_units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAITorqueBridgeTableChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); - break; + + auto scaled_units_mbcs = convert_from_grpc(request->scaled_units()); + auto scaled_units = scaled_units_mbcs.c_str(); + auto status = library_->CreateTableScale(name, prescaled_vals, num_prescaled_vals_in, scaled_vals, num_scaled_vals_in, pre_scaled_units, scaled_units); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } + } - float64 voltage_excit_val = request->voltage_excit_val(); - float64 nominal_bridge_resistance = request->nominal_bridge_resistance(); - auto electrical_vals = const_cast(request->electrical_vals().data()); - uInt32 num_electrical_vals = static_cast(request->electrical_vals().size()); - int32 electrical_units; - switch (request->electrical_units_enum_case()) { - case nidaqmx_grpc::CreateAITorqueBridgeTableChanRequest::ElectricalUnitsEnumCase::kElectricalUnits: { - electrical_units = static_cast(request->electrical_units()); - break; - } - case nidaqmx_grpc::CreateAITorqueBridgeTableChanRequest::ElectricalUnitsEnumCase::kElectricalUnitsRaw: { - electrical_units = static_cast(request->electrical_units_raw()); - break; - } - case nidaqmx_grpc::CreateAITorqueBridgeTableChanRequest::ElectricalUnitsEnumCase::ELECTRICAL_UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for electrical_units was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateTask(::grpc::ServerContext* context, const CreateTaskRequest* request, CreateTaskResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } + try { + auto session_name_mbcs = convert_from_grpc(request->session_name()); + auto session_name = session_name_mbcs.c_str(); + auto initialization_behavior = request->initialization_behavior(); - auto physical_vals = const_cast(request->physical_vals().data()); - uInt32 num_physical_vals = static_cast(request->physical_vals().size()); - int32 physical_units; - switch (request->physical_units_enum_case()) { - case nidaqmx_grpc::CreateAITorqueBridgeTableChanRequest::PhysicalUnitsEnumCase::kPhysicalUnits: { - physical_units = static_cast(request->physical_units()); - break; + bool new_session_initialized {}; + auto init_lambda = [&] () { + TaskHandle task; + auto status = library_->CreateTask(session_name, &task); + return std::make_tuple(status, task); + }; + std::string grpc_device_session_name = request->session_name(); + // Capture the library shared_ptr by value. Do not capture `this` or any references. + LibrarySharedPtr library = library_; + auto cleanup_lambda = [library] (TaskHandle id) { library->ClearTask(id); }; + int status = session_repository_->add_session(grpc_device_session_name, init_lambda, cleanup_lambda, initialization_behavior, &new_session_initialized); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } - case nidaqmx_grpc::CreateAITorqueBridgeTableChanRequest::PhysicalUnitsEnumCase::kPhysicalUnitsRaw: { - physical_units = static_cast(request->physical_units_raw()); - break; + response->set_status(status); + response->mutable_task()->set_name(grpc_device_session_name); + response->set_new_session_initialized(new_session_initialized); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateWatchdogTimerTask(::grpc::ServerContext* context, const CreateWatchdogTimerTaskRequest* request, CreateWatchdogTimerTaskResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + auto session_name_mbcs = convert_from_grpc(request->session_name()); + auto session_name = session_name_mbcs.c_str(); + float64 timeout = request->timeout(); + auto get_lines_if = [](const google::protobuf::RepeatedPtrField& vector, int n) -> const char* { + if (vector.size() > n) { + return vector[n].lines().c_str(); + } + return nullptr; + }; + auto get_expState_if = [](const google::protobuf::RepeatedPtrField& vector, int n) -> int32 { + if (vector.size() > n) { + return vector[n].exp_state(); + } + return 0; + }; + auto exp_states = request->exp_states(); + if (exp_states.size() == 0) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "No values for expStates were specified"); } - case nidaqmx_grpc::CreateAITorqueBridgeTableChanRequest::PhysicalUnitsEnumCase::PHYSICAL_UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for physical_units was not specified or out of range"); - break; + if (exp_states.size() > 96) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "More than 96 values for expStates were specified"); } - } - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateAITorqueBridgeTableChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, bridge_config, voltage_excit_source, voltage_excit_val, nominal_bridge_resistance, electrical_vals, num_electrical_vals, electrical_units, physical_vals, num_physical_vals, physical_units, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + auto initialization_behavior = request->initialization_behavior(); -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAITorqueBridgeTwoPointLinChan(::grpc::ServerContext* context, const CreateAITorqueBridgeTwoPointLinChanRequest* request, CreateAITorqueBridgeTwoPointLinChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAITorqueBridgeTwoPointLinChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateAITorqueBridgeTwoPointLinChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateAITorqueBridgeTwoPointLinChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + bool new_session_initialized {}; + auto init_lambda = [&] () { + TaskHandle task; + auto status = std::static_pointer_cast(library_)->CreateWatchdogTimerTask(device_name, session_name, &task, timeout, get_lines_if(exp_states, 0), get_expState_if(exp_states, 0), get_lines_if(exp_states, 1), get_expState_if(exp_states, 1), get_lines_if(exp_states, 2), get_expState_if(exp_states, 2), get_lines_if(exp_states, 3), get_expState_if(exp_states, 3), get_lines_if(exp_states, 4), get_expState_if(exp_states, 4), get_lines_if(exp_states, 5), get_expState_if(exp_states, 5), get_lines_if(exp_states, 6), get_expState_if(exp_states, 6), get_lines_if(exp_states, 7), get_expState_if(exp_states, 7), get_lines_if(exp_states, 8), get_expState_if(exp_states, 8), get_lines_if(exp_states, 9), get_expState_if(exp_states, 9), get_lines_if(exp_states, 10), get_expState_if(exp_states, 10), get_lines_if(exp_states, 11), get_expState_if(exp_states, 11), get_lines_if(exp_states, 12), get_expState_if(exp_states, 12), get_lines_if(exp_states, 13), get_expState_if(exp_states, 13), get_lines_if(exp_states, 14), get_expState_if(exp_states, 14), get_lines_if(exp_states, 15), get_expState_if(exp_states, 15), get_lines_if(exp_states, 16), get_expState_if(exp_states, 16), get_lines_if(exp_states, 17), get_expState_if(exp_states, 17), get_lines_if(exp_states, 18), get_expState_if(exp_states, 18), get_lines_if(exp_states, 19), get_expState_if(exp_states, 19), get_lines_if(exp_states, 20), get_expState_if(exp_states, 20), get_lines_if(exp_states, 21), get_expState_if(exp_states, 21), get_lines_if(exp_states, 22), get_expState_if(exp_states, 22), get_lines_if(exp_states, 23), get_expState_if(exp_states, 23), get_lines_if(exp_states, 24), get_expState_if(exp_states, 24), get_lines_if(exp_states, 25), get_expState_if(exp_states, 25), get_lines_if(exp_states, 26), get_expState_if(exp_states, 26), get_lines_if(exp_states, 27), get_expState_if(exp_states, 27), get_lines_if(exp_states, 28), get_expState_if(exp_states, 28), get_lines_if(exp_states, 29), get_expState_if(exp_states, 29), get_lines_if(exp_states, 30), get_expState_if(exp_states, 30), get_lines_if(exp_states, 31), get_expState_if(exp_states, 31), get_lines_if(exp_states, 32), get_expState_if(exp_states, 32), get_lines_if(exp_states, 33), get_expState_if(exp_states, 33), get_lines_if(exp_states, 34), get_expState_if(exp_states, 34), get_lines_if(exp_states, 35), get_expState_if(exp_states, 35), get_lines_if(exp_states, 36), get_expState_if(exp_states, 36), get_lines_if(exp_states, 37), get_expState_if(exp_states, 37), get_lines_if(exp_states, 38), get_expState_if(exp_states, 38), get_lines_if(exp_states, 39), get_expState_if(exp_states, 39), get_lines_if(exp_states, 40), get_expState_if(exp_states, 40), get_lines_if(exp_states, 41), get_expState_if(exp_states, 41), get_lines_if(exp_states, 42), get_expState_if(exp_states, 42), get_lines_if(exp_states, 43), get_expState_if(exp_states, 43), get_lines_if(exp_states, 44), get_expState_if(exp_states, 44), get_lines_if(exp_states, 45), get_expState_if(exp_states, 45), get_lines_if(exp_states, 46), get_expState_if(exp_states, 46), get_lines_if(exp_states, 47), get_expState_if(exp_states, 47), get_lines_if(exp_states, 48), get_expState_if(exp_states, 48), get_lines_if(exp_states, 49), get_expState_if(exp_states, 49), get_lines_if(exp_states, 50), get_expState_if(exp_states, 50), get_lines_if(exp_states, 51), get_expState_if(exp_states, 51), get_lines_if(exp_states, 52), get_expState_if(exp_states, 52), get_lines_if(exp_states, 53), get_expState_if(exp_states, 53), get_lines_if(exp_states, 54), get_expState_if(exp_states, 54), get_lines_if(exp_states, 55), get_expState_if(exp_states, 55), get_lines_if(exp_states, 56), get_expState_if(exp_states, 56), get_lines_if(exp_states, 57), get_expState_if(exp_states, 57), get_lines_if(exp_states, 58), get_expState_if(exp_states, 58), get_lines_if(exp_states, 59), get_expState_if(exp_states, 59), get_lines_if(exp_states, 60), get_expState_if(exp_states, 60), get_lines_if(exp_states, 61), get_expState_if(exp_states, 61), get_lines_if(exp_states, 62), get_expState_if(exp_states, 62), get_lines_if(exp_states, 63), get_expState_if(exp_states, 63), get_lines_if(exp_states, 64), get_expState_if(exp_states, 64), get_lines_if(exp_states, 65), get_expState_if(exp_states, 65), get_lines_if(exp_states, 66), get_expState_if(exp_states, 66), get_lines_if(exp_states, 67), get_expState_if(exp_states, 67), get_lines_if(exp_states, 68), get_expState_if(exp_states, 68), get_lines_if(exp_states, 69), get_expState_if(exp_states, 69), get_lines_if(exp_states, 70), get_expState_if(exp_states, 70), get_lines_if(exp_states, 71), get_expState_if(exp_states, 71), get_lines_if(exp_states, 72), get_expState_if(exp_states, 72), get_lines_if(exp_states, 73), get_expState_if(exp_states, 73), get_lines_if(exp_states, 74), get_expState_if(exp_states, 74), get_lines_if(exp_states, 75), get_expState_if(exp_states, 75), get_lines_if(exp_states, 76), get_expState_if(exp_states, 76), get_lines_if(exp_states, 77), get_expState_if(exp_states, 77), get_lines_if(exp_states, 78), get_expState_if(exp_states, 78), get_lines_if(exp_states, 79), get_expState_if(exp_states, 79), get_lines_if(exp_states, 80), get_expState_if(exp_states, 80), get_lines_if(exp_states, 81), get_expState_if(exp_states, 81), get_lines_if(exp_states, 82), get_expState_if(exp_states, 82), get_lines_if(exp_states, 83), get_expState_if(exp_states, 83), get_lines_if(exp_states, 84), get_expState_if(exp_states, 84), get_lines_if(exp_states, 85), get_expState_if(exp_states, 85), get_lines_if(exp_states, 86), get_expState_if(exp_states, 86), get_lines_if(exp_states, 87), get_expState_if(exp_states, 87), get_lines_if(exp_states, 88), get_expState_if(exp_states, 88), get_lines_if(exp_states, 89), get_expState_if(exp_states, 89), get_lines_if(exp_states, 90), get_expState_if(exp_states, 90), get_lines_if(exp_states, 91), get_expState_if(exp_states, 91), get_lines_if(exp_states, 92), get_expState_if(exp_states, 92), get_lines_if(exp_states, 93), get_expState_if(exp_states, 93), get_lines_if(exp_states, 94), get_expState_if(exp_states, 94), get_lines_if(exp_states, 95), get_expState_if(exp_states, 95), get_lines_if(exp_states, 96), get_expState_if(exp_states, 96)); + return std::make_tuple(status, task); + }; + std::string grpc_device_session_name = request->session_name(); + // Capture the library shared_ptr by value. Do not capture `this` or any references. + LibrarySharedPtr library = library_; + auto cleanup_lambda = [library] (TaskHandle id) { library->ClearTask(id); }; + int status = session_repository_->add_session(grpc_device_session_name, init_lambda, cleanup_lambda, initialization_behavior, &new_session_initialized); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } + response->set_status(status); + response->mutable_task()->set_name(grpc_device_session_name); + response->set_new_session_initialized(new_session_initialized); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } + } - int32 bridge_config; - switch (request->bridge_config_enum_case()) { - case nidaqmx_grpc::CreateAITorqueBridgeTwoPointLinChanRequest::BridgeConfigEnumCase::kBridgeConfig: { - bridge_config = static_cast(request->bridge_config()); - break; - } - case nidaqmx_grpc::CreateAITorqueBridgeTwoPointLinChanRequest::BridgeConfigEnumCase::kBridgeConfigRaw: { - bridge_config = static_cast(request->bridge_config_raw()); - break; - } - case nidaqmx_grpc::CreateAITorqueBridgeTwoPointLinChanRequest::BridgeConfigEnumCase::BRIDGE_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for bridge_config was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateWatchdogTimerTaskEx(::grpc::ServerContext* context, const CreateWatchdogTimerTaskExRequest* request, CreateWatchdogTimerTaskExResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + auto session_name_mbcs = convert_from_grpc(request->session_name()); + auto session_name = session_name_mbcs.c_str(); + float64 timeout = request->timeout(); + auto initialization_behavior = request->initialization_behavior(); - int32 voltage_excit_source; - switch (request->voltage_excit_source_enum_case()) { - case nidaqmx_grpc::CreateAITorqueBridgeTwoPointLinChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { - voltage_excit_source = static_cast(request->voltage_excit_source()); - break; - } - case nidaqmx_grpc::CreateAITorqueBridgeTwoPointLinChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { - voltage_excit_source = static_cast(request->voltage_excit_source_raw()); - break; - } - case nidaqmx_grpc::CreateAITorqueBridgeTwoPointLinChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); - break; + bool new_session_initialized {}; + auto init_lambda = [&] () { + TaskHandle task; + auto status = library_->CreateWatchdogTimerTaskEx(device_name, session_name, &task, timeout); + return std::make_tuple(status, task); + }; + std::string grpc_device_session_name = request->session_name(); + // Capture the library shared_ptr by value. Do not capture `this` or any references. + LibrarySharedPtr library = library_; + auto cleanup_lambda = [library] (TaskHandle id) { library->ClearTask(id); }; + int status = session_repository_->add_session(grpc_device_session_name, init_lambda, cleanup_lambda, initialization_behavior, &new_session_initialized); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } + response->set_status(status); + response->mutable_task()->set_name(grpc_device_session_name); + response->set_new_session_initialized(new_session_initialized); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } + } - float64 voltage_excit_val = request->voltage_excit_val(); - float64 nominal_bridge_resistance = request->nominal_bridge_resistance(); - float64 first_electrical_val = request->first_electrical_val(); - float64 second_electrical_val = request->second_electrical_val(); - int32 electrical_units; - switch (request->electrical_units_enum_case()) { - case nidaqmx_grpc::CreateAITorqueBridgeTwoPointLinChanRequest::ElectricalUnitsEnumCase::kElectricalUnits: { - electrical_units = static_cast(request->electrical_units()); - break; - } - case nidaqmx_grpc::CreateAITorqueBridgeTwoPointLinChanRequest::ElectricalUnitsEnumCase::kElectricalUnitsRaw: { - electrical_units = static_cast(request->electrical_units_raw()); - break; - } - case nidaqmx_grpc::CreateAITorqueBridgeTwoPointLinChanRequest::ElectricalUnitsEnumCase::ELECTRICAL_UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for electrical_units was not specified or out of range"); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::DeleteNetworkDevice(::grpc::ServerContext* context, const DeleteNetworkDeviceRequest* request, DeleteNetworkDeviceResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + auto status = library_->DeleteNetworkDevice(device_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } - float64 first_physical_val = request->first_physical_val(); - float64 second_physical_val = request->second_physical_val(); - int32 physical_units; - switch (request->physical_units_enum_case()) { - case nidaqmx_grpc::CreateAITorqueBridgeTwoPointLinChanRequest::PhysicalUnitsEnumCase::kPhysicalUnits: { - physical_units = static_cast(request->physical_units()); - break; - } - case nidaqmx_grpc::CreateAITorqueBridgeTwoPointLinChanRequest::PhysicalUnitsEnumCase::kPhysicalUnitsRaw: { - physical_units = static_cast(request->physical_units_raw()); - break; - } - case nidaqmx_grpc::CreateAITorqueBridgeTwoPointLinChanRequest::PhysicalUnitsEnumCase::PHYSICAL_UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for physical_units was not specified or out of range"); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::DeleteSavedGlobalChan(::grpc::ServerContext* context, const DeleteSavedGlobalChanRequest* request, DeleteSavedGlobalChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto channel_name_mbcs = convert_from_grpc(request->channel_name()); + auto channel_name = channel_name_mbcs.c_str(); + auto status = library_->DeleteSavedGlobalChan(channel_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } + response->set_status(status); + return ::grpc::Status::OK; } - - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateAITorqueBridgeTwoPointLinChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, bridge_config, voltage_excit_source, voltage_excit_val, nominal_bridge_resistance, first_electrical_val, second_electrical_val, electrical_units, first_physical_val, second_physical_val, physical_units, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAIVelocityIEPEChan(::grpc::ServerContext* context, const CreateAIVelocityIEPEChanRequest* request, CreateAIVelocityIEPEChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - int32 terminal_config; - switch (request->terminal_config_enum_case()) { - case nidaqmx_grpc::CreateAIVelocityIEPEChanRequest::TerminalConfigEnumCase::kTerminalConfig: { - terminal_config = static_cast(request->terminal_config()); - break; - } - case nidaqmx_grpc::CreateAIVelocityIEPEChanRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { - terminal_config = static_cast(request->terminal_config_raw()); - break; - } - case nidaqmx_grpc::CreateAIVelocityIEPEChanRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::DeleteSavedScale(::grpc::ServerContext* context, const DeleteSavedScaleRequest* request, DeleteSavedScaleResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto scale_name_mbcs = convert_from_grpc(request->scale_name()); + auto scale_name = scale_name_mbcs.c_str(); + auto status = library_->DeleteSavedScale(scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAIVelocityIEPEChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateAIVelocityIEPEChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateAIVelocityIEPEChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::DeleteSavedTask(::grpc::ServerContext* context, const DeleteSavedTaskRequest* request, DeleteSavedTaskResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_name_mbcs = convert_from_grpc(request->task_name()); + auto task_name = task_name_mbcs.c_str(); + auto status = library_->DeleteSavedTask(task_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } + } - float64 sensitivity = request->sensitivity(); - int32 sensitivity_units; - switch (request->sensitivity_units_enum_case()) { - case nidaqmx_grpc::CreateAIVelocityIEPEChanRequest::SensitivityUnitsEnumCase::kSensitivityUnits: { - sensitivity_units = static_cast(request->sensitivity_units()); - break; - } - case nidaqmx_grpc::CreateAIVelocityIEPEChanRequest::SensitivityUnitsEnumCase::kSensitivityUnitsRaw: { - sensitivity_units = static_cast(request->sensitivity_units_raw()); - break; - } - case nidaqmx_grpc::CreateAIVelocityIEPEChanRequest::SensitivityUnitsEnumCase::SENSITIVITY_UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sensitivity_units was not specified or out of range"); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::DeviceSupportsCal(::grpc::ServerContext* context, const DeviceSupportsCalRequest* request, DeviceSupportsCalResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + bool32 cal_supported {}; + auto status = library_->DeviceSupportsCal(device_name, &cal_supported); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } + response->set_status(status); + response->set_cal_supported(cal_supported); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } - int32 current_excit_source; - switch (request->current_excit_source_enum_case()) { - case nidaqmx_grpc::CreateAIVelocityIEPEChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSource: { - current_excit_source = static_cast(request->current_excit_source()); - break; - } - case nidaqmx_grpc::CreateAIVelocityIEPEChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSourceRaw: { - current_excit_source = static_cast(request->current_excit_source_raw()); - break; - } - case nidaqmx_grpc::CreateAIVelocityIEPEChanRequest::CurrentExcitSourceEnumCase::CURRENT_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for current_excit_source was not specified or out of range"); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::DisableRefTrig(::grpc::ServerContext* context, const DisableRefTrigRequest* request, DisableRefTrigResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto status = library_->DisableRefTrig(task); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - float64 current_excit_val = request->current_excit_val(); - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateAIVelocityIEPEChan(task, physical_channel, name_to_assign_to_channel, terminal_config, min_val, max_val, units, sensitivity, sensitivity_units, current_excit_source, current_excit_val, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAIVoltageChan(::grpc::ServerContext* context, const CreateAIVoltageChanRequest* request, CreateAIVoltageChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - int32 terminal_config; - switch (request->terminal_config_enum_case()) { - case nidaqmx_grpc::CreateAIVoltageChanRequest::TerminalConfigEnumCase::kTerminalConfig: { - terminal_config = static_cast(request->terminal_config()); - break; - } - case nidaqmx_grpc::CreateAIVoltageChanRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { - terminal_config = static_cast(request->terminal_config_raw()); - break; - } - case nidaqmx_grpc::CreateAIVoltageChanRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::DisableStartTrig(::grpc::ServerContext* context, const DisableStartTrigRequest* request, DisableStartTrigResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto status = library_->DisableStartTrig(task); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAIVoltageChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateAIVoltageChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateAIVoltageChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::DisconnectTerms(::grpc::ServerContext* context, const DisconnectTermsRequest* request, DisconnectTermsResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto source_terminal_mbcs = convert_from_grpc(request->source_terminal()); + auto source_terminal = source_terminal_mbcs.c_str(); + auto destination_terminal_mbcs = convert_from_grpc(request->destination_terminal()); + auto destination_terminal = destination_terminal_mbcs.c_str(); + auto status = library_->DisconnectTerms(source_terminal, destination_terminal); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } + response->set_status(status); + return ::grpc::Status::OK; } - - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateAIVoltageChan(task, physical_channel, name_to_assign_to_channel, terminal_config, min_val, max_val, units, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAIVoltageChanWithExcit(::grpc::ServerContext* context, const CreateAIVoltageChanWithExcitRequest* request, CreateAIVoltageChanWithExcitResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - int32 terminal_config; - switch (request->terminal_config_enum_case()) { - case nidaqmx_grpc::CreateAIVoltageChanWithExcitRequest::TerminalConfigEnumCase::kTerminalConfig: { - terminal_config = static_cast(request->terminal_config()); - break; - } - case nidaqmx_grpc::CreateAIVoltageChanWithExcitRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { - terminal_config = static_cast(request->terminal_config_raw()); - break; - } - case nidaqmx_grpc::CreateAIVoltageChanWithExcitRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ExportSignal(::grpc::ServerContext* context, const ExportSignalRequest* request, ExportSignalResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 signal_id; + switch (request->signal_id_enum_case()) { + case nidaqmx_grpc::ExportSignalRequest::SignalIdEnumCase::kSignalId: { + signal_id = static_cast(request->signal_id()); + break; + } + case nidaqmx_grpc::ExportSignalRequest::SignalIdEnumCase::kSignalIdRaw: { + signal_id = static_cast(request->signal_id_raw()); + break; + } + case nidaqmx_grpc::ExportSignalRequest::SignalIdEnumCase::SIGNAL_ID_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for signal_id was not specified or out of range"); + break; + } + } - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAIVoltageChanWithExcitRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; + auto output_terminal_mbcs = convert_from_grpc(request->output_terminal()); + auto output_terminal = output_terminal_mbcs.c_str(); + auto status = library_->ExportSignal(task, signal_id, output_terminal); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - case nidaqmx_grpc::CreateAIVoltageChanWithExcitRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetAIChanCalCalDate(::grpc::ServerContext* context, const GetAIChanCalCalDateRequest* request, GetAIChanCalCalDateResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto channel_name_mbcs = convert_from_grpc(request->channel_name()); + auto channel_name = channel_name_mbcs.c_str(); + uInt32 year {}; + uInt32 month {}; + uInt32 day {}; + uInt32 hour {}; + uInt32 minute {}; + auto status = library_->GetAIChanCalCalDate(task, channel_name, &year, &month, &day, &hour, &minute); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - case nidaqmx_grpc::CreateAIVoltageChanWithExcitRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + response->set_status(status); + response->set_year(year); + response->set_month(month); + response->set_day(day); + response->set_hour(hour); + response->set_minute(minute); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetAIChanCalExpDate(::grpc::ServerContext* context, const GetAIChanCalExpDateRequest* request, GetAIChanCalExpDateResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto channel_name_mbcs = convert_from_grpc(request->channel_name()); + auto channel_name = channel_name_mbcs.c_str(); + uInt32 year {}; + uInt32 month {}; + uInt32 day {}; + uInt32 hour {}; + uInt32 minute {}; + auto status = library_->GetAIChanCalExpDate(task, channel_name, &year, &month, &day, &hour, &minute); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + response->set_year(year); + response->set_month(month); + response->set_day(day); + response->set_hour(hour); + response->set_minute(minute); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } - int32 bridge_config; - switch (request->bridge_config_enum_case()) { - case nidaqmx_grpc::CreateAIVoltageChanWithExcitRequest::BridgeConfigEnumCase::kBridgeConfig: { - bridge_config = static_cast(request->bridge_config()); - break; - } - case nidaqmx_grpc::CreateAIVoltageChanWithExcitRequest::BridgeConfigEnumCase::kBridgeConfigRaw: { - bridge_config = static_cast(request->bridge_config_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetAnalogPowerUpStates(::grpc::ServerContext* context, const GetAnalogPowerUpStatesRequest* request, GetAnalogPowerUpStatesResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + auto get_channelName_if = [](const google::protobuf::RepeatedPtrField& vector, int n) -> const char* { + if (vector.size() > n) { + return vector[n].channel_name().c_str(); + } + return nullptr; + }; + auto get_channelType_if = [](const google::protobuf::RepeatedPtrField& vector, int n) -> int32 { + if (vector.size() > n) { + return vector[n].channel_type(); + } + return 0; + }; + auto channels = request->channels(); + if (channels.size() == 0) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "No values for channels were specified"); } - case nidaqmx_grpc::CreateAIVoltageChanWithExcitRequest::BridgeConfigEnumCase::BRIDGE_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for bridge_config was not specified or out of range"); - break; + if (channels.size() > 96) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "More than 96 values for channels were specified"); } - } - int32 voltage_excit_source; - switch (request->voltage_excit_source_enum_case()) { - case nidaqmx_grpc::CreateAIVoltageChanWithExcitRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { - voltage_excit_source = static_cast(request->voltage_excit_source()); - break; - } - case nidaqmx_grpc::CreateAIVoltageChanWithExcitRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { - voltage_excit_source = static_cast(request->voltage_excit_source_raw()); - break; + auto get_state_if = [](std::vector& vector, int n) -> float64* { + if (vector.size() > n) { + return &(vector[n]); + } + return nullptr; + }; + std::vector stateVector; + stateVector.resize(channels.size()); + auto status = std::static_pointer_cast(library_)->GetAnalogPowerUpStates(device_name, get_channelName_if(channels, 0), get_state_if(stateVector, 0), get_channelType_if(channels, 0), get_channelName_if(channels, 1), get_state_if(stateVector, 1), get_channelType_if(channels, 1), get_channelName_if(channels, 2), get_state_if(stateVector, 2), get_channelType_if(channels, 2), get_channelName_if(channels, 3), get_state_if(stateVector, 3), get_channelType_if(channels, 3), get_channelName_if(channels, 4), get_state_if(stateVector, 4), get_channelType_if(channels, 4), get_channelName_if(channels, 5), get_state_if(stateVector, 5), get_channelType_if(channels, 5), get_channelName_if(channels, 6), get_state_if(stateVector, 6), get_channelType_if(channels, 6), get_channelName_if(channels, 7), get_state_if(stateVector, 7), get_channelType_if(channels, 7), get_channelName_if(channels, 8), get_state_if(stateVector, 8), get_channelType_if(channels, 8), get_channelName_if(channels, 9), get_state_if(stateVector, 9), get_channelType_if(channels, 9), get_channelName_if(channels, 10), get_state_if(stateVector, 10), get_channelType_if(channels, 10), get_channelName_if(channels, 11), get_state_if(stateVector, 11), get_channelType_if(channels, 11), get_channelName_if(channels, 12), get_state_if(stateVector, 12), get_channelType_if(channels, 12), get_channelName_if(channels, 13), get_state_if(stateVector, 13), get_channelType_if(channels, 13), get_channelName_if(channels, 14), get_state_if(stateVector, 14), get_channelType_if(channels, 14), get_channelName_if(channels, 15), get_state_if(stateVector, 15), get_channelType_if(channels, 15), get_channelName_if(channels, 16), get_state_if(stateVector, 16), get_channelType_if(channels, 16), get_channelName_if(channels, 17), get_state_if(stateVector, 17), get_channelType_if(channels, 17), get_channelName_if(channels, 18), get_state_if(stateVector, 18), get_channelType_if(channels, 18), get_channelName_if(channels, 19), get_state_if(stateVector, 19), get_channelType_if(channels, 19), get_channelName_if(channels, 20), get_state_if(stateVector, 20), get_channelType_if(channels, 20), get_channelName_if(channels, 21), get_state_if(stateVector, 21), get_channelType_if(channels, 21), get_channelName_if(channels, 22), get_state_if(stateVector, 22), get_channelType_if(channels, 22), get_channelName_if(channels, 23), get_state_if(stateVector, 23), get_channelType_if(channels, 23), get_channelName_if(channels, 24), get_state_if(stateVector, 24), get_channelType_if(channels, 24), get_channelName_if(channels, 25), get_state_if(stateVector, 25), get_channelType_if(channels, 25), get_channelName_if(channels, 26), get_state_if(stateVector, 26), get_channelType_if(channels, 26), get_channelName_if(channels, 27), get_state_if(stateVector, 27), get_channelType_if(channels, 27), get_channelName_if(channels, 28), get_state_if(stateVector, 28), get_channelType_if(channels, 28), get_channelName_if(channels, 29), get_state_if(stateVector, 29), get_channelType_if(channels, 29), get_channelName_if(channels, 30), get_state_if(stateVector, 30), get_channelType_if(channels, 30), get_channelName_if(channels, 31), get_state_if(stateVector, 31), get_channelType_if(channels, 31), get_channelName_if(channels, 32), get_state_if(stateVector, 32), get_channelType_if(channels, 32), get_channelName_if(channels, 33), get_state_if(stateVector, 33), get_channelType_if(channels, 33), get_channelName_if(channels, 34), get_state_if(stateVector, 34), get_channelType_if(channels, 34), get_channelName_if(channels, 35), get_state_if(stateVector, 35), get_channelType_if(channels, 35), get_channelName_if(channels, 36), get_state_if(stateVector, 36), get_channelType_if(channels, 36), get_channelName_if(channels, 37), get_state_if(stateVector, 37), get_channelType_if(channels, 37), get_channelName_if(channels, 38), get_state_if(stateVector, 38), get_channelType_if(channels, 38), get_channelName_if(channels, 39), get_state_if(stateVector, 39), get_channelType_if(channels, 39), get_channelName_if(channels, 40), get_state_if(stateVector, 40), get_channelType_if(channels, 40), get_channelName_if(channels, 41), get_state_if(stateVector, 41), get_channelType_if(channels, 41), get_channelName_if(channels, 42), get_state_if(stateVector, 42), get_channelType_if(channels, 42), get_channelName_if(channels, 43), get_state_if(stateVector, 43), get_channelType_if(channels, 43), get_channelName_if(channels, 44), get_state_if(stateVector, 44), get_channelType_if(channels, 44), get_channelName_if(channels, 45), get_state_if(stateVector, 45), get_channelType_if(channels, 45), get_channelName_if(channels, 46), get_state_if(stateVector, 46), get_channelType_if(channels, 46), get_channelName_if(channels, 47), get_state_if(stateVector, 47), get_channelType_if(channels, 47), get_channelName_if(channels, 48), get_state_if(stateVector, 48), get_channelType_if(channels, 48), get_channelName_if(channels, 49), get_state_if(stateVector, 49), get_channelType_if(channels, 49), get_channelName_if(channels, 50), get_state_if(stateVector, 50), get_channelType_if(channels, 50), get_channelName_if(channels, 51), get_state_if(stateVector, 51), get_channelType_if(channels, 51), get_channelName_if(channels, 52), get_state_if(stateVector, 52), get_channelType_if(channels, 52), get_channelName_if(channels, 53), get_state_if(stateVector, 53), get_channelType_if(channels, 53), get_channelName_if(channels, 54), get_state_if(stateVector, 54), get_channelType_if(channels, 54), get_channelName_if(channels, 55), get_state_if(stateVector, 55), get_channelType_if(channels, 55), get_channelName_if(channels, 56), get_state_if(stateVector, 56), get_channelType_if(channels, 56), get_channelName_if(channels, 57), get_state_if(stateVector, 57), get_channelType_if(channels, 57), get_channelName_if(channels, 58), get_state_if(stateVector, 58), get_channelType_if(channels, 58), get_channelName_if(channels, 59), get_state_if(stateVector, 59), get_channelType_if(channels, 59), get_channelName_if(channels, 60), get_state_if(stateVector, 60), get_channelType_if(channels, 60), get_channelName_if(channels, 61), get_state_if(stateVector, 61), get_channelType_if(channels, 61), get_channelName_if(channels, 62), get_state_if(stateVector, 62), get_channelType_if(channels, 62), get_channelName_if(channels, 63), get_state_if(stateVector, 63), get_channelType_if(channels, 63), get_channelName_if(channels, 64), get_state_if(stateVector, 64), get_channelType_if(channels, 64), get_channelName_if(channels, 65), get_state_if(stateVector, 65), get_channelType_if(channels, 65), get_channelName_if(channels, 66), get_state_if(stateVector, 66), get_channelType_if(channels, 66), get_channelName_if(channels, 67), get_state_if(stateVector, 67), get_channelType_if(channels, 67), get_channelName_if(channels, 68), get_state_if(stateVector, 68), get_channelType_if(channels, 68), get_channelName_if(channels, 69), get_state_if(stateVector, 69), get_channelType_if(channels, 69), get_channelName_if(channels, 70), get_state_if(stateVector, 70), get_channelType_if(channels, 70), get_channelName_if(channels, 71), get_state_if(stateVector, 71), get_channelType_if(channels, 71), get_channelName_if(channels, 72), get_state_if(stateVector, 72), get_channelType_if(channels, 72), get_channelName_if(channels, 73), get_state_if(stateVector, 73), get_channelType_if(channels, 73), get_channelName_if(channels, 74), get_state_if(stateVector, 74), get_channelType_if(channels, 74), get_channelName_if(channels, 75), get_state_if(stateVector, 75), get_channelType_if(channels, 75), get_channelName_if(channels, 76), get_state_if(stateVector, 76), get_channelType_if(channels, 76), get_channelName_if(channels, 77), get_state_if(stateVector, 77), get_channelType_if(channels, 77), get_channelName_if(channels, 78), get_state_if(stateVector, 78), get_channelType_if(channels, 78), get_channelName_if(channels, 79), get_state_if(stateVector, 79), get_channelType_if(channels, 79), get_channelName_if(channels, 80), get_state_if(stateVector, 80), get_channelType_if(channels, 80), get_channelName_if(channels, 81), get_state_if(stateVector, 81), get_channelType_if(channels, 81), get_channelName_if(channels, 82), get_state_if(stateVector, 82), get_channelType_if(channels, 82), get_channelName_if(channels, 83), get_state_if(stateVector, 83), get_channelType_if(channels, 83), get_channelName_if(channels, 84), get_state_if(stateVector, 84), get_channelType_if(channels, 84), get_channelName_if(channels, 85), get_state_if(stateVector, 85), get_channelType_if(channels, 85), get_channelName_if(channels, 86), get_state_if(stateVector, 86), get_channelType_if(channels, 86), get_channelName_if(channels, 87), get_state_if(stateVector, 87), get_channelType_if(channels, 87), get_channelName_if(channels, 88), get_state_if(stateVector, 88), get_channelType_if(channels, 88), get_channelName_if(channels, 89), get_state_if(stateVector, 89), get_channelType_if(channels, 89), get_channelName_if(channels, 90), get_state_if(stateVector, 90), get_channelType_if(channels, 90), get_channelName_if(channels, 91), get_state_if(stateVector, 91), get_channelType_if(channels, 91), get_channelName_if(channels, 92), get_state_if(stateVector, 92), get_channelType_if(channels, 92), get_channelName_if(channels, 93), get_state_if(stateVector, 93), get_channelType_if(channels, 93), get_channelName_if(channels, 94), get_state_if(stateVector, 94), get_channelType_if(channels, 94), get_channelName_if(channels, 95), get_state_if(stateVector, 95), get_channelType_if(channels, 95), get_channelName_if(channels, 96), get_state_if(stateVector, 96), get_channelType_if(channels, 96)); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } - case nidaqmx_grpc::CreateAIVoltageChanWithExcitRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); - break; + response->set_status(status); + for (int i = 0; i < stateVector.size(); ++i) { + response->add_power_up_states(stateVector[i]); } + return ::grpc::Status::OK; } - - float64 voltage_excit_val = request->voltage_excit_val(); - bool32 use_excit_for_scaling = request->use_excit_for_scaling(); - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateAIVoltageChanWithExcit(task, physical_channel, name_to_assign_to_channel, terminal_config, min_val, max_val, units, bridge_config, voltage_excit_source, voltage_excit_val, use_excit_for_scaling, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAIVoltageRMSChan(::grpc::ServerContext* context, const CreateAIVoltageRMSChanRequest* request, CreateAIVoltageRMSChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - int32 terminal_config; - switch (request->terminal_config_enum_case()) { - case nidaqmx_grpc::CreateAIVoltageRMSChanRequest::TerminalConfigEnumCase::kTerminalConfig: { - terminal_config = static_cast(request->terminal_config()); - break; - } - case nidaqmx_grpc::CreateAIVoltageRMSChanRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { - terminal_config = static_cast(request->terminal_config_raw()); - break; - } - case nidaqmx_grpc::CreateAIVoltageRMSChanRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetAnalogPowerUpStatesWithOutputType(::grpc::ServerContext* context, const GetAnalogPowerUpStatesWithOutputTypeRequest* request, GetAnalogPowerUpStatesWithOutputTypeResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto channel_names_mbcs = convert_from_grpc(request->channel_names()); + auto channel_names = channel_names_mbcs.c_str(); + uInt32 array_size_copy = request->array_size(); + response->mutable_state_array()->Resize(array_size_copy, 0); + float64* state_array = response->mutable_state_array()->mutable_data(); + response->mutable_channel_type_array_raw()->Resize(array_size_copy, 0); + int32* channel_type_array = reinterpret_cast(response->mutable_channel_type_array_raw()->mutable_data()); + auto status = library_->GetAnalogPowerUpStatesWithOutputType(channel_names, state_array, channel_type_array, &array_size_copy); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } + response->set_status(status); + response->mutable_state_array()->Resize(array_size_copy, 0); + response->mutable_channel_type_array()->Clear(); + response->mutable_channel_type_array()->Reserve(array_size_copy); + std::transform( + response->channel_type_array_raw().begin(), + response->channel_type_array_raw().begin() + array_size_copy, + google::protobuf::RepeatedFieldBackInserter(response->mutable_channel_type_array()), + [&](auto x) { + return static_cast(x); + }); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAIVoltageRMSChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateAIVoltageRMSChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateAIVoltageRMSChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetArmStartTrigTimestampVal(::grpc::ServerContext* context, const GetArmStartTrigTimestampValRequest* request, GetArmStartTrigTimestampValResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + CVIAbsoluteTime data {}; + auto status = library_->GetArmStartTrigTimestampVal(task, &data); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + convert_to_grpc(data, response->mutable_data()); + return ::grpc::Status::OK; } - - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateAIVoltageRMSChan(task, physical_channel, name_to_assign_to_channel, terminal_config, min_val, max_val, units, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAOCurrentChan(::grpc::ServerContext* context, const CreateAOCurrentChanRequest* request, CreateAOCurrentChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAOCurrentChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateAOCurrentChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateAOCurrentChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; - } - } - - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateAOCurrentChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetArmStartTrigTrigWhen(::grpc::ServerContext* context, const GetArmStartTrigTrigWhenRequest* request, GetArmStartTrigTrigWhenResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + CVIAbsoluteTime data {}; + auto status = library_->GetArmStartTrigTrigWhen(task, &data); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + convert_to_grpc(data, response->mutable_data()); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAOFuncGenChan(::grpc::ServerContext* context, const CreateAOFuncGenChanRequest* request, CreateAOFuncGenChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - int32 type; - switch (request->type_enum_case()) { - case nidaqmx_grpc::CreateAOFuncGenChanRequest::TypeEnumCase::kType: { - type = static_cast(request->type()); - break; - } - case nidaqmx_grpc::CreateAOFuncGenChanRequest::TypeEnumCase::kTypeRaw: { - type = static_cast(request->type_raw()); - break; - } - case nidaqmx_grpc::CreateAOFuncGenChanRequest::TypeEnumCase::TYPE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for type was not specified or out of range"); - break; - } - } - - float64 freq = request->freq(); - float64 amplitude = request->amplitude(); - float64 offset = request->offset(); - auto status = library_->CreateAOFuncGenChan(task, physical_channel, name_to_assign_to_channel, type, freq, amplitude, offset); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetAutoConfiguredCDAQSyncConnections(::grpc::ServerContext* context, const GetAutoConfiguredCDAQSyncConnectionsRequest* request, GetAutoConfiguredCDAQSyncConnectionsResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAOVoltageChan(::grpc::ServerContext* context, const CreateAOVoltageChanRequest* request, CreateAOVoltageChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAOVoltageChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateAOVoltageChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateAOVoltageChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; - } - } - - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateAOVoltageChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + while (true) { + auto status = library_->GetAutoConfiguredCDAQSyncConnections(nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + uInt32 port_list_size = status; -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateCIAngEncoderChan(::grpc::ServerContext* context, const CreateCIAngEncoderChanRequest* request, CreateCIAngEncoderChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto counter_mbcs = convert_from_grpc(request->counter()); - auto counter = counter_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - int32 decoding_type; - switch (request->decoding_type_enum_case()) { - case nidaqmx_grpc::CreateCIAngEncoderChanRequest::DecodingTypeEnumCase::kDecodingType: { - decoding_type = static_cast(request->decoding_type()); - break; - } - case nidaqmx_grpc::CreateCIAngEncoderChanRequest::DecodingTypeEnumCase::kDecodingTypeRaw: { - decoding_type = static_cast(request->decoding_type_raw()); - break; - } - case nidaqmx_grpc::CreateCIAngEncoderChanRequest::DecodingTypeEnumCase::DECODING_TYPE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for decoding_type was not specified or out of range"); - break; + std::string port_list; + if (port_list_size > 0) { + port_list.resize(port_list_size - 1); + } + status = library_->GetAutoConfiguredCDAQSyncConnections((char*)port_list.data(), port_list_size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(port_list_size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + std::string port_list_utf8; + convert_to_grpc(port_list, &port_list_utf8); + response->set_port_list(port_list_utf8); + nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_port_list())); + return ::grpc::Status::OK; + } + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetBufferAttributeUInt32(::grpc::ServerContext* context, const GetBufferAttributeUInt32Request* request, GetBufferAttributeUInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetBufferAttributeUInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::BufferUInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetBufferAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::BufferUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetBufferAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - } - bool32 zidx_enable = request->zidx_enable(); - float64 zidx_val = request->zidx_val(); - int32 zidx_phase; - switch (request->zidx_phase_enum_case()) { - case nidaqmx_grpc::CreateCIAngEncoderChanRequest::ZidxPhaseEnumCase::kZidxPhase: { - zidx_phase = static_cast(request->zidx_phase()); - break; - } - case nidaqmx_grpc::CreateCIAngEncoderChanRequest::ZidxPhaseEnumCase::kZidxPhaseRaw: { - zidx_phase = static_cast(request->zidx_phase_raw()); - break; - } - case nidaqmx_grpc::CreateCIAngEncoderChanRequest::ZidxPhaseEnumCase::ZIDX_PHASE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for zidx_phase was not specified or out of range"); - break; + uInt32 value {}; + auto status = library_->GetBufferAttributeUInt32(task, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } + } - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateCIAngEncoderChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateCIAngEncoderChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetCalInfoAttributeBool(::grpc::ServerContext* context, const GetCalInfoAttributeBoolRequest* request, GetCalInfoAttributeBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetCalInfoAttributeBoolRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::CalibrationInfoBoolAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetCalInfoAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::CalibrationInfoBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetCalInfoAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateCIAngEncoderChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + + bool32 value {}; + auto status = library_->GetCalInfoAttributeBool(device_name, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; } - - uInt32 pulses_per_rev = request->pulses_per_rev(); - float64 initial_angle = request->initial_angle(); - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateCIAngEncoderChan(task, counter, name_to_assign_to_channel, decoding_type, zidx_enable, zidx_val, zidx_phase, units, pulses_per_rev, initial_angle, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateCIAngVelocityChan(::grpc::ServerContext* context, const CreateCIAngVelocityChanRequest* request, CreateCIAngVelocityChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto counter_mbcs = convert_from_grpc(request->counter()); - auto counter = counter_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 decoding_type; - switch (request->decoding_type_enum_case()) { - case nidaqmx_grpc::CreateCIAngVelocityChanRequest::DecodingTypeEnumCase::kDecodingType: { - decoding_type = static_cast(request->decoding_type()); - break; - } - case nidaqmx_grpc::CreateCIAngVelocityChanRequest::DecodingTypeEnumCase::kDecodingTypeRaw: { - decoding_type = static_cast(request->decoding_type_raw()); - break; - } - case nidaqmx_grpc::CreateCIAngVelocityChanRequest::DecodingTypeEnumCase::DECODING_TYPE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for decoding_type was not specified or out of range"); - break; - } - } - - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateCIAngVelocityChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateCIAngVelocityChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateCIAngVelocityChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; - } - } - - uInt32 pulses_per_rev = request->pulses_per_rev(); - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateCIAngVelocityChan(task, counter, name_to_assign_to_channel, min_val, max_val, decoding_type, units, pulses_per_rev, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateCICountEdgesChan(::grpc::ServerContext* context, const CreateCICountEdgesChanRequest* request, CreateCICountEdgesChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto counter_mbcs = convert_from_grpc(request->counter()); - auto counter = counter_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - int32 edge; - switch (request->edge_enum_case()) { - case nidaqmx_grpc::CreateCICountEdgesChanRequest::EdgeEnumCase::kEdge: { - edge = static_cast(request->edge()); - break; - } - case nidaqmx_grpc::CreateCICountEdgesChanRequest::EdgeEnumCase::kEdgeRaw: { - edge = static_cast(request->edge_raw()); - break; - } - case nidaqmx_grpc::CreateCICountEdgesChanRequest::EdgeEnumCase::EDGE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for edge was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetCalInfoAttributeDouble(::grpc::ServerContext* context, const GetCalInfoAttributeDoubleRequest* request, GetCalInfoAttributeDoubleResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - - uInt32 initial_count = request->initial_count(); - int32 count_direction; - switch (request->count_direction_enum_case()) { - case nidaqmx_grpc::CreateCICountEdgesChanRequest::CountDirectionEnumCase::kCountDirection: { - count_direction = static_cast(request->count_direction()); - break; - } - case nidaqmx_grpc::CreateCICountEdgesChanRequest::CountDirectionEnumCase::kCountDirectionRaw: { - count_direction = static_cast(request->count_direction_raw()); - break; + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetCalInfoAttributeDoubleRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::CalibrationInfoDoubleAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetCalInfoAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::CalibrationInfoDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetCalInfoAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateCICountEdgesChanRequest::CountDirectionEnumCase::COUNT_DIRECTION_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for count_direction was not specified or out of range"); - break; + + float64 value {}; + auto status = library_->GetCalInfoAttributeDouble(device_name, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; } - - auto status = library_->CreateCICountEdgesChan(task, counter, name_to_assign_to_channel, edge, initial_count, count_direction); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateCIDutyCycleChan(::grpc::ServerContext* context, const CreateCIDutyCycleChanRequest* request, CreateCIDutyCycleChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto counter_mbcs = convert_from_grpc(request->counter()); - auto counter = counter_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_freq = request->min_freq(); - float64 max_freq = request->max_freq(); - int32 edge; - switch (request->edge_enum_case()) { - case nidaqmx_grpc::CreateCIDutyCycleChanRequest::EdgeEnumCase::kEdge: { - edge = static_cast(request->edge()); - break; - } - case nidaqmx_grpc::CreateCIDutyCycleChanRequest::EdgeEnumCase::kEdgeRaw: { - edge = static_cast(request->edge_raw()); - break; - } - case nidaqmx_grpc::CreateCIDutyCycleChanRequest::EdgeEnumCase::EDGE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for edge was not specified or out of range"); - break; - } - } - - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateCIDutyCycleChan(task, counter, name_to_assign_to_channel, min_freq, max_freq, edge, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateCIFreqChan(::grpc::ServerContext* context, const CreateCIFreqChanRequest* request, CreateCIFreqChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto counter_mbcs = convert_from_grpc(request->counter()); - auto counter = counter_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateCIFreqChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateCIFreqChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetCalInfoAttributeString(::grpc::ServerContext* context, const GetCalInfoAttributeStringRequest* request, GetCalInfoAttributeStringResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetCalInfoAttributeStringRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::CalibrationInfoStringAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetCalInfoAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::CalibrationInfoStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetCalInfoAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateCIFreqChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + + + while (true) { + auto status = library_->GetCalInfoAttributeString(device_name, attribute, nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + uInt32 size = status; + + std::string value; + if (size > 0) { + value.resize(size - 1); + } + status = library_->GetCalInfoAttributeString(device_name, attribute, (char*)value.data(), size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + std::string value_utf8; + convert_to_grpc(value, &value_utf8); + response->set_value(value_utf8); + nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); + return ::grpc::Status::OK; + } + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetCalInfoAttributeUInt32(::grpc::ServerContext* context, const GetCalInfoAttributeUInt32Request* request, GetCalInfoAttributeUInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetCalInfoAttributeUInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::CalibrationInfoUInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetCalInfoAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::CalibrationInfoUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetCalInfoAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - } - int32 edge; - switch (request->edge_enum_case()) { - case nidaqmx_grpc::CreateCIFreqChanRequest::EdgeEnumCase::kEdge: { - edge = static_cast(request->edge()); - break; + uInt32 value {}; + auto status = library_->GetCalInfoAttributeUInt32(device_name, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } - case nidaqmx_grpc::CreateCIFreqChanRequest::EdgeEnumCase::kEdgeRaw: { - edge = static_cast(request->edge_raw()); - break; + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetChanAttributeBool(::grpc::ServerContext* context, const GetChanAttributeBoolRequest* request, GetChanAttributeBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto channel_mbcs = convert_from_grpc(request->channel()); + auto channel = channel_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetChanAttributeBoolRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ChannelBoolAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetChanAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ChannelBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetChanAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateCIFreqChanRequest::EdgeEnumCase::EDGE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for edge was not specified or out of range"); - break; + + bool32 value {}; + auto status = library_->GetChanAttributeBool(task, channel, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetChanAttributeDouble(::grpc::ServerContext* context, const GetChanAttributeDoubleRequest* request, GetChanAttributeDoubleResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto channel_mbcs = convert_from_grpc(request->channel()); + auto channel = channel_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetChanAttributeDoubleRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ChannelDoubleAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetChanAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ChannelDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetChanAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } - int32 meas_method; - switch (request->meas_method_enum_case()) { - case nidaqmx_grpc::CreateCIFreqChanRequest::MeasMethodEnumCase::kMeasMethod: { - meas_method = static_cast(request->meas_method()); - break; + float64 value {}; + auto status = library_->GetChanAttributeDouble(task, channel, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - case nidaqmx_grpc::CreateCIFreqChanRequest::MeasMethodEnumCase::kMeasMethodRaw: { - meas_method = static_cast(request->meas_method_raw()); - break; + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetChanAttributeDoubleArray(::grpc::ServerContext* context, const GetChanAttributeDoubleArrayRequest* request, GetChanAttributeDoubleArrayResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto channel_mbcs = convert_from_grpc(request->channel()); + auto channel = channel_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetChanAttributeDoubleArrayRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ChannelDoubleArrayAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetChanAttributeDoubleArrayRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ChannelDoubleArrayAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetChanAttributeDoubleArrayRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateCIFreqChanRequest::MeasMethodEnumCase::MEAS_METHOD_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for meas_method was not specified or out of range"); - break; + + + while (true) { + auto status = library_->GetChanAttributeDoubleArray(task, channel, attribute, nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + uInt32 size = status; + + response->mutable_value()->Resize(size, 0); + float64* value = response->mutable_value()->mutable_data(); + status = library_->GetChanAttributeDoubleArray(task, channel, attribute, value, size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; } } - - float64 meas_time = request->meas_time(); - uInt32 divisor = request->divisor(); - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateCIFreqChan(task, counter, name_to_assign_to_channel, min_val, max_val, units, edge, meas_method, meas_time, divisor, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateCIGPSTimestampChan(::grpc::ServerContext* context, const CreateCIGPSTimestampChanRequest* request, CreateCIGPSTimestampChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto counter_mbcs = convert_from_grpc(request->counter()); - auto counter = counter_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateCIGPSTimestampChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateCIGPSTimestampChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetChanAttributeInt32(::grpc::ServerContext* context, const GetChanAttributeInt32Request* request, GetChanAttributeInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto channel_mbcs = convert_from_grpc(request->channel()); + auto channel = channel_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetChanAttributeInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ChannelInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetChanAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ChannelInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetChanAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateCIGPSTimestampChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + + int32 value {}; + auto status = library_->GetChanAttributeInt32(task, channel, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + auto checked_convert_value = [](auto raw_value) { + bool raw_value_is_valid = nidaqmx_grpc::ChannelInt32AttributeValues_IsValid(raw_value); + auto valid_enum_value = raw_value_is_valid ? raw_value : 0; + return static_cast(valid_enum_value); + }; + response->set_value(checked_convert_value(value)); + response->set_value_raw(value); + return ::grpc::Status::OK; } - - int32 sync_method; - switch (request->sync_method_enum_case()) { - case nidaqmx_grpc::CreateCIGPSTimestampChanRequest::SyncMethodEnumCase::kSyncMethod: { - sync_method = static_cast(request->sync_method()); - break; + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetChanAttributeString(::grpc::ServerContext* context, const GetChanAttributeStringRequest* request, GetChanAttributeStringResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto channel_mbcs = convert_from_grpc(request->channel()); + auto channel = channel_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetChanAttributeStringRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ChannelStringAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetChanAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ChannelStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetChanAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateCIGPSTimestampChanRequest::SyncMethodEnumCase::kSyncMethodRaw: { - sync_method = static_cast(request->sync_method_raw()); - break; + + + while (true) { + auto status = library_->GetChanAttributeString(task, channel, attribute, nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + uInt32 size = status; + + std::string value; + if (size > 0) { + value.resize(size - 1); + } + status = library_->GetChanAttributeString(task, channel, attribute, (char*)value.data(), size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + std::string value_utf8; + convert_to_grpc(value, &value_utf8); + response->set_value(value_utf8); + nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); + return ::grpc::Status::OK; + } + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetChanAttributeUInt32(::grpc::ServerContext* context, const GetChanAttributeUInt32Request* request, GetChanAttributeUInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto channel_mbcs = convert_from_grpc(request->channel()); + auto channel = channel_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetChanAttributeUInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ChannelUInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetChanAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ChannelUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetChanAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateCIGPSTimestampChanRequest::SyncMethodEnumCase::SYNC_METHOD_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sync_method was not specified or out of range"); - break; + + uInt32 value {}; + auto status = library_->GetChanAttributeUInt32(task, channel, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; } - - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateCIGPSTimestampChan(task, counter, name_to_assign_to_channel, units, sync_method, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateCILinEncoderChan(::grpc::ServerContext* context, const CreateCILinEncoderChanRequest* request, CreateCILinEncoderChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto counter_mbcs = convert_from_grpc(request->counter()); - auto counter = counter_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - int32 decoding_type; - switch (request->decoding_type_enum_case()) { - case nidaqmx_grpc::CreateCILinEncoderChanRequest::DecodingTypeEnumCase::kDecodingType: { - decoding_type = static_cast(request->decoding_type()); - break; - } - case nidaqmx_grpc::CreateCILinEncoderChanRequest::DecodingTypeEnumCase::kDecodingTypeRaw: { - decoding_type = static_cast(request->decoding_type_raw()); - break; - } - case nidaqmx_grpc::CreateCILinEncoderChanRequest::DecodingTypeEnumCase::DECODING_TYPE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for decoding_type was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetDeviceAttributeBool(::grpc::ServerContext* context, const GetDeviceAttributeBoolRequest* request, GetDeviceAttributeBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - - bool32 zidx_enable = request->zidx_enable(); - float64 zidx_val = request->zidx_val(); - int32 zidx_phase; - switch (request->zidx_phase_enum_case()) { - case nidaqmx_grpc::CreateCILinEncoderChanRequest::ZidxPhaseEnumCase::kZidxPhase: { - zidx_phase = static_cast(request->zidx_phase()); - break; - } - case nidaqmx_grpc::CreateCILinEncoderChanRequest::ZidxPhaseEnumCase::kZidxPhaseRaw: { - zidx_phase = static_cast(request->zidx_phase_raw()); - break; - } - case nidaqmx_grpc::CreateCILinEncoderChanRequest::ZidxPhaseEnumCase::ZIDX_PHASE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for zidx_phase was not specified or out of range"); - break; + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetDeviceAttributeBoolRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::DeviceBoolAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetDeviceAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::DeviceBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetDeviceAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - } - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateCILinEncoderChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateCILinEncoderChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateCILinEncoderChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + bool32 value {}; + auto status = library_->GetDeviceAttributeBool(device_name, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; } - - float64 dist_per_pulse = request->dist_per_pulse(); - float64 initial_pos = request->initial_pos(); - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateCILinEncoderChan(task, counter, name_to_assign_to_channel, decoding_type, zidx_enable, zidx_val, zidx_phase, units, dist_per_pulse, initial_pos, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateCILinVelocityChan(::grpc::ServerContext* context, const CreateCILinVelocityChanRequest* request, CreateCILinVelocityChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto counter_mbcs = convert_from_grpc(request->counter()); - auto counter = counter_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 decoding_type; - switch (request->decoding_type_enum_case()) { - case nidaqmx_grpc::CreateCILinVelocityChanRequest::DecodingTypeEnumCase::kDecodingType: { - decoding_type = static_cast(request->decoding_type()); - break; - } - case nidaqmx_grpc::CreateCILinVelocityChanRequest::DecodingTypeEnumCase::kDecodingTypeRaw: { - decoding_type = static_cast(request->decoding_type_raw()); - break; - } - case nidaqmx_grpc::CreateCILinVelocityChanRequest::DecodingTypeEnumCase::DECODING_TYPE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for decoding_type was not specified or out of range"); - break; - } - } - - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateCILinVelocityChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateCILinVelocityChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateCILinVelocityChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; - } - } - - float64 dist_per_pulse = request->dist_per_pulse(); - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateCILinVelocityChan(task, counter, name_to_assign_to_channel, min_val, max_val, decoding_type, units, dist_per_pulse, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateCIPeriodChan(::grpc::ServerContext* context, const CreateCIPeriodChanRequest* request, CreateCIPeriodChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto counter_mbcs = convert_from_grpc(request->counter()); - auto counter = counter_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateCIPeriodChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateCIPeriodChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateCIPeriodChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetDeviceAttributeDouble(::grpc::ServerContext* context, const GetDeviceAttributeDoubleRequest* request, GetDeviceAttributeDoubleResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - - int32 edge; - switch (request->edge_enum_case()) { - case nidaqmx_grpc::CreateCIPeriodChanRequest::EdgeEnumCase::kEdge: { - edge = static_cast(request->edge()); - break; - } - case nidaqmx_grpc::CreateCIPeriodChanRequest::EdgeEnumCase::kEdgeRaw: { - edge = static_cast(request->edge_raw()); - break; - } - case nidaqmx_grpc::CreateCIPeriodChanRequest::EdgeEnumCase::EDGE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for edge was not specified or out of range"); - break; + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetDeviceAttributeDoubleRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::DeviceDoubleAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetDeviceAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::DeviceDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetDeviceAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - } - int32 meas_method; - switch (request->meas_method_enum_case()) { - case nidaqmx_grpc::CreateCIPeriodChanRequest::MeasMethodEnumCase::kMeasMethod: { - meas_method = static_cast(request->meas_method()); - break; - } - case nidaqmx_grpc::CreateCIPeriodChanRequest::MeasMethodEnumCase::kMeasMethodRaw: { - meas_method = static_cast(request->meas_method_raw()); - break; - } - case nidaqmx_grpc::CreateCIPeriodChanRequest::MeasMethodEnumCase::MEAS_METHOD_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for meas_method was not specified or out of range"); - break; + float64 value {}; + auto status = library_->GetDeviceAttributeDouble(device_name, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; } - - float64 meas_time = request->meas_time(); - uInt32 divisor = request->divisor(); - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateCIPeriodChan(task, counter, name_to_assign_to_channel, min_val, max_val, units, edge, meas_method, meas_time, divisor, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateCIPulseChanFreq(::grpc::ServerContext* context, const CreateCIPulseChanFreqRequest* request, CreateCIPulseChanFreqResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto counter_mbcs = convert_from_grpc(request->counter()); - auto counter = counter_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateCIPulseChanFreqRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateCIPulseChanFreqRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateCIPulseChanFreqRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; - } - } - - auto status = library_->CreateCIPulseChanFreq(task, counter, name_to_assign_to_channel, min_val, max_val, units); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetDeviceAttributeDoubleArray(::grpc::ServerContext* context, const GetDeviceAttributeDoubleArrayRequest* request, GetDeviceAttributeDoubleArrayResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetDeviceAttributeDoubleArrayRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::DeviceDoubleArrayAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetDeviceAttributeDoubleArrayRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::DeviceDoubleArrayAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetDeviceAttributeDoubleArrayRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateCIPulseChanTicks(::grpc::ServerContext* context, const CreateCIPulseChanTicksRequest* request, CreateCIPulseChanTicksResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto counter_mbcs = convert_from_grpc(request->counter()); - auto counter = counter_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - auto source_terminal_mbcs = convert_from_grpc(request->source_terminal()); - auto source_terminal = source_terminal_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - auto status = library_->CreateCIPulseChanTicks(task, counter, name_to_assign_to_channel, source_terminal, min_val, max_val); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateCIPulseChanTime(::grpc::ServerContext* context, const CreateCIPulseChanTimeRequest* request, CreateCIPulseChanTimeResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto counter_mbcs = convert_from_grpc(request->counter()); - auto counter = counter_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateCIPulseChanTimeRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateCIPulseChanTimeRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateCIPulseChanTimeRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; - } - } - - auto status = library_->CreateCIPulseChanTime(task, counter, name_to_assign_to_channel, min_val, max_val, units); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + while (true) { + auto status = library_->GetDeviceAttributeDoubleArray(device_name, attribute, nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + uInt32 size = status; + + response->mutable_value()->Resize(size, 0); + float64* value = response->mutable_value()->mutable_data(); + status = library_->GetDeviceAttributeDoubleArray(device_name, attribute, value, size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + return ::grpc::Status::OK; + } + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateCIPulseWidthChan(::grpc::ServerContext* context, const CreateCIPulseWidthChanRequest* request, CreateCIPulseWidthChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto counter_mbcs = convert_from_grpc(request->counter()); - auto counter = counter_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateCIPulseWidthChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateCIPulseWidthChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetDeviceAttributeInt32(::grpc::ServerContext* context, const GetDeviceAttributeInt32Request* request, GetDeviceAttributeInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetDeviceAttributeInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::DeviceInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetDeviceAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::DeviceInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetDeviceAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateCIPulseWidthChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + + int32 value {}; + auto status = library_->GetDeviceAttributeInt32(device_name, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } + response->set_status(status); + auto checked_convert_value = [](auto raw_value) { + bool raw_value_is_valid = nidaqmx_grpc::DeviceInt32AttributeValues_IsValid(raw_value); + auto valid_enum_value = raw_value_is_valid ? raw_value : 0; + return static_cast(valid_enum_value); + }; + response->set_value(checked_convert_value(value)); + response->set_value_raw(value); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } - int32 starting_edge; - switch (request->starting_edge_enum_case()) { - case nidaqmx_grpc::CreateCIPulseWidthChanRequest::StartingEdgeEnumCase::kStartingEdge: { - starting_edge = static_cast(request->starting_edge()); - break; - } - case nidaqmx_grpc::CreateCIPulseWidthChanRequest::StartingEdgeEnumCase::kStartingEdgeRaw: { - starting_edge = static_cast(request->starting_edge_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetDeviceAttributeInt32Array(::grpc::ServerContext* context, const GetDeviceAttributeInt32ArrayRequest* request, GetDeviceAttributeInt32ArrayResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetDeviceAttributeInt32ArrayRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::DeviceInt32ArrayAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetDeviceAttributeInt32ArrayRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::DeviceInt32ArrayAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetDeviceAttributeInt32ArrayRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateCIPulseWidthChanRequest::StartingEdgeEnumCase::STARTING_EDGE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for starting_edge was not specified or out of range"); - break; + + + while (true) { + auto status = library_->GetDeviceAttributeInt32Array(device_name, attribute, nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + uInt32 size = status; + + response->mutable_value_raw()->Resize(size, 0); + int32* value = reinterpret_cast(response->mutable_value_raw()->mutable_data()); + status = library_->GetDeviceAttributeInt32Array(device_name, attribute, value, size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + auto checked_convert_value = [](auto raw_value) { + bool raw_value_is_valid = nidaqmx_grpc::DeviceInt32AttributeValues_IsValid(raw_value); + auto valid_enum_value = raw_value_is_valid ? raw_value : 0; + return static_cast(valid_enum_value); + }; + response->mutable_value()->Clear(); + response->mutable_value()->Reserve(size); + std::transform( + response->value_raw().begin(), + response->value_raw().begin() + size, + google::protobuf::RepeatedFieldBackInserter(response->mutable_value()), + [&](auto x) { + return checked_convert_value(x); + }); + return ::grpc::Status::OK; } } - - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateCIPulseWidthChan(task, counter, name_to_assign_to_channel, min_val, max_val, units, starting_edge, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateCISemiPeriodChan(::grpc::ServerContext* context, const CreateCISemiPeriodChanRequest* request, CreateCISemiPeriodChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto counter_mbcs = convert_from_grpc(request->counter()); - auto counter = counter_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateCISemiPeriodChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateCISemiPeriodChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateCISemiPeriodChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; - } - } - - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateCISemiPeriodChan(task, counter, name_to_assign_to_channel, min_val, max_val, units, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateCITwoEdgeSepChan(::grpc::ServerContext* context, const CreateCITwoEdgeSepChanRequest* request, CreateCITwoEdgeSepChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto counter_mbcs = convert_from_grpc(request->counter()); - auto counter = counter_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateCITwoEdgeSepChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetDeviceAttributeString(::grpc::ServerContext* context, const GetDeviceAttributeStringRequest* request, GetDeviceAttributeStringResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetDeviceAttributeStringRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::DeviceStringAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetDeviceAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::DeviceStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetDeviceAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateCITwoEdgeSepChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; + + + while (true) { + auto status = library_->GetDeviceAttributeString(device_name, attribute, nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + uInt32 size = status; + + std::string value; + if (size > 0) { + value.resize(size - 1); + } + status = library_->GetDeviceAttributeString(device_name, attribute, (char*)value.data(), size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + std::string value_utf8; + convert_to_grpc(value, &value_utf8); + response->set_value(value_utf8); + nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); + return ::grpc::Status::OK; + } + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetDeviceAttributeUInt32(::grpc::ServerContext* context, const GetDeviceAttributeUInt32Request* request, GetDeviceAttributeUInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetDeviceAttributeUInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::DeviceUInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetDeviceAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::DeviceUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetDeviceAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateCITwoEdgeSepChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + + uInt32 value {}; + auto status = library_->GetDeviceAttributeUInt32(device_name, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } + } - int32 first_edge; - switch (request->first_edge_enum_case()) { - case nidaqmx_grpc::CreateCITwoEdgeSepChanRequest::FirstEdgeEnumCase::kFirstEdge: { - first_edge = static_cast(request->first_edge()); - break; - } - case nidaqmx_grpc::CreateCITwoEdgeSepChanRequest::FirstEdgeEnumCase::kFirstEdgeRaw: { - first_edge = static_cast(request->first_edge_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetDeviceAttributeUInt32Array(::grpc::ServerContext* context, const GetDeviceAttributeUInt32ArrayRequest* request, GetDeviceAttributeUInt32ArrayResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetDeviceAttributeUInt32ArrayRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::DeviceUInt32ArrayAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetDeviceAttributeUInt32ArrayRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::DeviceUInt32ArrayAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetDeviceAttributeUInt32ArrayRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateCITwoEdgeSepChanRequest::FirstEdgeEnumCase::FIRST_EDGE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for first_edge was not specified or out of range"); - break; + + + while (true) { + auto status = library_->GetDeviceAttributeUInt32Array(device_name, attribute, nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + uInt32 size = status; + + response->mutable_value()->Resize(size, 0); + uInt32* value = reinterpret_cast(response->mutable_value()->mutable_data()); + status = library_->GetDeviceAttributeUInt32Array(device_name, attribute, value, size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + return ::grpc::Status::OK; } } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } - int32 second_edge; - switch (request->second_edge_enum_case()) { - case nidaqmx_grpc::CreateCITwoEdgeSepChanRequest::SecondEdgeEnumCase::kSecondEdge: { - second_edge = static_cast(request->second_edge()); - break; - } - case nidaqmx_grpc::CreateCITwoEdgeSepChanRequest::SecondEdgeEnumCase::kSecondEdgeRaw: { - second_edge = static_cast(request->second_edge_raw()); - break; - } - case nidaqmx_grpc::CreateCITwoEdgeSepChanRequest::SecondEdgeEnumCase::SECOND_EDGE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for second_edge was not specified or out of range"); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetDigitalLogicFamilyPowerUpState(::grpc::ServerContext* context, const GetDigitalLogicFamilyPowerUpStateRequest* request, GetDigitalLogicFamilyPowerUpStateResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + int32 logic_family {}; + auto status = library_->GetDigitalLogicFamilyPowerUpState(device_name, &logic_family); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } + response->set_status(status); + response->set_logic_family(logic_family); + return ::grpc::Status::OK; } - - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateCITwoEdgeSepChan(task, counter, name_to_assign_to_channel, min_val, max_val, units, first_edge, second_edge, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateCOPulseChanFreq(::grpc::ServerContext* context, const CreateCOPulseChanFreqRequest* request, CreateCOPulseChanFreqResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto counter_mbcs = convert_from_grpc(request->counter()); - auto counter = counter_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateCOPulseChanFreqRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateCOPulseChanFreqRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetDigitalPowerUpStates(::grpc::ServerContext* context, const GetDigitalPowerUpStatesRequest* request, GetDigitalPowerUpStatesResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + auto get_channelName_if = [](const google::protobuf::RepeatedPtrField& vector, int n) -> const char* { + if (vector.size() > n) { + return vector[n].c_str(); + } + return nullptr; + }; + auto channel_name = request->channel_name(); + if (channel_name.size() == 0) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "No values for channelName were specified"); } - case nidaqmx_grpc::CreateCOPulseChanFreqRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + if (channel_name.size() > 96) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "More than 96 values for channelName were specified"); } - } - int32 idle_state; - switch (request->idle_state_enum_case()) { - case nidaqmx_grpc::CreateCOPulseChanFreqRequest::IdleStateEnumCase::kIdleState: { - idle_state = static_cast(request->idle_state()); - break; - } - case nidaqmx_grpc::CreateCOPulseChanFreqRequest::IdleStateEnumCase::kIdleStateRaw: { - idle_state = static_cast(request->idle_state_raw()); - break; + auto get_state_if = [](std::vector& vector, int n) -> int32* { + if (vector.size() > n) { + return &(vector[n]); + } + return nullptr; + }; + std::vector stateVector; + stateVector.resize(channel_name.size()); + auto status = std::static_pointer_cast(library_)->GetDigitalPowerUpStates(device_name, get_channelName_if(channel_name, 0), get_state_if(stateVector, 0), get_channelName_if(channel_name, 1), get_state_if(stateVector, 1), get_channelName_if(channel_name, 2), get_state_if(stateVector, 2), get_channelName_if(channel_name, 3), get_state_if(stateVector, 3), get_channelName_if(channel_name, 4), get_state_if(stateVector, 4), get_channelName_if(channel_name, 5), get_state_if(stateVector, 5), get_channelName_if(channel_name, 6), get_state_if(stateVector, 6), get_channelName_if(channel_name, 7), get_state_if(stateVector, 7), get_channelName_if(channel_name, 8), get_state_if(stateVector, 8), get_channelName_if(channel_name, 9), get_state_if(stateVector, 9), get_channelName_if(channel_name, 10), get_state_if(stateVector, 10), get_channelName_if(channel_name, 11), get_state_if(stateVector, 11), get_channelName_if(channel_name, 12), get_state_if(stateVector, 12), get_channelName_if(channel_name, 13), get_state_if(stateVector, 13), get_channelName_if(channel_name, 14), get_state_if(stateVector, 14), get_channelName_if(channel_name, 15), get_state_if(stateVector, 15), get_channelName_if(channel_name, 16), get_state_if(stateVector, 16), get_channelName_if(channel_name, 17), get_state_if(stateVector, 17), get_channelName_if(channel_name, 18), get_state_if(stateVector, 18), get_channelName_if(channel_name, 19), get_state_if(stateVector, 19), get_channelName_if(channel_name, 20), get_state_if(stateVector, 20), get_channelName_if(channel_name, 21), get_state_if(stateVector, 21), get_channelName_if(channel_name, 22), get_state_if(stateVector, 22), get_channelName_if(channel_name, 23), get_state_if(stateVector, 23), get_channelName_if(channel_name, 24), get_state_if(stateVector, 24), get_channelName_if(channel_name, 25), get_state_if(stateVector, 25), get_channelName_if(channel_name, 26), get_state_if(stateVector, 26), get_channelName_if(channel_name, 27), get_state_if(stateVector, 27), get_channelName_if(channel_name, 28), get_state_if(stateVector, 28), get_channelName_if(channel_name, 29), get_state_if(stateVector, 29), get_channelName_if(channel_name, 30), get_state_if(stateVector, 30), get_channelName_if(channel_name, 31), get_state_if(stateVector, 31), get_channelName_if(channel_name, 32), get_state_if(stateVector, 32), get_channelName_if(channel_name, 33), get_state_if(stateVector, 33), get_channelName_if(channel_name, 34), get_state_if(stateVector, 34), get_channelName_if(channel_name, 35), get_state_if(stateVector, 35), get_channelName_if(channel_name, 36), get_state_if(stateVector, 36), get_channelName_if(channel_name, 37), get_state_if(stateVector, 37), get_channelName_if(channel_name, 38), get_state_if(stateVector, 38), get_channelName_if(channel_name, 39), get_state_if(stateVector, 39), get_channelName_if(channel_name, 40), get_state_if(stateVector, 40), get_channelName_if(channel_name, 41), get_state_if(stateVector, 41), get_channelName_if(channel_name, 42), get_state_if(stateVector, 42), get_channelName_if(channel_name, 43), get_state_if(stateVector, 43), get_channelName_if(channel_name, 44), get_state_if(stateVector, 44), get_channelName_if(channel_name, 45), get_state_if(stateVector, 45), get_channelName_if(channel_name, 46), get_state_if(stateVector, 46), get_channelName_if(channel_name, 47), get_state_if(stateVector, 47), get_channelName_if(channel_name, 48), get_state_if(stateVector, 48), get_channelName_if(channel_name, 49), get_state_if(stateVector, 49), get_channelName_if(channel_name, 50), get_state_if(stateVector, 50), get_channelName_if(channel_name, 51), get_state_if(stateVector, 51), get_channelName_if(channel_name, 52), get_state_if(stateVector, 52), get_channelName_if(channel_name, 53), get_state_if(stateVector, 53), get_channelName_if(channel_name, 54), get_state_if(stateVector, 54), get_channelName_if(channel_name, 55), get_state_if(stateVector, 55), get_channelName_if(channel_name, 56), get_state_if(stateVector, 56), get_channelName_if(channel_name, 57), get_state_if(stateVector, 57), get_channelName_if(channel_name, 58), get_state_if(stateVector, 58), get_channelName_if(channel_name, 59), get_state_if(stateVector, 59), get_channelName_if(channel_name, 60), get_state_if(stateVector, 60), get_channelName_if(channel_name, 61), get_state_if(stateVector, 61), get_channelName_if(channel_name, 62), get_state_if(stateVector, 62), get_channelName_if(channel_name, 63), get_state_if(stateVector, 63), get_channelName_if(channel_name, 64), get_state_if(stateVector, 64), get_channelName_if(channel_name, 65), get_state_if(stateVector, 65), get_channelName_if(channel_name, 66), get_state_if(stateVector, 66), get_channelName_if(channel_name, 67), get_state_if(stateVector, 67), get_channelName_if(channel_name, 68), get_state_if(stateVector, 68), get_channelName_if(channel_name, 69), get_state_if(stateVector, 69), get_channelName_if(channel_name, 70), get_state_if(stateVector, 70), get_channelName_if(channel_name, 71), get_state_if(stateVector, 71), get_channelName_if(channel_name, 72), get_state_if(stateVector, 72), get_channelName_if(channel_name, 73), get_state_if(stateVector, 73), get_channelName_if(channel_name, 74), get_state_if(stateVector, 74), get_channelName_if(channel_name, 75), get_state_if(stateVector, 75), get_channelName_if(channel_name, 76), get_state_if(stateVector, 76), get_channelName_if(channel_name, 77), get_state_if(stateVector, 77), get_channelName_if(channel_name, 78), get_state_if(stateVector, 78), get_channelName_if(channel_name, 79), get_state_if(stateVector, 79), get_channelName_if(channel_name, 80), get_state_if(stateVector, 80), get_channelName_if(channel_name, 81), get_state_if(stateVector, 81), get_channelName_if(channel_name, 82), get_state_if(stateVector, 82), get_channelName_if(channel_name, 83), get_state_if(stateVector, 83), get_channelName_if(channel_name, 84), get_state_if(stateVector, 84), get_channelName_if(channel_name, 85), get_state_if(stateVector, 85), get_channelName_if(channel_name, 86), get_state_if(stateVector, 86), get_channelName_if(channel_name, 87), get_state_if(stateVector, 87), get_channelName_if(channel_name, 88), get_state_if(stateVector, 88), get_channelName_if(channel_name, 89), get_state_if(stateVector, 89), get_channelName_if(channel_name, 90), get_state_if(stateVector, 90), get_channelName_if(channel_name, 91), get_state_if(stateVector, 91), get_channelName_if(channel_name, 92), get_state_if(stateVector, 92), get_channelName_if(channel_name, 93), get_state_if(stateVector, 93), get_channelName_if(channel_name, 94), get_state_if(stateVector, 94), get_channelName_if(channel_name, 95), get_state_if(stateVector, 95), get_channelName_if(channel_name, 96), get_state_if(stateVector, 96)); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } - case nidaqmx_grpc::CreateCOPulseChanFreqRequest::IdleStateEnumCase::IDLE_STATE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for idle_state was not specified or out of range"); - break; + response->set_status(status); + for (int i = 0; i < stateVector.size(); ++i) { + response->add_power_up_states(static_cast(stateVector[i])); } + return ::grpc::Status::OK; } - - float64 initial_delay = request->initial_delay(); - float64 freq = request->freq(); - float64 duty_cycle = request->duty_cycle(); - auto status = library_->CreateCOPulseChanFreq(task, counter, name_to_assign_to_channel, units, idle_state, initial_delay, freq, duty_cycle); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateCOPulseChanTicks(::grpc::ServerContext* context, const CreateCOPulseChanTicksRequest* request, CreateCOPulseChanTicksResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto counter_mbcs = convert_from_grpc(request->counter()); - auto counter = counter_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - auto source_terminal_mbcs = convert_from_grpc(request->source_terminal()); - auto source_terminal = source_terminal_mbcs.c_str(); - int32 idle_state; - switch (request->idle_state_enum_case()) { - case nidaqmx_grpc::CreateCOPulseChanTicksRequest::IdleStateEnumCase::kIdleState: { - idle_state = static_cast(request->idle_state()); - break; - } - case nidaqmx_grpc::CreateCOPulseChanTicksRequest::IdleStateEnumCase::kIdleStateRaw: { - idle_state = static_cast(request->idle_state_raw()); - break; - } - case nidaqmx_grpc::CreateCOPulseChanTicksRequest::IdleStateEnumCase::IDLE_STATE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for idle_state was not specified or out of range"); - break; - } - } - - int32 initial_delay = request->initial_delay(); - int32 low_ticks = request->low_ticks(); - int32 high_ticks = request->high_ticks(); - auto status = library_->CreateCOPulseChanTicks(task, counter, name_to_assign_to_channel, source_terminal, idle_state, initial_delay, low_ticks, high_ticks); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateCOPulseChanTime(::grpc::ServerContext* context, const CreateCOPulseChanTimeRequest* request, CreateCOPulseChanTimeResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto counter_mbcs = convert_from_grpc(request->counter()); - auto counter = counter_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateCOPulseChanTimeRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateCOPulseChanTimeRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetDigitalPullUpPullDownStates(::grpc::ServerContext* context, const GetDigitalPullUpPullDownStatesRequest* request, GetDigitalPullUpPullDownStatesResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + auto get_channelName_if = [](const google::protobuf::RepeatedPtrField& vector, int n) -> const char* { + if (vector.size() > n) { + return vector[n].c_str(); + } + return nullptr; + }; + auto channel_name = request->channel_name(); + if (channel_name.size() == 0) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "No values for channelName were specified"); } - case nidaqmx_grpc::CreateCOPulseChanTimeRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + if (channel_name.size() > 96) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "More than 96 values for channelName were specified"); } - } - int32 idle_state; - switch (request->idle_state_enum_case()) { - case nidaqmx_grpc::CreateCOPulseChanTimeRequest::IdleStateEnumCase::kIdleState: { - idle_state = static_cast(request->idle_state()); - break; - } - case nidaqmx_grpc::CreateCOPulseChanTimeRequest::IdleStateEnumCase::kIdleStateRaw: { - idle_state = static_cast(request->idle_state_raw()); - break; + auto get_state_if = [](std::vector& vector, int n) -> int32* { + if (vector.size() > n) { + return &(vector[n]); + } + return nullptr; + }; + std::vector stateVector; + stateVector.resize(channel_name.size()); + auto status = std::static_pointer_cast(library_)->GetDigitalPullUpPullDownStates(device_name, get_channelName_if(channel_name, 0), get_state_if(stateVector, 0), get_channelName_if(channel_name, 1), get_state_if(stateVector, 1), get_channelName_if(channel_name, 2), get_state_if(stateVector, 2), get_channelName_if(channel_name, 3), get_state_if(stateVector, 3), get_channelName_if(channel_name, 4), get_state_if(stateVector, 4), get_channelName_if(channel_name, 5), get_state_if(stateVector, 5), get_channelName_if(channel_name, 6), get_state_if(stateVector, 6), get_channelName_if(channel_name, 7), get_state_if(stateVector, 7), get_channelName_if(channel_name, 8), get_state_if(stateVector, 8), get_channelName_if(channel_name, 9), get_state_if(stateVector, 9), get_channelName_if(channel_name, 10), get_state_if(stateVector, 10), get_channelName_if(channel_name, 11), get_state_if(stateVector, 11), get_channelName_if(channel_name, 12), get_state_if(stateVector, 12), get_channelName_if(channel_name, 13), get_state_if(stateVector, 13), get_channelName_if(channel_name, 14), get_state_if(stateVector, 14), get_channelName_if(channel_name, 15), get_state_if(stateVector, 15), get_channelName_if(channel_name, 16), get_state_if(stateVector, 16), get_channelName_if(channel_name, 17), get_state_if(stateVector, 17), get_channelName_if(channel_name, 18), get_state_if(stateVector, 18), get_channelName_if(channel_name, 19), get_state_if(stateVector, 19), get_channelName_if(channel_name, 20), get_state_if(stateVector, 20), get_channelName_if(channel_name, 21), get_state_if(stateVector, 21), get_channelName_if(channel_name, 22), get_state_if(stateVector, 22), get_channelName_if(channel_name, 23), get_state_if(stateVector, 23), get_channelName_if(channel_name, 24), get_state_if(stateVector, 24), get_channelName_if(channel_name, 25), get_state_if(stateVector, 25), get_channelName_if(channel_name, 26), get_state_if(stateVector, 26), get_channelName_if(channel_name, 27), get_state_if(stateVector, 27), get_channelName_if(channel_name, 28), get_state_if(stateVector, 28), get_channelName_if(channel_name, 29), get_state_if(stateVector, 29), get_channelName_if(channel_name, 30), get_state_if(stateVector, 30), get_channelName_if(channel_name, 31), get_state_if(stateVector, 31), get_channelName_if(channel_name, 32), get_state_if(stateVector, 32), get_channelName_if(channel_name, 33), get_state_if(stateVector, 33), get_channelName_if(channel_name, 34), get_state_if(stateVector, 34), get_channelName_if(channel_name, 35), get_state_if(stateVector, 35), get_channelName_if(channel_name, 36), get_state_if(stateVector, 36), get_channelName_if(channel_name, 37), get_state_if(stateVector, 37), get_channelName_if(channel_name, 38), get_state_if(stateVector, 38), get_channelName_if(channel_name, 39), get_state_if(stateVector, 39), get_channelName_if(channel_name, 40), get_state_if(stateVector, 40), get_channelName_if(channel_name, 41), get_state_if(stateVector, 41), get_channelName_if(channel_name, 42), get_state_if(stateVector, 42), get_channelName_if(channel_name, 43), get_state_if(stateVector, 43), get_channelName_if(channel_name, 44), get_state_if(stateVector, 44), get_channelName_if(channel_name, 45), get_state_if(stateVector, 45), get_channelName_if(channel_name, 46), get_state_if(stateVector, 46), get_channelName_if(channel_name, 47), get_state_if(stateVector, 47), get_channelName_if(channel_name, 48), get_state_if(stateVector, 48), get_channelName_if(channel_name, 49), get_state_if(stateVector, 49), get_channelName_if(channel_name, 50), get_state_if(stateVector, 50), get_channelName_if(channel_name, 51), get_state_if(stateVector, 51), get_channelName_if(channel_name, 52), get_state_if(stateVector, 52), get_channelName_if(channel_name, 53), get_state_if(stateVector, 53), get_channelName_if(channel_name, 54), get_state_if(stateVector, 54), get_channelName_if(channel_name, 55), get_state_if(stateVector, 55), get_channelName_if(channel_name, 56), get_state_if(stateVector, 56), get_channelName_if(channel_name, 57), get_state_if(stateVector, 57), get_channelName_if(channel_name, 58), get_state_if(stateVector, 58), get_channelName_if(channel_name, 59), get_state_if(stateVector, 59), get_channelName_if(channel_name, 60), get_state_if(stateVector, 60), get_channelName_if(channel_name, 61), get_state_if(stateVector, 61), get_channelName_if(channel_name, 62), get_state_if(stateVector, 62), get_channelName_if(channel_name, 63), get_state_if(stateVector, 63), get_channelName_if(channel_name, 64), get_state_if(stateVector, 64), get_channelName_if(channel_name, 65), get_state_if(stateVector, 65), get_channelName_if(channel_name, 66), get_state_if(stateVector, 66), get_channelName_if(channel_name, 67), get_state_if(stateVector, 67), get_channelName_if(channel_name, 68), get_state_if(stateVector, 68), get_channelName_if(channel_name, 69), get_state_if(stateVector, 69), get_channelName_if(channel_name, 70), get_state_if(stateVector, 70), get_channelName_if(channel_name, 71), get_state_if(stateVector, 71), get_channelName_if(channel_name, 72), get_state_if(stateVector, 72), get_channelName_if(channel_name, 73), get_state_if(stateVector, 73), get_channelName_if(channel_name, 74), get_state_if(stateVector, 74), get_channelName_if(channel_name, 75), get_state_if(stateVector, 75), get_channelName_if(channel_name, 76), get_state_if(stateVector, 76), get_channelName_if(channel_name, 77), get_state_if(stateVector, 77), get_channelName_if(channel_name, 78), get_state_if(stateVector, 78), get_channelName_if(channel_name, 79), get_state_if(stateVector, 79), get_channelName_if(channel_name, 80), get_state_if(stateVector, 80), get_channelName_if(channel_name, 81), get_state_if(stateVector, 81), get_channelName_if(channel_name, 82), get_state_if(stateVector, 82), get_channelName_if(channel_name, 83), get_state_if(stateVector, 83), get_channelName_if(channel_name, 84), get_state_if(stateVector, 84), get_channelName_if(channel_name, 85), get_state_if(stateVector, 85), get_channelName_if(channel_name, 86), get_state_if(stateVector, 86), get_channelName_if(channel_name, 87), get_state_if(stateVector, 87), get_channelName_if(channel_name, 88), get_state_if(stateVector, 88), get_channelName_if(channel_name, 89), get_state_if(stateVector, 89), get_channelName_if(channel_name, 90), get_state_if(stateVector, 90), get_channelName_if(channel_name, 91), get_state_if(stateVector, 91), get_channelName_if(channel_name, 92), get_state_if(stateVector, 92), get_channelName_if(channel_name, 93), get_state_if(stateVector, 93), get_channelName_if(channel_name, 94), get_state_if(stateVector, 94), get_channelName_if(channel_name, 95), get_state_if(stateVector, 95), get_channelName_if(channel_name, 96), get_state_if(stateVector, 96)); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } - case nidaqmx_grpc::CreateCOPulseChanTimeRequest::IdleStateEnumCase::IDLE_STATE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for idle_state was not specified or out of range"); - break; + response->set_status(status); + for (int i = 0; i < stateVector.size(); ++i) { + response->add_pull_up_pull_down_states(static_cast(stateVector[i])); } + return ::grpc::Status::OK; } - - float64 initial_delay = request->initial_delay(); - float64 low_time = request->low_time(); - float64 high_time = request->high_time(); - auto status = library_->CreateCOPulseChanTime(task, counter, name_to_assign_to_channel, units, idle_state, initial_delay, low_time, high_time); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateDIChan(::grpc::ServerContext* context, const CreateDIChanRequest* request, CreateDIChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto lines_mbcs = convert_from_grpc(request->lines()); - auto lines = lines_mbcs.c_str(); - auto name_to_assign_to_lines_mbcs = convert_from_grpc(request->name_to_assign_to_lines()); - auto name_to_assign_to_lines = name_to_assign_to_lines_mbcs.c_str(); - int32 line_grouping; - switch (request->line_grouping_enum_case()) { - case nidaqmx_grpc::CreateDIChanRequest::LineGroupingEnumCase::kLineGrouping: { - line_grouping = static_cast(request->line_grouping()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetDisconnectedCDAQSyncPorts(::grpc::ServerContext* context, const GetDisconnectedCDAQSyncPortsRequest* request, GetDisconnectedCDAQSyncPortsResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + + while (true) { + auto status = library_->GetDisconnectedCDAQSyncPorts(nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + uInt32 port_list_size = status; + + std::string port_list; + if (port_list_size > 0) { + port_list.resize(port_list_size - 1); + } + status = library_->GetDisconnectedCDAQSyncPorts((char*)port_list.data(), port_list_size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(port_list_size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + std::string port_list_utf8; + convert_to_grpc(port_list, &port_list_utf8); + response->set_port_list(port_list_utf8); + nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_port_list())); + return ::grpc::Status::OK; } - case nidaqmx_grpc::CreateDIChanRequest::LineGroupingEnumCase::kLineGroupingRaw: { - line_grouping = static_cast(request->line_grouping_raw()); - break; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetErrorString(::grpc::ServerContext* context, const GetErrorStringRequest* request, GetErrorStringResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + int32 error_code = request->error_code(); + + while (true) { + auto status = library_->GetErrorString(error_code, nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + uInt32 buffer_size = status; + + std::string error_string; + if (buffer_size > 0) { + error_string.resize(buffer_size - 1); + } + status = library_->GetErrorString(error_code, (char*)error_string.data(), buffer_size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(buffer_size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + std::string error_string_utf8; + convert_to_grpc(error_string, &error_string_utf8); + response->set_error_string(error_string_utf8); + nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_error_string())); + return ::grpc::Status::OK; + } + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetExportedSignalAttributeBool(::grpc::ServerContext* context, const GetExportedSignalAttributeBoolRequest* request, GetExportedSignalAttributeBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetExportedSignalAttributeBoolRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ExportSignalBoolAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetExportedSignalAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ExportSignalBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetExportedSignalAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateDIChanRequest::LineGroupingEnumCase::LINE_GROUPING_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for line_grouping was not specified or out of range"); - break; + + bool32 value {}; + auto status = library_->GetExportedSignalAttributeBool(task, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; } - - auto status = library_->CreateDIChan(task, lines, name_to_assign_to_lines, line_grouping); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateDOChan(::grpc::ServerContext* context, const CreateDOChanRequest* request, CreateDOChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto lines_mbcs = convert_from_grpc(request->lines()); - auto lines = lines_mbcs.c_str(); - auto name_to_assign_to_lines_mbcs = convert_from_grpc(request->name_to_assign_to_lines()); - auto name_to_assign_to_lines = name_to_assign_to_lines_mbcs.c_str(); - int32 line_grouping; - switch (request->line_grouping_enum_case()) { - case nidaqmx_grpc::CreateDOChanRequest::LineGroupingEnumCase::kLineGrouping: { - line_grouping = static_cast(request->line_grouping()); - break; - } - case nidaqmx_grpc::CreateDOChanRequest::LineGroupingEnumCase::kLineGroupingRaw: { - line_grouping = static_cast(request->line_grouping_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetExportedSignalAttributeDouble(::grpc::ServerContext* context, const GetExportedSignalAttributeDoubleRequest* request, GetExportedSignalAttributeDoubleResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetExportedSignalAttributeDoubleRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ExportSignalDoubleAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetExportedSignalAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ExportSignalDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetExportedSignalAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateDOChanRequest::LineGroupingEnumCase::LINE_GROUPING_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for line_grouping was not specified or out of range"); - break; + + float64 value {}; + auto status = library_->GetExportedSignalAttributeDouble(task, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; } - - auto status = library_->CreateDOChan(task, lines, name_to_assign_to_lines, line_grouping); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateLinScale(::grpc::ServerContext* context, const CreateLinScaleRequest* request, CreateLinScaleResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto name_mbcs = convert_from_grpc(request->name()); - auto name = name_mbcs.c_str(); - float64 slope = request->slope(); - float64 y_intercept = request->y_intercept(); - int32 pre_scaled_units; - switch (request->pre_scaled_units_enum_case()) { - case nidaqmx_grpc::CreateLinScaleRequest::PreScaledUnitsEnumCase::kPreScaledUnits: { - pre_scaled_units = static_cast(request->pre_scaled_units()); - break; - } - case nidaqmx_grpc::CreateLinScaleRequest::PreScaledUnitsEnumCase::kPreScaledUnitsRaw: { - pre_scaled_units = static_cast(request->pre_scaled_units_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetExportedSignalAttributeInt32(::grpc::ServerContext* context, const GetExportedSignalAttributeInt32Request* request, GetExportedSignalAttributeInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetExportedSignalAttributeInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ExportSignalInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetExportedSignalAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ExportSignalInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetExportedSignalAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateLinScaleRequest::PreScaledUnitsEnumCase::PRE_SCALED_UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for pre_scaled_units was not specified or out of range"); - break; + + int32 value {}; + auto status = library_->GetExportedSignalAttributeInt32(task, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + auto checked_convert_value = [](auto raw_value) { + bool raw_value_is_valid = nidaqmx_grpc::ExportSignalInt32AttributeValues_IsValid(raw_value); + auto valid_enum_value = raw_value_is_valid ? raw_value : 0; + return static_cast(valid_enum_value); + }; + response->set_value(checked_convert_value(value)); + response->set_value_raw(value); + return ::grpc::Status::OK; } - - auto scaled_units_mbcs = convert_from_grpc(request->scaled_units()); - auto scaled_units = scaled_units_mbcs.c_str(); - auto status = library_->CreateLinScale(name, slope, y_intercept, pre_scaled_units, scaled_units); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateMapScale(::grpc::ServerContext* context, const CreateMapScaleRequest* request, CreateMapScaleResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto name_mbcs = convert_from_grpc(request->name()); - auto name = name_mbcs.c_str(); - float64 prescaled_min = request->prescaled_min(); - float64 prescaled_max = request->prescaled_max(); - float64 scaled_min = request->scaled_min(); - float64 scaled_max = request->scaled_max(); - int32 pre_scaled_units; - switch (request->pre_scaled_units_enum_case()) { - case nidaqmx_grpc::CreateMapScaleRequest::PreScaledUnitsEnumCase::kPreScaledUnits: { - pre_scaled_units = static_cast(request->pre_scaled_units()); - break; - } - case nidaqmx_grpc::CreateMapScaleRequest::PreScaledUnitsEnumCase::kPreScaledUnitsRaw: { - pre_scaled_units = static_cast(request->pre_scaled_units_raw()); - break; - } - case nidaqmx_grpc::CreateMapScaleRequest::PreScaledUnitsEnumCase::PRE_SCALED_UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for pre_scaled_units was not specified or out of range"); - break; - } - } - - auto scaled_units_mbcs = convert_from_grpc(request->scaled_units()); - auto scaled_units = scaled_units_mbcs.c_str(); - auto status = library_->CreateMapScale(name, prescaled_min, prescaled_max, scaled_min, scaled_max, pre_scaled_units, scaled_units); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetExportedSignalAttributeString(::grpc::ServerContext* context, const GetExportedSignalAttributeStringRequest* request, GetExportedSignalAttributeStringResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetExportedSignalAttributeStringRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ExportSignalStringAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetExportedSignalAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ExportSignalStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetExportedSignalAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreatePolynomialScale(::grpc::ServerContext* context, const CreatePolynomialScaleRequest* request, CreatePolynomialScaleResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto name_mbcs = convert_from_grpc(request->name()); - auto name = name_mbcs.c_str(); - auto forward_coeffs = const_cast(request->forward_coeffs().data()); - uInt32 num_forward_coeffs_in = static_cast(request->forward_coeffs().size()); - auto reverse_coeffs = const_cast(request->reverse_coeffs().data()); - uInt32 num_reverse_coeffs_in = static_cast(request->reverse_coeffs().size()); - int32 pre_scaled_units; - switch (request->pre_scaled_units_enum_case()) { - case nidaqmx_grpc::CreatePolynomialScaleRequest::PreScaledUnitsEnumCase::kPreScaledUnits: { - pre_scaled_units = static_cast(request->pre_scaled_units()); - break; - } - case nidaqmx_grpc::CreatePolynomialScaleRequest::PreScaledUnitsEnumCase::kPreScaledUnitsRaw: { - pre_scaled_units = static_cast(request->pre_scaled_units_raw()); - break; - } - case nidaqmx_grpc::CreatePolynomialScaleRequest::PreScaledUnitsEnumCase::PRE_SCALED_UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for pre_scaled_units was not specified or out of range"); - break; - } - } - - auto scaled_units_mbcs = convert_from_grpc(request->scaled_units()); - auto scaled_units = scaled_units_mbcs.c_str(); - auto status = library_->CreatePolynomialScale(name, forward_coeffs, num_forward_coeffs_in, reverse_coeffs, num_reverse_coeffs_in, pre_scaled_units, scaled_units); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateTEDSAIAccelChan(::grpc::ServerContext* context, const CreateTEDSAIAccelChanRequest* request, CreateTEDSAIAccelChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - int32 terminal_config; - switch (request->terminal_config_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIAccelChanRequest::TerminalConfigEnumCase::kTerminalConfig: { - terminal_config = static_cast(request->terminal_config()); - break; - } - case nidaqmx_grpc::CreateTEDSAIAccelChanRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { - terminal_config = static_cast(request->terminal_config_raw()); - break; - } - case nidaqmx_grpc::CreateTEDSAIAccelChanRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); - break; - } - } + while (true) { + auto status = library_->GetExportedSignalAttributeString(task, attribute, nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + uInt32 size = status; - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIAccelChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateTEDSAIAccelChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateTEDSAIAccelChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + std::string value; + if (size > 0) { + value.resize(size - 1); + } + status = library_->GetExportedSignalAttributeString(task, attribute, (char*)value.data(), size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + std::string value_utf8; + convert_to_grpc(value, &value_utf8); + response->set_value(value_utf8); + nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); + return ::grpc::Status::OK; + } + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetExportedSignalAttributeUInt32(::grpc::ServerContext* context, const GetExportedSignalAttributeUInt32Request* request, GetExportedSignalAttributeUInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetExportedSignalAttributeUInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ExportSignalUInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetExportedSignalAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ExportSignalUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetExportedSignalAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - } - int32 current_excit_source; - switch (request->current_excit_source_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIAccelChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSource: { - current_excit_source = static_cast(request->current_excit_source()); - break; - } - case nidaqmx_grpc::CreateTEDSAIAccelChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSourceRaw: { - current_excit_source = static_cast(request->current_excit_source_raw()); - break; - } - case nidaqmx_grpc::CreateTEDSAIAccelChanRequest::CurrentExcitSourceEnumCase::CURRENT_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for current_excit_source was not specified or out of range"); - break; + uInt32 value {}; + auto status = library_->GetExportedSignalAttributeUInt32(task, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; } - - float64 current_excit_val = request->current_excit_val(); - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateTEDSAIAccelChan(task, physical_channel, name_to_assign_to_channel, terminal_config, min_val, max_val, units, current_excit_source, current_excit_val, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateTEDSAIBridgeChan(::grpc::ServerContext* context, const CreateTEDSAIBridgeChanRequest* request, CreateTEDSAIBridgeChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIBridgeChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateTEDSAIBridgeChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateTEDSAIBridgeChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; - } - } - - int32 voltage_excit_source; - switch (request->voltage_excit_source_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIBridgeChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { - voltage_excit_source = static_cast(request->voltage_excit_source()); - break; - } - case nidaqmx_grpc::CreateTEDSAIBridgeChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { - voltage_excit_source = static_cast(request->voltage_excit_source_raw()); - break; - } - case nidaqmx_grpc::CreateTEDSAIBridgeChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); - break; - } - } - - float64 voltage_excit_val = request->voltage_excit_val(); - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateTEDSAIBridgeChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, voltage_excit_source, voltage_excit_val, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateTEDSAICurrentChan(::grpc::ServerContext* context, const CreateTEDSAICurrentChanRequest* request, CreateTEDSAICurrentChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - int32 terminal_config; - switch (request->terminal_config_enum_case()) { - case nidaqmx_grpc::CreateTEDSAICurrentChanRequest::TerminalConfigEnumCase::kTerminalConfig: { - terminal_config = static_cast(request->terminal_config()); - break; - } - case nidaqmx_grpc::CreateTEDSAICurrentChanRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { - terminal_config = static_cast(request->terminal_config_raw()); - break; - } - case nidaqmx_grpc::CreateTEDSAICurrentChanRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetExtCalLastDateAndTime(::grpc::ServerContext* context, const GetExtCalLastDateAndTimeRequest* request, GetExtCalLastDateAndTimeResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateTEDSAICurrentChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateTEDSAICurrentChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateTEDSAICurrentChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + uInt32 year {}; + uInt32 month {}; + uInt32 day {}; + uInt32 hour {}; + uInt32 minute {}; + auto status = library_->GetExtCalLastDateAndTime(device_name, &year, &month, &day, &hour, &minute); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } + response->set_status(status); + response->set_year(year); + response->set_month(month); + response->set_day(day); + response->set_hour(hour); + response->set_minute(minute); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } + } - int32 shunt_resistor_loc; - switch (request->shunt_resistor_loc_enum_case()) { - case nidaqmx_grpc::CreateTEDSAICurrentChanRequest::ShuntResistorLocEnumCase::kShuntResistorLoc: { - shunt_resistor_loc = static_cast(request->shunt_resistor_loc()); - break; - } - case nidaqmx_grpc::CreateTEDSAICurrentChanRequest::ShuntResistorLocEnumCase::kShuntResistorLocRaw: { - shunt_resistor_loc = static_cast(request->shunt_resistor_loc_raw()); - break; - } - case nidaqmx_grpc::CreateTEDSAICurrentChanRequest::ShuntResistorLocEnumCase::SHUNT_RESISTOR_LOC_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for shunt_resistor_loc was not specified or out of range"); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetFirstSampClkWhen(::grpc::ServerContext* context, const GetFirstSampClkWhenRequest* request, GetFirstSampClkWhenResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + CVIAbsoluteTime data {}; + auto status = library_->GetFirstSampClkWhen(task, &data); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + convert_to_grpc(data, response->mutable_data()); + return ::grpc::Status::OK; } - - float64 ext_shunt_resistor_val = request->ext_shunt_resistor_val(); - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateTEDSAICurrentChan(task, physical_channel, name_to_assign_to_channel, terminal_config, min_val, max_val, units, shunt_resistor_loc, ext_shunt_resistor_val, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateTEDSAIForceBridgeChan(::grpc::ServerContext* context, const CreateTEDSAIForceBridgeChanRequest* request, CreateTEDSAIForceBridgeChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIForceBridgeChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateTEDSAIForceBridgeChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateTEDSAIForceBridgeChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; - } - } - - int32 voltage_excit_source; - switch (request->voltage_excit_source_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIForceBridgeChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { - voltage_excit_source = static_cast(request->voltage_excit_source()); - break; - } - case nidaqmx_grpc::CreateTEDSAIForceBridgeChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { - voltage_excit_source = static_cast(request->voltage_excit_source_raw()); - break; - } - case nidaqmx_grpc::CreateTEDSAIForceBridgeChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); - break; - } - } - - float64 voltage_excit_val = request->voltage_excit_val(); - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateTEDSAIForceBridgeChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, voltage_excit_source, voltage_excit_val, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateTEDSAIForceIEPEChan(::grpc::ServerContext* context, const CreateTEDSAIForceIEPEChanRequest* request, CreateTEDSAIForceIEPEChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - int32 terminal_config; - switch (request->terminal_config_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIForceIEPEChanRequest::TerminalConfigEnumCase::kTerminalConfig: { - terminal_config = static_cast(request->terminal_config()); - break; - } - case nidaqmx_grpc::CreateTEDSAIForceIEPEChanRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { - terminal_config = static_cast(request->terminal_config_raw()); - break; - } - case nidaqmx_grpc::CreateTEDSAIForceIEPEChanRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetFirstSampTimestampVal(::grpc::ServerContext* context, const GetFirstSampTimestampValRequest* request, GetFirstSampTimestampValResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + CVIAbsoluteTime data {}; + auto status = library_->GetFirstSampTimestampVal(task, &data); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + convert_to_grpc(data, response->mutable_data()); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } + } - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIForceIEPEChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateTEDSAIForceIEPEChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateTEDSAIForceIEPEChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetNthTaskChannel(::grpc::ServerContext* context, const GetNthTaskChannelRequest* request, GetNthTaskChannelResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + uInt32 index = request->index(); - int32 current_excit_source; - switch (request->current_excit_source_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIForceIEPEChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSource: { - current_excit_source = static_cast(request->current_excit_source()); - break; - } - case nidaqmx_grpc::CreateTEDSAIForceIEPEChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSourceRaw: { - current_excit_source = static_cast(request->current_excit_source_raw()); - break; - } - case nidaqmx_grpc::CreateTEDSAIForceIEPEChanRequest::CurrentExcitSourceEnumCase::CURRENT_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for current_excit_source was not specified or out of range"); - break; + while (true) { + auto status = library_->GetNthTaskChannel(task, index, nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + int32 buffer_size = status; + + std::string buffer; + if (buffer_size > 0) { + buffer.resize(buffer_size - 1); + } + status = library_->GetNthTaskChannel(task, index, (char*)buffer.data(), buffer_size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(buffer_size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + std::string buffer_utf8; + convert_to_grpc(buffer, &buffer_utf8); + response->set_buffer(buffer_utf8); + nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_buffer())); + return ::grpc::Status::OK; } } - - float64 current_excit_val = request->current_excit_val(); - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateTEDSAIForceIEPEChan(task, physical_channel, name_to_assign_to_channel, terminal_config, min_val, max_val, units, current_excit_source, current_excit_val, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateTEDSAIMicrophoneChan(::grpc::ServerContext* context, const CreateTEDSAIMicrophoneChanRequest* request, CreateTEDSAIMicrophoneChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - int32 terminal_config; - switch (request->terminal_config_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIMicrophoneChanRequest::TerminalConfigEnumCase::kTerminalConfig: { - terminal_config = static_cast(request->terminal_config()); - break; - } - case nidaqmx_grpc::CreateTEDSAIMicrophoneChanRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { - terminal_config = static_cast(request->terminal_config_raw()); - break; - } - case nidaqmx_grpc::CreateTEDSAIMicrophoneChanRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetNthTaskDevice(::grpc::ServerContext* context, const GetNthTaskDeviceRequest* request, GetNthTaskDeviceResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + uInt32 index = request->index(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIMicrophoneChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateTEDSAIMicrophoneChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateTEDSAIMicrophoneChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; - } - } + while (true) { + auto status = library_->GetNthTaskDevice(task, index, nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + int32 buffer_size = status; - float64 max_snd_press_level = request->max_snd_press_level(); - int32 current_excit_source; - switch (request->current_excit_source_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIMicrophoneChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSource: { - current_excit_source = static_cast(request->current_excit_source()); - break; - } - case nidaqmx_grpc::CreateTEDSAIMicrophoneChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSourceRaw: { - current_excit_source = static_cast(request->current_excit_source_raw()); - break; - } - case nidaqmx_grpc::CreateTEDSAIMicrophoneChanRequest::CurrentExcitSourceEnumCase::CURRENT_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for current_excit_source was not specified or out of range"); - break; + std::string buffer; + if (buffer_size > 0) { + buffer.resize(buffer_size - 1); + } + status = library_->GetNthTaskDevice(task, index, (char*)buffer.data(), buffer_size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(buffer_size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + std::string buffer_utf8; + convert_to_grpc(buffer, &buffer_utf8); + response->set_buffer(buffer_utf8); + nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_buffer())); + return ::grpc::Status::OK; } } - - float64 current_excit_val = request->current_excit_val(); - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateTEDSAIMicrophoneChan(task, physical_channel, name_to_assign_to_channel, terminal_config, units, max_snd_press_level, current_excit_source, current_excit_val, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateTEDSAIPosLVDTChan(::grpc::ServerContext* context, const CreateTEDSAIPosLVDTChanRequest* request, CreateTEDSAIPosLVDTChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIPosLVDTChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateTEDSAIPosLVDTChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateTEDSAIPosLVDTChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetNthTaskReadChannel(::grpc::ServerContext* context, const GetNthTaskReadChannelRequest* request, GetNthTaskReadChannelResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + uInt32 index = request->index(); - int32 voltage_excit_source; - switch (request->voltage_excit_source_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIPosLVDTChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { - voltage_excit_source = static_cast(request->voltage_excit_source()); - break; - } - case nidaqmx_grpc::CreateTEDSAIPosLVDTChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { - voltage_excit_source = static_cast(request->voltage_excit_source_raw()); - break; - } - case nidaqmx_grpc::CreateTEDSAIPosLVDTChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); - break; - } - } + while (true) { + auto status = library_->GetNthTaskReadChannel(task, index, nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + int32 buffer_size = status; - float64 voltage_excit_val = request->voltage_excit_val(); - float64 voltage_excit_freq = request->voltage_excit_freq(); - int32 ac_excit_wire_mode; - switch (request->ac_excit_wire_mode_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIPosLVDTChanRequest::AcExcitWireModeEnumCase::kAcExcitWireMode: { - ac_excit_wire_mode = static_cast(request->ac_excit_wire_mode()); - break; - } - case nidaqmx_grpc::CreateTEDSAIPosLVDTChanRequest::AcExcitWireModeEnumCase::kAcExcitWireModeRaw: { - ac_excit_wire_mode = static_cast(request->ac_excit_wire_mode_raw()); - break; + std::string buffer; + if (buffer_size > 0) { + buffer.resize(buffer_size - 1); + } + status = library_->GetNthTaskReadChannel(task, index, (char*)buffer.data(), buffer_size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(buffer_size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + std::string buffer_utf8; + convert_to_grpc(buffer, &buffer_utf8); + response->set_buffer(buffer_utf8); + nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_buffer())); + return ::grpc::Status::OK; + } + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetPersistedChanAttributeBool(::grpc::ServerContext* context, const GetPersistedChanAttributeBoolRequest* request, GetPersistedChanAttributeBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto channel_mbcs = convert_from_grpc(request->channel()); + auto channel = channel_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetPersistedChanAttributeBoolRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::PersistedChannelBoolAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetPersistedChanAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::PersistedChannelBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetPersistedChanAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateTEDSAIPosLVDTChanRequest::AcExcitWireModeEnumCase::AC_EXCIT_WIRE_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for ac_excit_wire_mode was not specified or out of range"); - break; + + bool32 value {}; + auto status = library_->GetPersistedChanAttributeBool(channel, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; } - - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateTEDSAIPosLVDTChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, voltage_excit_source, voltage_excit_val, voltage_excit_freq, ac_excit_wire_mode, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateTEDSAIPosRVDTChan(::grpc::ServerContext* context, const CreateTEDSAIPosRVDTChanRequest* request, CreateTEDSAIPosRVDTChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIPosRVDTChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateTEDSAIPosRVDTChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateTEDSAIPosRVDTChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetPersistedChanAttributeString(::grpc::ServerContext* context, const GetPersistedChanAttributeStringRequest* request, GetPersistedChanAttributeStringResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - - int32 voltage_excit_source; - switch (request->voltage_excit_source_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIPosRVDTChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { - voltage_excit_source = static_cast(request->voltage_excit_source()); - break; - } - case nidaqmx_grpc::CreateTEDSAIPosRVDTChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { - voltage_excit_source = static_cast(request->voltage_excit_source_raw()); - break; - } - case nidaqmx_grpc::CreateTEDSAIPosRVDTChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); - break; + try { + auto channel_mbcs = convert_from_grpc(request->channel()); + auto channel = channel_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetPersistedChanAttributeStringRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::PersistedChannelStringAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetPersistedChanAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::PersistedChannelStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetPersistedChanAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - } - float64 voltage_excit_val = request->voltage_excit_val(); - float64 voltage_excit_freq = request->voltage_excit_freq(); - int32 ac_excit_wire_mode; - switch (request->ac_excit_wire_mode_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIPosRVDTChanRequest::AcExcitWireModeEnumCase::kAcExcitWireMode: { - ac_excit_wire_mode = static_cast(request->ac_excit_wire_mode()); - break; - } - case nidaqmx_grpc::CreateTEDSAIPosRVDTChanRequest::AcExcitWireModeEnumCase::kAcExcitWireModeRaw: { - ac_excit_wire_mode = static_cast(request->ac_excit_wire_mode_raw()); - break; + + while (true) { + auto status = library_->GetPersistedChanAttributeString(channel, attribute, nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + uInt32 size = status; + + std::string value; + if (size > 0) { + value.resize(size - 1); + } + status = library_->GetPersistedChanAttributeString(channel, attribute, (char*)value.data(), size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + std::string value_utf8; + convert_to_grpc(value, &value_utf8); + response->set_value(value_utf8); + nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); + return ::grpc::Status::OK; + } + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetPersistedScaleAttributeBool(::grpc::ServerContext* context, const GetPersistedScaleAttributeBoolRequest* request, GetPersistedScaleAttributeBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto scale_name_mbcs = convert_from_grpc(request->scale_name()); + auto scale_name = scale_name_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetPersistedScaleAttributeBoolRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::PersistedScaleBoolAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetPersistedScaleAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::PersistedScaleBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetPersistedScaleAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateTEDSAIPosRVDTChanRequest::AcExcitWireModeEnumCase::AC_EXCIT_WIRE_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for ac_excit_wire_mode was not specified or out of range"); - break; + + bool32 value {}; + auto status = library_->GetPersistedScaleAttributeBool(scale_name, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; } - - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateTEDSAIPosRVDTChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, voltage_excit_source, voltage_excit_val, voltage_excit_freq, ac_excit_wire_mode, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateTEDSAIPressureBridgeChan(::grpc::ServerContext* context, const CreateTEDSAIPressureBridgeChanRequest* request, CreateTEDSAIPressureBridgeChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIPressureBridgeChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateTEDSAIPressureBridgeChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateTEDSAIPressureBridgeChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; - } - } - - int32 voltage_excit_source; - switch (request->voltage_excit_source_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIPressureBridgeChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { - voltage_excit_source = static_cast(request->voltage_excit_source()); - break; - } - case nidaqmx_grpc::CreateTEDSAIPressureBridgeChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { - voltage_excit_source = static_cast(request->voltage_excit_source_raw()); - break; - } - case nidaqmx_grpc::CreateTEDSAIPressureBridgeChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); - break; - } - } - - float64 voltage_excit_val = request->voltage_excit_val(); - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateTEDSAIPressureBridgeChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, voltage_excit_source, voltage_excit_val, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateTEDSAIRTDChan(::grpc::ServerContext* context, const CreateTEDSAIRTDChanRequest* request, CreateTEDSAIRTDChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIRTDChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateTEDSAIRTDChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateTEDSAIRTDChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetPersistedScaleAttributeString(::grpc::ServerContext* context, const GetPersistedScaleAttributeStringRequest* request, GetPersistedScaleAttributeStringResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - - int32 resistance_config; - switch (request->resistance_config_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIRTDChanRequest::ResistanceConfigEnumCase::kResistanceConfig: { - resistance_config = static_cast(request->resistance_config()); - break; - } - case nidaqmx_grpc::CreateTEDSAIRTDChanRequest::ResistanceConfigEnumCase::kResistanceConfigRaw: { - resistance_config = static_cast(request->resistance_config_raw()); - break; - } - case nidaqmx_grpc::CreateTEDSAIRTDChanRequest::ResistanceConfigEnumCase::RESISTANCE_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for resistance_config was not specified or out of range"); - break; + try { + auto scale_name_mbcs = convert_from_grpc(request->scale_name()); + auto scale_name = scale_name_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetPersistedScaleAttributeStringRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::PersistedScaleStringAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetPersistedScaleAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::PersistedScaleStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetPersistedScaleAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - } - int32 current_excit_source; - switch (request->current_excit_source_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIRTDChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSource: { - current_excit_source = static_cast(request->current_excit_source()); - break; - } - case nidaqmx_grpc::CreateTEDSAIRTDChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSourceRaw: { - current_excit_source = static_cast(request->current_excit_source_raw()); - break; + + while (true) { + auto status = library_->GetPersistedScaleAttributeString(scale_name, attribute, nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + uInt32 size = status; + + std::string value; + if (size > 0) { + value.resize(size - 1); + } + status = library_->GetPersistedScaleAttributeString(scale_name, attribute, (char*)value.data(), size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + std::string value_utf8; + convert_to_grpc(value, &value_utf8); + response->set_value(value_utf8); + nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); + return ::grpc::Status::OK; + } + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetPersistedTaskAttributeBool(::grpc::ServerContext* context, const GetPersistedTaskAttributeBoolRequest* request, GetPersistedTaskAttributeBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_name_mbcs = convert_from_grpc(request->task_name()); + auto task_name = task_name_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetPersistedTaskAttributeBoolRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::PersistedTaskBoolAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetPersistedTaskAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::PersistedTaskBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetPersistedTaskAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateTEDSAIRTDChanRequest::CurrentExcitSourceEnumCase::CURRENT_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for current_excit_source was not specified or out of range"); - break; + + bool32 value {}; + auto status = library_->GetPersistedTaskAttributeBool(task_name, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; } - - float64 current_excit_val = request->current_excit_val(); - auto status = library_->CreateTEDSAIRTDChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, resistance_config, current_excit_source, current_excit_val); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateTEDSAIResistanceChan(::grpc::ServerContext* context, const CreateTEDSAIResistanceChanRequest* request, CreateTEDSAIResistanceChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIResistanceChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateTEDSAIResistanceChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateTEDSAIResistanceChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetPersistedTaskAttributeString(::grpc::ServerContext* context, const GetPersistedTaskAttributeStringRequest* request, GetPersistedTaskAttributeStringResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - - int32 resistance_config; - switch (request->resistance_config_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIResistanceChanRequest::ResistanceConfigEnumCase::kResistanceConfig: { - resistance_config = static_cast(request->resistance_config()); - break; - } - case nidaqmx_grpc::CreateTEDSAIResistanceChanRequest::ResistanceConfigEnumCase::kResistanceConfigRaw: { - resistance_config = static_cast(request->resistance_config_raw()); - break; - } - case nidaqmx_grpc::CreateTEDSAIResistanceChanRequest::ResistanceConfigEnumCase::RESISTANCE_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for resistance_config was not specified or out of range"); - break; + try { + auto task_name_mbcs = convert_from_grpc(request->task_name()); + auto task_name = task_name_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetPersistedTaskAttributeStringRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::PersistedTaskStringAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetPersistedTaskAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::PersistedTaskStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetPersistedTaskAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - } - int32 current_excit_source; - switch (request->current_excit_source_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIResistanceChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSource: { - current_excit_source = static_cast(request->current_excit_source()); - break; - } - case nidaqmx_grpc::CreateTEDSAIResistanceChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSourceRaw: { - current_excit_source = static_cast(request->current_excit_source_raw()); - break; + + while (true) { + auto status = library_->GetPersistedTaskAttributeString(task_name, attribute, nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + uInt32 size = status; + + std::string value; + if (size > 0) { + value.resize(size - 1); + } + status = library_->GetPersistedTaskAttributeString(task_name, attribute, (char*)value.data(), size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + std::string value_utf8; + convert_to_grpc(value, &value_utf8); + response->set_value(value_utf8); + nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); + return ::grpc::Status::OK; + } + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetPhysicalChanAttributeBool(::grpc::ServerContext* context, const GetPhysicalChanAttributeBoolRequest* request, GetPhysicalChanAttributeBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetPhysicalChanAttributeBoolRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::PhysicalChannelBoolAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetPhysicalChanAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::PhysicalChannelBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetPhysicalChanAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateTEDSAIResistanceChanRequest::CurrentExcitSourceEnumCase::CURRENT_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for current_excit_source was not specified or out of range"); - break; + + bool32 value {}; + auto status = library_->GetPhysicalChanAttributeBool(physical_channel, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; } - - float64 current_excit_val = request->current_excit_val(); - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateTEDSAIResistanceChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, resistance_config, current_excit_source, current_excit_val, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateTEDSAIStrainGageChan(::grpc::ServerContext* context, const CreateTEDSAIStrainGageChanRequest* request, CreateTEDSAIStrainGageChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIStrainGageChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateTEDSAIStrainGageChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateTEDSAIStrainGageChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; - } - } - - int32 voltage_excit_source; - switch (request->voltage_excit_source_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIStrainGageChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { - voltage_excit_source = static_cast(request->voltage_excit_source()); - break; - } - case nidaqmx_grpc::CreateTEDSAIStrainGageChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { - voltage_excit_source = static_cast(request->voltage_excit_source_raw()); - break; - } - case nidaqmx_grpc::CreateTEDSAIStrainGageChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); - break; - } - } - - float64 voltage_excit_val = request->voltage_excit_val(); - float64 initial_bridge_voltage = request->initial_bridge_voltage(); - float64 lead_wire_resistance = request->lead_wire_resistance(); - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateTEDSAIStrainGageChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, voltage_excit_source, voltage_excit_val, initial_bridge_voltage, lead_wire_resistance, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetPhysicalChanAttributeBytes(::grpc::ServerContext* context, const GetPhysicalChanAttributeBytesRequest* request, GetPhysicalChanAttributeBytesResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetPhysicalChanAttributeBytesRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::PhysicalChannelBytesAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetPhysicalChanAttributeBytesRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::PhysicalChannelBytesAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetPhysicalChanAttributeBytesRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateTEDSAIThrmcplChan(::grpc::ServerContext* context, const CreateTEDSAIThrmcplChanRequest* request, CreateTEDSAIThrmcplChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIThrmcplChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateTEDSAIThrmcplChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateTEDSAIThrmcplChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; - } - } - - int32 cjc_source; - switch (request->cjc_source_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIThrmcplChanRequest::CjcSourceEnumCase::kCjcSource: { - cjc_source = static_cast(request->cjc_source()); - break; - } - case nidaqmx_grpc::CreateTEDSAIThrmcplChanRequest::CjcSourceEnumCase::kCjcSourceRaw: { - cjc_source = static_cast(request->cjc_source_raw()); - break; - } - case nidaqmx_grpc::CreateTEDSAIThrmcplChanRequest::CjcSourceEnumCase::CJC_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for cjc_source was not specified or out of range"); - break; - } - } - - float64 cjc_val = request->cjc_val(); - auto cjc_channel_mbcs = convert_from_grpc(request->cjc_channel()); - auto cjc_channel = cjc_channel_mbcs.c_str(); - auto status = library_->CreateTEDSAIThrmcplChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, cjc_source, cjc_val, cjc_channel); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateTEDSAIThrmstrChanIex(::grpc::ServerContext* context, const CreateTEDSAIThrmstrChanIexRequest* request, CreateTEDSAIThrmstrChanIexResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIThrmstrChanIexRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateTEDSAIThrmstrChanIexRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateTEDSAIThrmstrChanIexRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + while (true) { + auto status = library_->GetPhysicalChanAttributeBytes(physical_channel, attribute, nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + uInt32 size = status; + + std::string value(size, '\0'); + status = library_->GetPhysicalChanAttributeBytes(physical_channel, attribute, (uInt8*)value.data(), size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; } } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } - int32 resistance_config; - switch (request->resistance_config_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIThrmstrChanIexRequest::ResistanceConfigEnumCase::kResistanceConfig: { - resistance_config = static_cast(request->resistance_config()); - break; - } - case nidaqmx_grpc::CreateTEDSAIThrmstrChanIexRequest::ResistanceConfigEnumCase::kResistanceConfigRaw: { - resistance_config = static_cast(request->resistance_config_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetPhysicalChanAttributeDouble(::grpc::ServerContext* context, const GetPhysicalChanAttributeDoubleRequest* request, GetPhysicalChanAttributeDoubleResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetPhysicalChanAttributeDoubleRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::PhysicalChannelDoubleAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetPhysicalChanAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::PhysicalChannelDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetPhysicalChanAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateTEDSAIThrmstrChanIexRequest::ResistanceConfigEnumCase::RESISTANCE_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for resistance_config was not specified or out of range"); - break; + + float64 value {}; + auto status = library_->GetPhysicalChanAttributeDouble(physical_channel, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } + } - int32 current_excit_source; - switch (request->current_excit_source_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIThrmstrChanIexRequest::CurrentExcitSourceEnumCase::kCurrentExcitSource: { - current_excit_source = static_cast(request->current_excit_source()); - break; - } - case nidaqmx_grpc::CreateTEDSAIThrmstrChanIexRequest::CurrentExcitSourceEnumCase::kCurrentExcitSourceRaw: { - current_excit_source = static_cast(request->current_excit_source_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetPhysicalChanAttributeDoubleArray(::grpc::ServerContext* context, const GetPhysicalChanAttributeDoubleArrayRequest* request, GetPhysicalChanAttributeDoubleArrayResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetPhysicalChanAttributeDoubleArrayRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::PhysicalChannelDoubleArrayAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetPhysicalChanAttributeDoubleArrayRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::PhysicalChannelDoubleArrayAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetPhysicalChanAttributeDoubleArrayRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateTEDSAIThrmstrChanIexRequest::CurrentExcitSourceEnumCase::CURRENT_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for current_excit_source was not specified or out of range"); - break; + + + while (true) { + auto status = library_->GetPhysicalChanAttributeDoubleArray(physical_channel, attribute, nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + uInt32 size = status; + + response->mutable_value()->Resize(size, 0); + float64* value = response->mutable_value()->mutable_data(); + status = library_->GetPhysicalChanAttributeDoubleArray(physical_channel, attribute, value, size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + return ::grpc::Status::OK; } } - - float64 current_excit_val = request->current_excit_val(); - auto status = library_->CreateTEDSAIThrmstrChanIex(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, resistance_config, current_excit_source, current_excit_val); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateTEDSAIThrmstrChanVex(::grpc::ServerContext* context, const CreateTEDSAIThrmstrChanVexRequest* request, CreateTEDSAIThrmstrChanVexResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIThrmstrChanVexRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateTEDSAIThrmstrChanVexRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetPhysicalChanAttributeInt32(::grpc::ServerContext* context, const GetPhysicalChanAttributeInt32Request* request, GetPhysicalChanAttributeInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetPhysicalChanAttributeInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::PhysicalChannelInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetPhysicalChanAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::PhysicalChannelInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetPhysicalChanAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateTEDSAIThrmstrChanVexRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + + int32 value {}; + auto status = library_->GetPhysicalChanAttributeInt32(physical_channel, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } + response->set_status(status); + auto checked_convert_value = [](auto raw_value) { + bool raw_value_is_valid = nidaqmx_grpc::PhysicalChannelInt32AttributeValues_IsValid(raw_value); + auto valid_enum_value = raw_value_is_valid ? raw_value : 0; + return static_cast(valid_enum_value); + }; + response->set_value(checked_convert_value(value)); + response->set_value_raw(value); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } - int32 resistance_config; - switch (request->resistance_config_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIThrmstrChanVexRequest::ResistanceConfigEnumCase::kResistanceConfig: { - resistance_config = static_cast(request->resistance_config()); - break; - } - case nidaqmx_grpc::CreateTEDSAIThrmstrChanVexRequest::ResistanceConfigEnumCase::kResistanceConfigRaw: { - resistance_config = static_cast(request->resistance_config_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetPhysicalChanAttributeInt32Array(::grpc::ServerContext* context, const GetPhysicalChanAttributeInt32ArrayRequest* request, GetPhysicalChanAttributeInt32ArrayResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetPhysicalChanAttributeInt32ArrayRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::PhysicalChannelInt32ArrayAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetPhysicalChanAttributeInt32ArrayRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::PhysicalChannelInt32ArrayAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetPhysicalChanAttributeInt32ArrayRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateTEDSAIThrmstrChanVexRequest::ResistanceConfigEnumCase::RESISTANCE_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for resistance_config was not specified or out of range"); - break; + + + while (true) { + auto status = library_->GetPhysicalChanAttributeInt32Array(physical_channel, attribute, nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + uInt32 size = status; + + response->mutable_value_raw()->Resize(size, 0); + int32* value = reinterpret_cast(response->mutable_value_raw()->mutable_data()); + status = library_->GetPhysicalChanAttributeInt32Array(physical_channel, attribute, value, size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + auto checked_convert_value = [](auto raw_value) { + bool raw_value_is_valid = nidaqmx_grpc::PhysicalChannelInt32AttributeValues_IsValid(raw_value); + auto valid_enum_value = raw_value_is_valid ? raw_value : 0; + return static_cast(valid_enum_value); + }; + response->mutable_value()->Clear(); + response->mutable_value()->Reserve(size); + std::transform( + response->value_raw().begin(), + response->value_raw().begin() + size, + google::protobuf::RepeatedFieldBackInserter(response->mutable_value()), + [&](auto x) { + return checked_convert_value(x); + }); + return ::grpc::Status::OK; } } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } - int32 voltage_excit_source; - switch (request->voltage_excit_source_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIThrmstrChanVexRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { - voltage_excit_source = static_cast(request->voltage_excit_source()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetPhysicalChanAttributeString(::grpc::ServerContext* context, const GetPhysicalChanAttributeStringRequest* request, GetPhysicalChanAttributeStringResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetPhysicalChanAttributeStringRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::PhysicalChannelStringAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetPhysicalChanAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::PhysicalChannelStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetPhysicalChanAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateTEDSAIThrmstrChanVexRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { - voltage_excit_source = static_cast(request->voltage_excit_source_raw()); - break; + + + while (true) { + auto status = library_->GetPhysicalChanAttributeString(physical_channel, attribute, nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + uInt32 size = status; + + std::string value; + if (size > 0) { + value.resize(size - 1); + } + status = library_->GetPhysicalChanAttributeString(physical_channel, attribute, (char*)value.data(), size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + std::string value_utf8; + convert_to_grpc(value, &value_utf8); + response->set_value(value_utf8); + nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); + return ::grpc::Status::OK; + } + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetPhysicalChanAttributeUInt32(::grpc::ServerContext* context, const GetPhysicalChanAttributeUInt32Request* request, GetPhysicalChanAttributeUInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetPhysicalChanAttributeUInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::PhysicalChannelUInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetPhysicalChanAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::PhysicalChannelUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetPhysicalChanAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateTEDSAIThrmstrChanVexRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); - break; + + uInt32 value {}; + auto status = library_->GetPhysicalChanAttributeUInt32(physical_channel, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; } - - float64 voltage_excit_val = request->voltage_excit_val(); - float64 r1 = request->r1(); - auto status = library_->CreateTEDSAIThrmstrChanVex(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, resistance_config, voltage_excit_source, voltage_excit_val, r1); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateTEDSAITorqueBridgeChan(::grpc::ServerContext* context, const CreateTEDSAITorqueBridgeChanRequest* request, CreateTEDSAITorqueBridgeChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateTEDSAITorqueBridgeChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateTEDSAITorqueBridgeChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateTEDSAITorqueBridgeChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; - } - } - - int32 voltage_excit_source; - switch (request->voltage_excit_source_enum_case()) { - case nidaqmx_grpc::CreateTEDSAITorqueBridgeChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { - voltage_excit_source = static_cast(request->voltage_excit_source()); - break; - } - case nidaqmx_grpc::CreateTEDSAITorqueBridgeChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { - voltage_excit_source = static_cast(request->voltage_excit_source_raw()); - break; - } - case nidaqmx_grpc::CreateTEDSAITorqueBridgeChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); - break; - } - } - - float64 voltage_excit_val = request->voltage_excit_val(); - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateTEDSAITorqueBridgeChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, voltage_excit_source, voltage_excit_val, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateTEDSAIVoltageChan(::grpc::ServerContext* context, const CreateTEDSAIVoltageChanRequest* request, CreateTEDSAIVoltageChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - int32 terminal_config; - switch (request->terminal_config_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIVoltageChanRequest::TerminalConfigEnumCase::kTerminalConfig: { - terminal_config = static_cast(request->terminal_config()); - break; - } - case nidaqmx_grpc::CreateTEDSAIVoltageChanRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { - terminal_config = static_cast(request->terminal_config_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetPhysicalChanAttributeUInt32Array(::grpc::ServerContext* context, const GetPhysicalChanAttributeUInt32ArrayRequest* request, GetPhysicalChanAttributeUInt32ArrayResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetPhysicalChanAttributeUInt32ArrayRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::PhysicalChannelUInt32ArrayAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetPhysicalChanAttributeUInt32ArrayRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::PhysicalChannelUInt32ArrayAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetPhysicalChanAttributeUInt32ArrayRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateTEDSAIVoltageChanRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); - break; + + + while (true) { + auto status = library_->GetPhysicalChanAttributeUInt32Array(physical_channel, attribute, nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + uInt32 size = status; + + response->mutable_value()->Resize(size, 0); + uInt32* value = reinterpret_cast(response->mutable_value()->mutable_data()); + status = library_->GetPhysicalChanAttributeUInt32Array(physical_channel, attribute, value, size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + return ::grpc::Status::OK; } } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIVoltageChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateTEDSAIVoltageChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetReadAttributeBool(::grpc::ServerContext* context, const GetReadAttributeBoolRequest* request, GetReadAttributeBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetReadAttributeBoolRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ReadBoolAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetReadAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ReadBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetReadAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateTEDSAIVoltageChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + + bool32 value {}; + auto status = library_->GetReadAttributeBool(task, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; } - - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateTEDSAIVoltageChan(task, physical_channel, name_to_assign_to_channel, terminal_config, min_val, max_val, units, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateTEDSAIVoltageChanWithExcit(::grpc::ServerContext* context, const CreateTEDSAIVoltageChanWithExcitRequest* request, CreateTEDSAIVoltageChanWithExcitResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - int32 terminal_config; - switch (request->terminal_config_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIVoltageChanWithExcitRequest::TerminalConfigEnumCase::kTerminalConfig: { - terminal_config = static_cast(request->terminal_config()); - break; - } - case nidaqmx_grpc::CreateTEDSAIVoltageChanWithExcitRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { - terminal_config = static_cast(request->terminal_config_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetReadAttributeDouble(::grpc::ServerContext* context, const GetReadAttributeDoubleRequest* request, GetReadAttributeDoubleResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetReadAttributeDoubleRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ReadDoubleAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetReadAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ReadDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetReadAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateTEDSAIVoltageChanWithExcitRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); - break; + + float64 value {}; + auto status = library_->GetReadAttributeDouble(task, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } + } - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIVoltageChanWithExcitRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateTEDSAIVoltageChanWithExcitRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetReadAttributeInt32(::grpc::ServerContext* context, const GetReadAttributeInt32Request* request, GetReadAttributeInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetReadAttributeInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ReadInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetReadAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ReadInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetReadAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateTEDSAIVoltageChanWithExcitRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + + int32 value {}; + auto status = library_->GetReadAttributeInt32(task, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + auto checked_convert_value = [](auto raw_value) { + bool raw_value_is_valid = nidaqmx_grpc::ReadInt32AttributeValues_IsValid(raw_value); + auto valid_enum_value = raw_value_is_valid ? raw_value : 0; + return static_cast(valid_enum_value); + }; + response->set_value(checked_convert_value(value)); + response->set_value_raw(value); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } - int32 voltage_excit_source; - switch (request->voltage_excit_source_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIVoltageChanWithExcitRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { - voltage_excit_source = static_cast(request->voltage_excit_source()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetReadAttributeString(::grpc::ServerContext* context, const GetReadAttributeStringRequest* request, GetReadAttributeStringResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetReadAttributeStringRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ReadStringAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetReadAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ReadStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetReadAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateTEDSAIVoltageChanWithExcitRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { - voltage_excit_source = static_cast(request->voltage_excit_source_raw()); - break; + + + while (true) { + auto status = library_->GetReadAttributeString(task, attribute, nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + uInt32 size = status; + + std::string value; + if (size > 0) { + value.resize(size - 1); + } + status = library_->GetReadAttributeString(task, attribute, (char*)value.data(), size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + std::string value_utf8; + convert_to_grpc(value, &value_utf8); + response->set_value(value_utf8); + nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); + return ::grpc::Status::OK; + } + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetReadAttributeUInt32(::grpc::ServerContext* context, const GetReadAttributeUInt32Request* request, GetReadAttributeUInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetReadAttributeUInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ReadUInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetReadAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ReadUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetReadAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateTEDSAIVoltageChanWithExcitRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); - break; + + uInt32 value {}; + auto status = library_->GetReadAttributeUInt32(task, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; } - - float64 voltage_excit_val = request->voltage_excit_val(); - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateTEDSAIVoltageChanWithExcit(task, physical_channel, name_to_assign_to_channel, terminal_config, min_val, max_val, units, voltage_excit_source, voltage_excit_val, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateTableScale(::grpc::ServerContext* context, const CreateTableScaleRequest* request, CreateTableScaleResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto name_mbcs = convert_from_grpc(request->name()); - auto name = name_mbcs.c_str(); - auto prescaled_vals = const_cast(request->prescaled_vals().data()); - uInt32 num_prescaled_vals_in = static_cast(request->prescaled_vals().size()); - auto scaled_vals = const_cast(request->scaled_vals().data()); - uInt32 num_scaled_vals_in = static_cast(request->scaled_vals().size()); - int32 pre_scaled_units; - switch (request->pre_scaled_units_enum_case()) { - case nidaqmx_grpc::CreateTableScaleRequest::PreScaledUnitsEnumCase::kPreScaledUnits: { - pre_scaled_units = static_cast(request->pre_scaled_units()); - break; - } - case nidaqmx_grpc::CreateTableScaleRequest::PreScaledUnitsEnumCase::kPreScaledUnitsRaw: { - pre_scaled_units = static_cast(request->pre_scaled_units_raw()); - break; - } - case nidaqmx_grpc::CreateTableScaleRequest::PreScaledUnitsEnumCase::PRE_SCALED_UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for pre_scaled_units was not specified or out of range"); - break; - } - } - - auto scaled_units_mbcs = convert_from_grpc(request->scaled_units()); - auto scaled_units = scaled_units_mbcs.c_str(); - auto status = library_->CreateTableScale(name, prescaled_vals, num_prescaled_vals_in, scaled_vals, num_scaled_vals_in, pre_scaled_units, scaled_units); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateTask(::grpc::ServerContext* context, const CreateTaskRequest* request, CreateTaskResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_name_mbcs = convert_from_grpc(request->session_name()); - auto session_name = session_name_mbcs.c_str(); - auto initialization_behavior = request->initialization_behavior(); - - bool new_session_initialized{}; - auto init_lambda = [&]() { - TaskHandle task; - auto status = library_->CreateTask(session_name, &task); - return std::make_tuple(status, task); - }; - std::string grpc_device_session_name = request->session_name(); - // Capture the library shared_ptr by value. Do not capture `this` or any references. - LibrarySharedPtr library = library_; - auto cleanup_lambda = [library](TaskHandle id) { library->ClearTask(id); }; - int status = session_repository_->add_session(grpc_device_session_name, init_lambda, cleanup_lambda, initialization_behavior, &new_session_initialized); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - response->mutable_task()->set_name(grpc_device_session_name); - response->set_new_session_initialized(new_session_initialized); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetReadAttributeUInt64(::grpc::ServerContext* context, const GetReadAttributeUInt64Request* request, GetReadAttributeUInt64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetReadAttributeUInt64Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ReadUInt64Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetReadAttributeUInt64Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ReadUInt64Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetReadAttributeUInt64Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateWatchdogTimerTask(::grpc::ServerContext* context, const CreateWatchdogTimerTaskRequest* request, CreateWatchdogTimerTaskResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - auto session_name_mbcs = convert_from_grpc(request->session_name()); - auto session_name = session_name_mbcs.c_str(); - float64 timeout = request->timeout(); - auto get_lines_if = [](const google::protobuf::RepeatedPtrField& vector, int n) -> const char* { - if (vector.size() > n) { - return vector[n].lines().c_str(); - } - return nullptr; - }; - auto get_expState_if = [](const google::protobuf::RepeatedPtrField& vector, int n) -> int32 { - if (vector.size() > n) { - return vector[n].exp_state(); + uInt64 value {}; + auto status = library_->GetReadAttributeUInt64(task, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - return 0; - }; - auto exp_states = request->exp_states(); - if (exp_states.size() == 0) { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "No values for expStates were specified"); + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; } - if (exp_states.size() > 96) { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "More than 96 values for expStates were specified"); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - - auto initialization_behavior = request->initialization_behavior(); - - bool new_session_initialized{}; - auto init_lambda = [&]() { - TaskHandle task; - auto status = std::static_pointer_cast(library_)->CreateWatchdogTimerTask(device_name, session_name, &task, timeout, get_lines_if(exp_states, 0), get_expState_if(exp_states, 0), get_lines_if(exp_states, 1), get_expState_if(exp_states, 1), get_lines_if(exp_states, 2), get_expState_if(exp_states, 2), get_lines_if(exp_states, 3), get_expState_if(exp_states, 3), get_lines_if(exp_states, 4), get_expState_if(exp_states, 4), get_lines_if(exp_states, 5), get_expState_if(exp_states, 5), get_lines_if(exp_states, 6), get_expState_if(exp_states, 6), get_lines_if(exp_states, 7), get_expState_if(exp_states, 7), get_lines_if(exp_states, 8), get_expState_if(exp_states, 8), get_lines_if(exp_states, 9), get_expState_if(exp_states, 9), get_lines_if(exp_states, 10), get_expState_if(exp_states, 10), get_lines_if(exp_states, 11), get_expState_if(exp_states, 11), get_lines_if(exp_states, 12), get_expState_if(exp_states, 12), get_lines_if(exp_states, 13), get_expState_if(exp_states, 13), get_lines_if(exp_states, 14), get_expState_if(exp_states, 14), get_lines_if(exp_states, 15), get_expState_if(exp_states, 15), get_lines_if(exp_states, 16), get_expState_if(exp_states, 16), get_lines_if(exp_states, 17), get_expState_if(exp_states, 17), get_lines_if(exp_states, 18), get_expState_if(exp_states, 18), get_lines_if(exp_states, 19), get_expState_if(exp_states, 19), get_lines_if(exp_states, 20), get_expState_if(exp_states, 20), get_lines_if(exp_states, 21), get_expState_if(exp_states, 21), get_lines_if(exp_states, 22), get_expState_if(exp_states, 22), get_lines_if(exp_states, 23), get_expState_if(exp_states, 23), get_lines_if(exp_states, 24), get_expState_if(exp_states, 24), get_lines_if(exp_states, 25), get_expState_if(exp_states, 25), get_lines_if(exp_states, 26), get_expState_if(exp_states, 26), get_lines_if(exp_states, 27), get_expState_if(exp_states, 27), get_lines_if(exp_states, 28), get_expState_if(exp_states, 28), get_lines_if(exp_states, 29), get_expState_if(exp_states, 29), get_lines_if(exp_states, 30), get_expState_if(exp_states, 30), get_lines_if(exp_states, 31), get_expState_if(exp_states, 31), get_lines_if(exp_states, 32), get_expState_if(exp_states, 32), get_lines_if(exp_states, 33), get_expState_if(exp_states, 33), get_lines_if(exp_states, 34), get_expState_if(exp_states, 34), get_lines_if(exp_states, 35), get_expState_if(exp_states, 35), get_lines_if(exp_states, 36), get_expState_if(exp_states, 36), get_lines_if(exp_states, 37), get_expState_if(exp_states, 37), get_lines_if(exp_states, 38), get_expState_if(exp_states, 38), get_lines_if(exp_states, 39), get_expState_if(exp_states, 39), get_lines_if(exp_states, 40), get_expState_if(exp_states, 40), get_lines_if(exp_states, 41), get_expState_if(exp_states, 41), get_lines_if(exp_states, 42), get_expState_if(exp_states, 42), get_lines_if(exp_states, 43), get_expState_if(exp_states, 43), get_lines_if(exp_states, 44), get_expState_if(exp_states, 44), get_lines_if(exp_states, 45), get_expState_if(exp_states, 45), get_lines_if(exp_states, 46), get_expState_if(exp_states, 46), get_lines_if(exp_states, 47), get_expState_if(exp_states, 47), get_lines_if(exp_states, 48), get_expState_if(exp_states, 48), get_lines_if(exp_states, 49), get_expState_if(exp_states, 49), get_lines_if(exp_states, 50), get_expState_if(exp_states, 50), get_lines_if(exp_states, 51), get_expState_if(exp_states, 51), get_lines_if(exp_states, 52), get_expState_if(exp_states, 52), get_lines_if(exp_states, 53), get_expState_if(exp_states, 53), get_lines_if(exp_states, 54), get_expState_if(exp_states, 54), get_lines_if(exp_states, 55), get_expState_if(exp_states, 55), get_lines_if(exp_states, 56), get_expState_if(exp_states, 56), get_lines_if(exp_states, 57), get_expState_if(exp_states, 57), get_lines_if(exp_states, 58), get_expState_if(exp_states, 58), get_lines_if(exp_states, 59), get_expState_if(exp_states, 59), get_lines_if(exp_states, 60), get_expState_if(exp_states, 60), get_lines_if(exp_states, 61), get_expState_if(exp_states, 61), get_lines_if(exp_states, 62), get_expState_if(exp_states, 62), get_lines_if(exp_states, 63), get_expState_if(exp_states, 63), get_lines_if(exp_states, 64), get_expState_if(exp_states, 64), get_lines_if(exp_states, 65), get_expState_if(exp_states, 65), get_lines_if(exp_states, 66), get_expState_if(exp_states, 66), get_lines_if(exp_states, 67), get_expState_if(exp_states, 67), get_lines_if(exp_states, 68), get_expState_if(exp_states, 68), get_lines_if(exp_states, 69), get_expState_if(exp_states, 69), get_lines_if(exp_states, 70), get_expState_if(exp_states, 70), get_lines_if(exp_states, 71), get_expState_if(exp_states, 71), get_lines_if(exp_states, 72), get_expState_if(exp_states, 72), get_lines_if(exp_states, 73), get_expState_if(exp_states, 73), get_lines_if(exp_states, 74), get_expState_if(exp_states, 74), get_lines_if(exp_states, 75), get_expState_if(exp_states, 75), get_lines_if(exp_states, 76), get_expState_if(exp_states, 76), get_lines_if(exp_states, 77), get_expState_if(exp_states, 77), get_lines_if(exp_states, 78), get_expState_if(exp_states, 78), get_lines_if(exp_states, 79), get_expState_if(exp_states, 79), get_lines_if(exp_states, 80), get_expState_if(exp_states, 80), get_lines_if(exp_states, 81), get_expState_if(exp_states, 81), get_lines_if(exp_states, 82), get_expState_if(exp_states, 82), get_lines_if(exp_states, 83), get_expState_if(exp_states, 83), get_lines_if(exp_states, 84), get_expState_if(exp_states, 84), get_lines_if(exp_states, 85), get_expState_if(exp_states, 85), get_lines_if(exp_states, 86), get_expState_if(exp_states, 86), get_lines_if(exp_states, 87), get_expState_if(exp_states, 87), get_lines_if(exp_states, 88), get_expState_if(exp_states, 88), get_lines_if(exp_states, 89), get_expState_if(exp_states, 89), get_lines_if(exp_states, 90), get_expState_if(exp_states, 90), get_lines_if(exp_states, 91), get_expState_if(exp_states, 91), get_lines_if(exp_states, 92), get_expState_if(exp_states, 92), get_lines_if(exp_states, 93), get_expState_if(exp_states, 93), get_lines_if(exp_states, 94), get_expState_if(exp_states, 94), get_lines_if(exp_states, 95), get_expState_if(exp_states, 95), get_lines_if(exp_states, 96), get_expState_if(exp_states, 96)); - return std::make_tuple(status, task); - }; - std::string grpc_device_session_name = request->session_name(); - // Capture the library shared_ptr by value. Do not capture `this` or any references. - LibrarySharedPtr library = library_; - auto cleanup_lambda = [library](TaskHandle id) { library->ClearTask(id); }; - int status = session_repository_->add_session(grpc_device_session_name, init_lambda, cleanup_lambda, initialization_behavior, &new_session_initialized); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - response->mutable_task()->set_name(grpc_device_session_name); - response->set_new_session_initialized(new_session_initialized); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateWatchdogTimerTaskEx(::grpc::ServerContext* context, const CreateWatchdogTimerTaskExRequest* request, CreateWatchdogTimerTaskExResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - auto session_name_mbcs = convert_from_grpc(request->session_name()); - auto session_name = session_name_mbcs.c_str(); - float64 timeout = request->timeout(); - auto initialization_behavior = request->initialization_behavior(); - - bool new_session_initialized{}; - auto init_lambda = [&]() { - TaskHandle task; - auto status = library_->CreateWatchdogTimerTaskEx(device_name, session_name, &task, timeout); - return std::make_tuple(status, task); - }; - std::string grpc_device_session_name = request->session_name(); - // Capture the library shared_ptr by value. Do not capture `this` or any references. - LibrarySharedPtr library = library_; - auto cleanup_lambda = [library](TaskHandle id) { library->ClearTask(id); }; - int status = session_repository_->add_session(grpc_device_session_name, init_lambda, cleanup_lambda, initialization_behavior, &new_session_initialized); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - response->mutable_task()->set_name(grpc_device_session_name); - response->set_new_session_initialized(new_session_initialized); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::DeleteNetworkDevice(::grpc::ServerContext* context, const DeleteNetworkDeviceRequest* request, DeleteNetworkDeviceResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - auto status = library_->DeleteNetworkDevice(device_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetRealTimeAttributeBool(::grpc::ServerContext* context, const GetRealTimeAttributeBoolRequest* request, GetRealTimeAttributeBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetRealTimeAttributeBoolRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::RealTimeBoolAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetRealTimeAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::RealTimeBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetRealTimeAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::DeleteSavedGlobalChan(::grpc::ServerContext* context, const DeleteSavedGlobalChanRequest* request, DeleteSavedGlobalChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto channel_name_mbcs = convert_from_grpc(request->channel_name()); - auto channel_name = channel_name_mbcs.c_str(); - auto status = library_->DeleteSavedGlobalChan(channel_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + bool32 value {}; + auto status = library_->GetRealTimeAttributeBool(task, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::DeleteSavedScale(::grpc::ServerContext* context, const DeleteSavedScaleRequest* request, DeleteSavedScaleResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto scale_name_mbcs = convert_from_grpc(request->scale_name()); - auto scale_name = scale_name_mbcs.c_str(); - auto status = library_->DeleteSavedScale(scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::DeleteSavedTask(::grpc::ServerContext* context, const DeleteSavedTaskRequest* request, DeleteSavedTaskResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_name_mbcs = convert_from_grpc(request->task_name()); - auto task_name = task_name_mbcs.c_str(); - auto status = library_->DeleteSavedTask(task_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetRealTimeAttributeInt32(::grpc::ServerContext* context, const GetRealTimeAttributeInt32Request* request, GetRealTimeAttributeInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::DeviceSupportsCal(::grpc::ServerContext* context, const DeviceSupportsCalRequest* request, DeviceSupportsCalResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - bool32 cal_supported{}; - auto status = library_->DeviceSupportsCal(device_name, &cal_supported); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - response->set_cal_supported(cal_supported); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetRealTimeAttributeInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::RealTimeInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetRealTimeAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::RealTimeInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetRealTimeAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::DisableRefTrig(::grpc::ServerContext* context, const DisableRefTrigRequest* request, DisableRefTrigResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto status = library_->DisableRefTrig(task); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + int32 value {}; + auto status = library_->GetRealTimeAttributeInt32(task, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + auto checked_convert_value = [](auto raw_value) { + bool raw_value_is_valid = nidaqmx_grpc::RealTimeInt32AttributeValues_IsValid(raw_value); + auto valid_enum_value = raw_value_is_valid ? raw_value : 0; + return static_cast(valid_enum_value); + }; + response->set_value(checked_convert_value(value)); + response->set_value_raw(value); + return ::grpc::Status::OK; } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::DisableStartTrig(::grpc::ServerContext* context, const DisableStartTrigRequest* request, DisableStartTrigResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto status = library_->DisableStartTrig(task); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::DisconnectTerms(::grpc::ServerContext* context, const DisconnectTermsRequest* request, DisconnectTermsResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto source_terminal_mbcs = convert_from_grpc(request->source_terminal()); - auto source_terminal = source_terminal_mbcs.c_str(); - auto destination_terminal_mbcs = convert_from_grpc(request->destination_terminal()); - auto destination_terminal = destination_terminal_mbcs.c_str(); - auto status = library_->DisconnectTerms(source_terminal, destination_terminal); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ExportSignal(::grpc::ServerContext* context, const ExportSignalRequest* request, ExportSignalResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 signal_id; - switch (request->signal_id_enum_case()) { - case nidaqmx_grpc::ExportSignalRequest::SignalIdEnumCase::kSignalId: { - signal_id = static_cast(request->signal_id()); - break; - } - case nidaqmx_grpc::ExportSignalRequest::SignalIdEnumCase::kSignalIdRaw: { - signal_id = static_cast(request->signal_id_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetRealTimeAttributeUInt32(::grpc::ServerContext* context, const GetRealTimeAttributeUInt32Request* request, GetRealTimeAttributeUInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetRealTimeAttributeUInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::RealTimeUInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetRealTimeAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::RealTimeUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetRealTimeAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::ExportSignalRequest::SignalIdEnumCase::SIGNAL_ID_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for signal_id was not specified or out of range"); - break; + + uInt32 value {}; + auto status = library_->GetRealTimeAttributeUInt32(task, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; } - - auto output_terminal_mbcs = convert_from_grpc(request->output_terminal()); - auto output_terminal = output_terminal_mbcs.c_str(); - auto status = library_->ExportSignal(task, signal_id, output_terminal); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetAIChanCalCalDate(::grpc::ServerContext* context, const GetAIChanCalCalDateRequest* request, GetAIChanCalCalDateResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto channel_name_mbcs = convert_from_grpc(request->channel_name()); - auto channel_name = channel_name_mbcs.c_str(); - uInt32 year{}; - uInt32 month{}; - uInt32 day{}; - uInt32 hour{}; - uInt32 minute{}; - auto status = library_->GetAIChanCalCalDate(task, channel_name, &year, &month, &day, &hour, &minute); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_year(year); - response->set_month(month); - response->set_day(day); - response->set_hour(hour); - response->set_minute(minute); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetAIChanCalExpDate(::grpc::ServerContext* context, const GetAIChanCalExpDateRequest* request, GetAIChanCalExpDateResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto channel_name_mbcs = convert_from_grpc(request->channel_name()); - auto channel_name = channel_name_mbcs.c_str(); - uInt32 year{}; - uInt32 month{}; - uInt32 day{}; - uInt32 hour{}; - uInt32 minute{}; - auto status = library_->GetAIChanCalExpDate(task, channel_name, &year, &month, &day, &hour, &minute); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_year(year); - response->set_month(month); - response->set_day(day); - response->set_hour(hour); - response->set_minute(minute); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetAnalogPowerUpStates(::grpc::ServerContext* context, const GetAnalogPowerUpStatesRequest* request, GetAnalogPowerUpStatesResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - auto get_channelName_if = [](const google::protobuf::RepeatedPtrField& vector, int n) -> const char* { - if (vector.size() > n) { - return vector[n].channel_name().c_str(); - } - return nullptr; - }; - auto get_channelType_if = [](const google::protobuf::RepeatedPtrField& vector, int n) -> int32 { - if (vector.size() > n) { - return vector[n].channel_type(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetRefTrigTimestampVal(::grpc::ServerContext* context, const GetRefTrigTimestampValRequest* request, GetRefTrigTimestampValResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + CVIAbsoluteTime data {}; + auto status = library_->GetRefTrigTimestampVal(task, &data); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - return 0; - }; - auto channels = request->channels(); - if (channels.size() == 0) { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "No values for channels were specified"); + response->set_status(status); + convert_to_grpc(data, response->mutable_data()); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - if (channels.size() > 96) { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "More than 96 values for channels were specified"); + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetScaleAttributeDouble(::grpc::ServerContext* context, const GetScaleAttributeDoubleRequest* request, GetScaleAttributeDoubleResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } + try { + auto scale_name_mbcs = convert_from_grpc(request->scale_name()); + auto scale_name = scale_name_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetScaleAttributeDoubleRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ScaleDoubleAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetScaleAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ScaleDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetScaleAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } - auto get_state_if = [](std::vector& vector, int n) -> float64* { - if (vector.size() > n) { - return &(vector[n]); + float64 value {}; + auto status = library_->GetScaleAttributeDouble(scale_name, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } - return nullptr; - }; - std::vector stateVector; - stateVector.resize(channels.size()); - auto status = std::static_pointer_cast(library_)->GetAnalogPowerUpStates(device_name, get_channelName_if(channels, 0), get_state_if(stateVector, 0), get_channelType_if(channels, 0), get_channelName_if(channels, 1), get_state_if(stateVector, 1), get_channelType_if(channels, 1), get_channelName_if(channels, 2), get_state_if(stateVector, 2), get_channelType_if(channels, 2), get_channelName_if(channels, 3), get_state_if(stateVector, 3), get_channelType_if(channels, 3), get_channelName_if(channels, 4), get_state_if(stateVector, 4), get_channelType_if(channels, 4), get_channelName_if(channels, 5), get_state_if(stateVector, 5), get_channelType_if(channels, 5), get_channelName_if(channels, 6), get_state_if(stateVector, 6), get_channelType_if(channels, 6), get_channelName_if(channels, 7), get_state_if(stateVector, 7), get_channelType_if(channels, 7), get_channelName_if(channels, 8), get_state_if(stateVector, 8), get_channelType_if(channels, 8), get_channelName_if(channels, 9), get_state_if(stateVector, 9), get_channelType_if(channels, 9), get_channelName_if(channels, 10), get_state_if(stateVector, 10), get_channelType_if(channels, 10), get_channelName_if(channels, 11), get_state_if(stateVector, 11), get_channelType_if(channels, 11), get_channelName_if(channels, 12), get_state_if(stateVector, 12), get_channelType_if(channels, 12), get_channelName_if(channels, 13), get_state_if(stateVector, 13), get_channelType_if(channels, 13), get_channelName_if(channels, 14), get_state_if(stateVector, 14), get_channelType_if(channels, 14), get_channelName_if(channels, 15), get_state_if(stateVector, 15), get_channelType_if(channels, 15), get_channelName_if(channels, 16), get_state_if(stateVector, 16), get_channelType_if(channels, 16), get_channelName_if(channels, 17), get_state_if(stateVector, 17), get_channelType_if(channels, 17), get_channelName_if(channels, 18), get_state_if(stateVector, 18), get_channelType_if(channels, 18), get_channelName_if(channels, 19), get_state_if(stateVector, 19), get_channelType_if(channels, 19), get_channelName_if(channels, 20), get_state_if(stateVector, 20), get_channelType_if(channels, 20), get_channelName_if(channels, 21), get_state_if(stateVector, 21), get_channelType_if(channels, 21), get_channelName_if(channels, 22), get_state_if(stateVector, 22), get_channelType_if(channels, 22), get_channelName_if(channels, 23), get_state_if(stateVector, 23), get_channelType_if(channels, 23), get_channelName_if(channels, 24), get_state_if(stateVector, 24), get_channelType_if(channels, 24), get_channelName_if(channels, 25), get_state_if(stateVector, 25), get_channelType_if(channels, 25), get_channelName_if(channels, 26), get_state_if(stateVector, 26), get_channelType_if(channels, 26), get_channelName_if(channels, 27), get_state_if(stateVector, 27), get_channelType_if(channels, 27), get_channelName_if(channels, 28), get_state_if(stateVector, 28), get_channelType_if(channels, 28), get_channelName_if(channels, 29), get_state_if(stateVector, 29), get_channelType_if(channels, 29), get_channelName_if(channels, 30), get_state_if(stateVector, 30), get_channelType_if(channels, 30), get_channelName_if(channels, 31), get_state_if(stateVector, 31), get_channelType_if(channels, 31), get_channelName_if(channels, 32), get_state_if(stateVector, 32), get_channelType_if(channels, 32), get_channelName_if(channels, 33), get_state_if(stateVector, 33), get_channelType_if(channels, 33), get_channelName_if(channels, 34), get_state_if(stateVector, 34), get_channelType_if(channels, 34), get_channelName_if(channels, 35), get_state_if(stateVector, 35), get_channelType_if(channels, 35), get_channelName_if(channels, 36), get_state_if(stateVector, 36), get_channelType_if(channels, 36), get_channelName_if(channels, 37), get_state_if(stateVector, 37), get_channelType_if(channels, 37), get_channelName_if(channels, 38), get_state_if(stateVector, 38), get_channelType_if(channels, 38), get_channelName_if(channels, 39), get_state_if(stateVector, 39), get_channelType_if(channels, 39), get_channelName_if(channels, 40), get_state_if(stateVector, 40), get_channelType_if(channels, 40), get_channelName_if(channels, 41), get_state_if(stateVector, 41), get_channelType_if(channels, 41), get_channelName_if(channels, 42), get_state_if(stateVector, 42), get_channelType_if(channels, 42), get_channelName_if(channels, 43), get_state_if(stateVector, 43), get_channelType_if(channels, 43), get_channelName_if(channels, 44), get_state_if(stateVector, 44), get_channelType_if(channels, 44), get_channelName_if(channels, 45), get_state_if(stateVector, 45), get_channelType_if(channels, 45), get_channelName_if(channels, 46), get_state_if(stateVector, 46), get_channelType_if(channels, 46), get_channelName_if(channels, 47), get_state_if(stateVector, 47), get_channelType_if(channels, 47), get_channelName_if(channels, 48), get_state_if(stateVector, 48), get_channelType_if(channels, 48), get_channelName_if(channels, 49), get_state_if(stateVector, 49), get_channelType_if(channels, 49), get_channelName_if(channels, 50), get_state_if(stateVector, 50), get_channelType_if(channels, 50), get_channelName_if(channels, 51), get_state_if(stateVector, 51), get_channelType_if(channels, 51), get_channelName_if(channels, 52), get_state_if(stateVector, 52), get_channelType_if(channels, 52), get_channelName_if(channels, 53), get_state_if(stateVector, 53), get_channelType_if(channels, 53), get_channelName_if(channels, 54), get_state_if(stateVector, 54), get_channelType_if(channels, 54), get_channelName_if(channels, 55), get_state_if(stateVector, 55), get_channelType_if(channels, 55), get_channelName_if(channels, 56), get_state_if(stateVector, 56), get_channelType_if(channels, 56), get_channelName_if(channels, 57), get_state_if(stateVector, 57), get_channelType_if(channels, 57), get_channelName_if(channels, 58), get_state_if(stateVector, 58), get_channelType_if(channels, 58), get_channelName_if(channels, 59), get_state_if(stateVector, 59), get_channelType_if(channels, 59), get_channelName_if(channels, 60), get_state_if(stateVector, 60), get_channelType_if(channels, 60), get_channelName_if(channels, 61), get_state_if(stateVector, 61), get_channelType_if(channels, 61), get_channelName_if(channels, 62), get_state_if(stateVector, 62), get_channelType_if(channels, 62), get_channelName_if(channels, 63), get_state_if(stateVector, 63), get_channelType_if(channels, 63), get_channelName_if(channels, 64), get_state_if(stateVector, 64), get_channelType_if(channels, 64), get_channelName_if(channels, 65), get_state_if(stateVector, 65), get_channelType_if(channels, 65), get_channelName_if(channels, 66), get_state_if(stateVector, 66), get_channelType_if(channels, 66), get_channelName_if(channels, 67), get_state_if(stateVector, 67), get_channelType_if(channels, 67), get_channelName_if(channels, 68), get_state_if(stateVector, 68), get_channelType_if(channels, 68), get_channelName_if(channels, 69), get_state_if(stateVector, 69), get_channelType_if(channels, 69), get_channelName_if(channels, 70), get_state_if(stateVector, 70), get_channelType_if(channels, 70), get_channelName_if(channels, 71), get_state_if(stateVector, 71), get_channelType_if(channels, 71), get_channelName_if(channels, 72), get_state_if(stateVector, 72), get_channelType_if(channels, 72), get_channelName_if(channels, 73), get_state_if(stateVector, 73), get_channelType_if(channels, 73), get_channelName_if(channels, 74), get_state_if(stateVector, 74), get_channelType_if(channels, 74), get_channelName_if(channels, 75), get_state_if(stateVector, 75), get_channelType_if(channels, 75), get_channelName_if(channels, 76), get_state_if(stateVector, 76), get_channelType_if(channels, 76), get_channelName_if(channels, 77), get_state_if(stateVector, 77), get_channelType_if(channels, 77), get_channelName_if(channels, 78), get_state_if(stateVector, 78), get_channelType_if(channels, 78), get_channelName_if(channels, 79), get_state_if(stateVector, 79), get_channelType_if(channels, 79), get_channelName_if(channels, 80), get_state_if(stateVector, 80), get_channelType_if(channels, 80), get_channelName_if(channels, 81), get_state_if(stateVector, 81), get_channelType_if(channels, 81), get_channelName_if(channels, 82), get_state_if(stateVector, 82), get_channelType_if(channels, 82), get_channelName_if(channels, 83), get_state_if(stateVector, 83), get_channelType_if(channels, 83), get_channelName_if(channels, 84), get_state_if(stateVector, 84), get_channelType_if(channels, 84), get_channelName_if(channels, 85), get_state_if(stateVector, 85), get_channelType_if(channels, 85), get_channelName_if(channels, 86), get_state_if(stateVector, 86), get_channelType_if(channels, 86), get_channelName_if(channels, 87), get_state_if(stateVector, 87), get_channelType_if(channels, 87), get_channelName_if(channels, 88), get_state_if(stateVector, 88), get_channelType_if(channels, 88), get_channelName_if(channels, 89), get_state_if(stateVector, 89), get_channelType_if(channels, 89), get_channelName_if(channels, 90), get_state_if(stateVector, 90), get_channelType_if(channels, 90), get_channelName_if(channels, 91), get_state_if(stateVector, 91), get_channelType_if(channels, 91), get_channelName_if(channels, 92), get_state_if(stateVector, 92), get_channelType_if(channels, 92), get_channelName_if(channels, 93), get_state_if(stateVector, 93), get_channelType_if(channels, 93), get_channelName_if(channels, 94), get_state_if(stateVector, 94), get_channelType_if(channels, 94), get_channelName_if(channels, 95), get_state_if(stateVector, 95), get_channelType_if(channels, 95), get_channelName_if(channels, 96), get_state_if(stateVector, 96), get_channelType_if(channels, 96)); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; } - response->set_status(status); - for (int i = 0; i < stateVector.size(); ++i) { - response->add_power_up_states(stateVector[i]); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetAnalogPowerUpStatesWithOutputType(::grpc::ServerContext* context, const GetAnalogPowerUpStatesWithOutputTypeRequest* request, GetAnalogPowerUpStatesWithOutputTypeResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto channel_names_mbcs = convert_from_grpc(request->channel_names()); - auto channel_names = channel_names_mbcs.c_str(); - uInt32 array_size_copy = request->array_size(); - response->mutable_state_array()->Resize(array_size_copy, 0); - float64* state_array = response->mutable_state_array()->mutable_data(); - response->mutable_channel_type_array_raw()->Resize(array_size_copy, 0); - int32* channel_type_array = reinterpret_cast(response->mutable_channel_type_array_raw()->mutable_data()); - auto status = library_->GetAnalogPowerUpStatesWithOutputType(channel_names, state_array, channel_type_array, &array_size_copy); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - response->mutable_state_array()->Resize(array_size_copy, 0); - response->mutable_channel_type_array()->Clear(); - response->mutable_channel_type_array()->Reserve(array_size_copy); - std::transform( - response->channel_type_array_raw().begin(), - response->channel_type_array_raw().begin() + array_size_copy, - google::protobuf::RepeatedFieldBackInserter(response->mutable_channel_type_array()), - [&](auto x) { - return static_cast(x); - }); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetScaleAttributeDoubleArray(::grpc::ServerContext* context, const GetScaleAttributeDoubleArrayRequest* request, GetScaleAttributeDoubleArrayResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto scale_name_mbcs = convert_from_grpc(request->scale_name()); + auto scale_name = scale_name_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetScaleAttributeDoubleArrayRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ScaleDoubleArrayAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetScaleAttributeDoubleArrayRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ScaleDoubleArrayAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetScaleAttributeDoubleArrayRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetArmStartTrigTimestampVal(::grpc::ServerContext* context, const GetArmStartTrigTimestampValRequest* request, GetArmStartTrigTimestampValResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - CVIAbsoluteTime data{}; - auto status = library_->GetArmStartTrigTimestampVal(task, &data); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - convert_to_grpc(data, response->mutable_data()); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetArmStartTrigTrigWhen(::grpc::ServerContext* context, const GetArmStartTrigTrigWhenRequest* request, GetArmStartTrigTrigWhenResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - CVIAbsoluteTime data{}; - auto status = library_->GetArmStartTrigTrigWhen(task, &data); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - convert_to_grpc(data, response->mutable_data()); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + while (true) { + auto status = library_->GetScaleAttributeDoubleArray(scale_name, attribute, nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + uInt32 size = status; + + response->mutable_value()->Resize(size, 0); + float64* value = response->mutable_value()->mutable_data(); + status = library_->GetScaleAttributeDoubleArray(scale_name, attribute, value, size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + return ::grpc::Status::OK; + } + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetAutoConfiguredCDAQSyncConnections(::grpc::ServerContext* context, const GetAutoConfiguredCDAQSyncConnectionsRequest* request, GetAutoConfiguredCDAQSyncConnectionsResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - while (true) { - auto status = library_->GetAutoConfiguredCDAQSyncConnections(nullptr, 0); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetScaleAttributeInt32(::grpc::ServerContext* context, const GetScaleAttributeInt32Request* request, GetScaleAttributeInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto scale_name_mbcs = convert_from_grpc(request->scale_name()); + auto scale_name = scale_name_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetScaleAttributeInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ScaleInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetScaleAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ScaleInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetScaleAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - uInt32 port_list_size = status; - std::string port_list; - if (port_list_size > 0) { - port_list.resize(port_list_size - 1); - } - status = library_->GetAutoConfiguredCDAQSyncConnections((char*)port_list.data(), port_list_size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(port_list_size)) { - // buffer is now too small, try again - continue; - } + int32 value {}; + auto status = library_->GetScaleAttributeInt32(scale_name, attribute, &value); if (!status_ok(status)) { return ConvertApiErrorStatusForTaskHandle(context, status, 0); } response->set_status(status); - std::string port_list_utf8; - convert_to_grpc(port_list, &port_list_utf8); - response->set_port_list(port_list_utf8); - nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_port_list())); + auto checked_convert_value = [](auto raw_value) { + bool raw_value_is_valid = nidaqmx_grpc::ScaleInt32AttributeValues_IsValid(raw_value); + auto valid_enum_value = raw_value_is_valid ? raw_value : 0; + return static_cast(valid_enum_value); + }; + response->set_value(checked_convert_value(value)); + response->set_value_raw(value); return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetBufferAttributeUInt32(::grpc::ServerContext* context, const GetBufferAttributeUInt32Request* request, GetBufferAttributeUInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetBufferAttributeUInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::BufferUInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetBufferAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::BufferUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetBufferAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - uInt32 value{}; - auto status = library_->GetBufferAttributeUInt32(task, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetCalInfoAttributeBool(::grpc::ServerContext* context, const GetCalInfoAttributeBoolRequest* request, GetCalInfoAttributeBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetCalInfoAttributeBoolRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::CalibrationInfoBoolAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetCalInfoAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::CalibrationInfoBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetCalInfoAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - bool32 value{}; - auto status = library_->GetCalInfoAttributeBool(device_name, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetCalInfoAttributeDouble(::grpc::ServerContext* context, const GetCalInfoAttributeDoubleRequest* request, GetCalInfoAttributeDoubleResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetCalInfoAttributeDoubleRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::CalibrationInfoDoubleAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetCalInfoAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::CalibrationInfoDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetCalInfoAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - float64 value{}; - auto status = library_->GetCalInfoAttributeDouble(device_name, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetCalInfoAttributeString(::grpc::ServerContext* context, const GetCalInfoAttributeStringRequest* request, GetCalInfoAttributeStringResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetCalInfoAttributeStringRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::CalibrationInfoStringAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetCalInfoAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::CalibrationInfoStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetCalInfoAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetScaleAttributeString(::grpc::ServerContext* context, const GetScaleAttributeStringRequest* request, GetScaleAttributeStringResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - - while (true) { - auto status = library_->GetCalInfoAttributeString(device_name, attribute, nullptr, 0); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + try { + auto scale_name_mbcs = convert_from_grpc(request->scale_name()); + auto scale_name = scale_name_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetScaleAttributeStringRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ScaleStringAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetScaleAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ScaleStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetScaleAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - uInt32 size = status; - std::string value; - if (size > 0) { - value.resize(size - 1); - } - status = library_->GetCalInfoAttributeString(device_name, attribute, (char*)value.data(), size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { - // buffer is now too small, try again - continue; - } + + while (true) { + auto status = library_->GetScaleAttributeString(scale_name, attribute, nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + uInt32 size = status; + + std::string value; + if (size > 0) { + value.resize(size - 1); + } + status = library_->GetScaleAttributeString(scale_name, attribute, (char*)value.data(), size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + std::string value_utf8; + convert_to_grpc(value, &value_utf8); + response->set_value(value_utf8); + nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); + return ::grpc::Status::OK; + } + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetSelfCalLastDateAndTime(::grpc::ServerContext* context, const GetSelfCalLastDateAndTimeRequest* request, GetSelfCalLastDateAndTimeResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + uInt32 year {}; + uInt32 month {}; + uInt32 day {}; + uInt32 hour {}; + uInt32 minute {}; + auto status = library_->GetSelfCalLastDateAndTime(device_name, &year, &month, &day, &hour, &minute); if (!status_ok(status)) { return ConvertApiErrorStatusForTaskHandle(context, status, 0); } response->set_status(status); - std::string value_utf8; - convert_to_grpc(value, &value_utf8); - response->set_value(value_utf8); - nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); + response->set_year(year); + response->set_month(month); + response->set_day(day); + response->set_hour(hour); + response->set_minute(minute); return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetCalInfoAttributeUInt32(::grpc::ServerContext* context, const GetCalInfoAttributeUInt32Request* request, GetCalInfoAttributeUInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetCalInfoAttributeUInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::CalibrationInfoUInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetCalInfoAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::CalibrationInfoUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetCalInfoAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - uInt32 value{}; - auto status = library_->GetCalInfoAttributeUInt32(device_name, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetChanAttributeBool(::grpc::ServerContext* context, const GetChanAttributeBoolRequest* request, GetChanAttributeBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto channel_mbcs = convert_from_grpc(request->channel()); - auto channel = channel_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetChanAttributeBoolRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ChannelBoolAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetChanAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ChannelBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetChanAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - bool32 value{}; - auto status = library_->GetChanAttributeBool(task, channel, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetChanAttributeDouble(::grpc::ServerContext* context, const GetChanAttributeDoubleRequest* request, GetChanAttributeDoubleResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto channel_mbcs = convert_from_grpc(request->channel()); - auto channel = channel_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetChanAttributeDoubleRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ChannelDoubleAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetChanAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ChannelDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetChanAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - float64 value{}; - auto status = library_->GetChanAttributeDouble(task, channel, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetChanAttributeDoubleArray(::grpc::ServerContext* context, const GetChanAttributeDoubleArrayRequest* request, GetChanAttributeDoubleArrayResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto channel_mbcs = convert_from_grpc(request->channel()); - auto channel = channel_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetChanAttributeDoubleArrayRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ChannelDoubleArrayAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetChanAttributeDoubleArrayRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ChannelDoubleArrayAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetChanAttributeDoubleArrayRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetStartTrigTimestampVal(::grpc::ServerContext* context, const GetStartTrigTimestampValRequest* request, GetStartTrigTimestampValResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - - while (true) { - auto status = library_->GetChanAttributeDoubleArray(task, channel, attribute, nullptr, 0); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - uInt32 size = status; - - response->mutable_value()->Resize(size, 0); - float64* value = response->mutable_value()->mutable_data(); - status = library_->GetChanAttributeDoubleArray(task, channel, attribute, value, size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { - // buffer is now too small, try again - continue; - } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + CVIAbsoluteTime data {}; + auto status = library_->GetStartTrigTimestampVal(task, &data); if (!status_ok(status)) { return ConvertApiErrorStatusForTaskHandle(context, status, task); } response->set_status(status); + convert_to_grpc(data, response->mutable_data()); return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetChanAttributeInt32(::grpc::ServerContext* context, const GetChanAttributeInt32Request* request, GetChanAttributeInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto channel_mbcs = convert_from_grpc(request->channel()); - auto channel = channel_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetChanAttributeInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ChannelInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetChanAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ChannelInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetChanAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - int32 value{}; - auto status = library_->GetChanAttributeInt32(task, channel, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - auto checked_convert_value = [](auto raw_value) { - bool raw_value_is_valid = nidaqmx_grpc::ChannelInt32AttributeValues_IsValid(raw_value); - auto valid_enum_value = raw_value_is_valid ? raw_value : 0; - return static_cast(valid_enum_value); - }; - response->set_value(checked_convert_value(value)); - response->set_value_raw(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetChanAttributeString(::grpc::ServerContext* context, const GetChanAttributeStringRequest* request, GetChanAttributeStringResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto channel_mbcs = convert_from_grpc(request->channel()); - auto channel = channel_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetChanAttributeStringRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ChannelStringAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetChanAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ChannelStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetChanAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetStartTrigTrigWhen(::grpc::ServerContext* context, const GetStartTrigTrigWhenRequest* request, GetStartTrigTrigWhenResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - - while (true) { - auto status = library_->GetChanAttributeString(task, channel, attribute, nullptr, 0); + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + CVIAbsoluteTime data {}; + auto status = library_->GetStartTrigTrigWhen(task, &data); if (!status_ok(status)) { return ConvertApiErrorStatusForTaskHandle(context, status, task); } - uInt32 size = status; + response->set_status(status); + convert_to_grpc(data, response->mutable_data()); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } - std::string value; - if (size > 0) { - value.resize(size - 1); - } - status = library_->GetChanAttributeString(task, channel, attribute, (char*)value.data(), size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { - // buffer is now too small, try again - continue; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetSyncPulseTimeWhen(::grpc::ServerContext* context, const GetSyncPulseTimeWhenRequest* request, GetSyncPulseTimeWhenResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + CVIAbsoluteTime data {}; + auto status = library_->GetSyncPulseTimeWhen(task, &data); if (!status_ok(status)) { return ConvertApiErrorStatusForTaskHandle(context, status, task); } response->set_status(status); - std::string value_utf8; - convert_to_grpc(value, &value_utf8); - response->set_value(value_utf8); - nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); + convert_to_grpc(data, response->mutable_data()); return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetChanAttributeUInt32(::grpc::ServerContext* context, const GetChanAttributeUInt32Request* request, GetChanAttributeUInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto channel_mbcs = convert_from_grpc(request->channel()); - auto channel = channel_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetChanAttributeUInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ChannelUInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetChanAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ChannelUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetChanAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - uInt32 value{}; - auto status = library_->GetChanAttributeUInt32(task, channel, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetSystemInfoAttributeString(::grpc::ServerContext* context, const GetSystemInfoAttributeStringRequest* request, GetSystemInfoAttributeStringResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetSystemInfoAttributeStringRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::SystemStringAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetSystemInfoAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::SystemStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetSystemInfoAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetDeviceAttributeBool(::grpc::ServerContext* context, const GetDeviceAttributeBoolRequest* request, GetDeviceAttributeBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetDeviceAttributeBoolRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::DeviceBoolAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetDeviceAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::DeviceBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetDeviceAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - bool32 value{}; - auto status = library_->GetDeviceAttributeBool(device_name, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetDeviceAttributeDouble(::grpc::ServerContext* context, const GetDeviceAttributeDoubleRequest* request, GetDeviceAttributeDoubleResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetDeviceAttributeDoubleRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::DeviceDoubleAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetDeviceAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::DeviceDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetDeviceAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - float64 value{}; - auto status = library_->GetDeviceAttributeDouble(device_name, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + while (true) { + auto status = library_->GetSystemInfoAttributeString(attribute, nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + uInt32 size = status; -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetDeviceAttributeDoubleArray(::grpc::ServerContext* context, const GetDeviceAttributeDoubleArrayRequest* request, GetDeviceAttributeDoubleArrayResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetDeviceAttributeDoubleArrayRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::DeviceDoubleArrayAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetDeviceAttributeDoubleArrayRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::DeviceDoubleArrayAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetDeviceAttributeDoubleArrayRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + std::string value; + if (size > 0) { + value.resize(size - 1); + } + status = library_->GetSystemInfoAttributeString(attribute, (char*)value.data(), size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + std::string value_utf8; + convert_to_grpc(value, &value_utf8); + response->set_value(value_utf8); + nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); + return ::grpc::Status::OK; } } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } - while (true) { - auto status = library_->GetDeviceAttributeDoubleArray(device_name, attribute, nullptr, 0); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetSystemInfoAttributeUInt32(::grpc::ServerContext* context, const GetSystemInfoAttributeUInt32Request* request, GetSystemInfoAttributeUInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetSystemInfoAttributeUInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::SystemUInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetSystemInfoAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::SystemUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetSystemInfoAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - uInt32 size = status; - response->mutable_value()->Resize(size, 0); - float64* value = response->mutable_value()->mutable_data(); - status = library_->GetDeviceAttributeDoubleArray(device_name, attribute, value, size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { - // buffer is now too small, try again - continue; - } + uInt32 value {}; + auto status = library_->GetSystemInfoAttributeUInt32(attribute, &value); if (!status_ok(status)) { return ConvertApiErrorStatusForTaskHandle(context, status, 0); } response->set_status(status); + response->set_value(value); return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetDeviceAttributeInt32(::grpc::ServerContext* context, const GetDeviceAttributeInt32Request* request, GetDeviceAttributeInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetDeviceAttributeInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::DeviceInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetDeviceAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::DeviceInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetDeviceAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - int32 value{}; - auto status = library_->GetDeviceAttributeInt32(device_name, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - auto checked_convert_value = [](auto raw_value) { - bool raw_value_is_valid = nidaqmx_grpc::DeviceInt32AttributeValues_IsValid(raw_value); - auto valid_enum_value = raw_value_is_valid ? raw_value : 0; - return static_cast(valid_enum_value); - }; - response->set_value(checked_convert_value(value)); - response->set_value_raw(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetDeviceAttributeInt32Array(::grpc::ServerContext* context, const GetDeviceAttributeInt32ArrayRequest* request, GetDeviceAttributeInt32ArrayResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetDeviceAttributeInt32ArrayRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::DeviceInt32ArrayAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetDeviceAttributeInt32ArrayRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::DeviceInt32ArrayAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetDeviceAttributeInt32ArrayRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetTaskAttributeBool(::grpc::ServerContext* context, const GetTaskAttributeBoolRequest* request, GetTaskAttributeBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - - while (true) { - auto status = library_->GetDeviceAttributeInt32Array(device_name, attribute, nullptr, 0); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetTaskAttributeBoolRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TaskBoolAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTaskAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TaskBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTaskAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - uInt32 size = status; - response->mutable_value_raw()->Resize(size, 0); - int32* value = reinterpret_cast(response->mutable_value_raw()->mutable_data()); - status = library_->GetDeviceAttributeInt32Array(device_name, attribute, value, size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { - // buffer is now too small, try again - continue; - } + bool32 value {}; + auto status = library_->GetTaskAttributeBool(task, attribute, &value); if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + return ConvertApiErrorStatusForTaskHandle(context, status, task); } response->set_status(status); - auto checked_convert_value = [](auto raw_value) { - bool raw_value_is_valid = nidaqmx_grpc::DeviceInt32AttributeValues_IsValid(raw_value); - auto valid_enum_value = raw_value_is_valid ? raw_value : 0; - return static_cast(valid_enum_value); - }; - response->mutable_value()->Clear(); - response->mutable_value()->Reserve(size); - std::transform( - response->value_raw().begin(), - response->value_raw().begin() + size, - google::protobuf::RepeatedFieldBackInserter(response->mutable_value()), - [&](auto x) { - return checked_convert_value(x); - }); + response->set_value(value); return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetDeviceAttributeString(::grpc::ServerContext* context, const GetDeviceAttributeStringRequest* request, GetDeviceAttributeStringResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetDeviceAttributeStringRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::DeviceStringAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetDeviceAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::DeviceStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetDeviceAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetTaskAttributeString(::grpc::ServerContext* context, const GetTaskAttributeStringRequest* request, GetTaskAttributeStringResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - - while (true) { - auto status = library_->GetDeviceAttributeString(device_name, attribute, nullptr, 0); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetTaskAttributeStringRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TaskStringAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTaskAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TaskStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTaskAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - uInt32 size = status; - std::string value; - if (size > 0) { - value.resize(size - 1); - } - status = library_->GetDeviceAttributeString(device_name, attribute, (char*)value.data(), size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { - // buffer is now too small, try again - continue; + + while (true) { + auto status = library_->GetTaskAttributeString(task, attribute, nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + uInt32 size = status; + + std::string value; + if (size > 0) { + value.resize(size - 1); + } + status = library_->GetTaskAttributeString(task, attribute, (char*)value.data(), size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + std::string value_utf8; + convert_to_grpc(value, &value_utf8); + response->set_value(value_utf8); + nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); + return ::grpc::Status::OK; + } + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetTaskAttributeUInt32(::grpc::ServerContext* context, const GetTaskAttributeUInt32Request* request, GetTaskAttributeUInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetTaskAttributeUInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TaskUInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTaskAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TaskUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTaskAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } + + uInt32 value {}; + auto status = library_->GetTaskAttributeUInt32(task, attribute, &value); if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + return ConvertApiErrorStatusForTaskHandle(context, status, task); } response->set_status(status); - std::string value_utf8; - convert_to_grpc(value, &value_utf8); - response->set_value(value_utf8); - nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); + response->set_value(value); return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetDeviceAttributeUInt32(::grpc::ServerContext* context, const GetDeviceAttributeUInt32Request* request, GetDeviceAttributeUInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetDeviceAttributeUInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::DeviceUInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetDeviceAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::DeviceUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetDeviceAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - uInt32 value{}; - auto status = library_->GetDeviceAttributeUInt32(device_name, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetDeviceAttributeUInt32Array(::grpc::ServerContext* context, const GetDeviceAttributeUInt32ArrayRequest* request, GetDeviceAttributeUInt32ArrayResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetDeviceAttributeUInt32ArrayRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::DeviceUInt32ArrayAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetDeviceAttributeUInt32ArrayRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::DeviceUInt32ArrayAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetDeviceAttributeUInt32ArrayRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetTimingAttributeBool(::grpc::ServerContext* context, const GetTimingAttributeBoolRequest* request, GetTimingAttributeBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - - while (true) { - auto status = library_->GetDeviceAttributeUInt32Array(device_name, attribute, nullptr, 0); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetTimingAttributeBoolRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TimingBoolAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTimingAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TimingBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTimingAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - uInt32 size = status; - response->mutable_value()->Resize(size, 0); - uInt32* value = reinterpret_cast(response->mutable_value()->mutable_data()); - status = library_->GetDeviceAttributeUInt32Array(device_name, attribute, value, size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { - // buffer is now too small, try again - continue; - } + bool32 value {}; + auto status = library_->GetTimingAttributeBool(task, attribute, &value); if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + return ConvertApiErrorStatusForTaskHandle(context, status, task); } response->set_status(status); + response->set_value(value); return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetDigitalLogicFamilyPowerUpState(::grpc::ServerContext* context, const GetDigitalLogicFamilyPowerUpStateRequest* request, GetDigitalLogicFamilyPowerUpStateResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - int32 logic_family{}; - auto status = library_->GetDigitalLogicFamilyPowerUpState(device_name, &logic_family); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - response->set_logic_family(logic_family); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetDigitalPowerUpStates(::grpc::ServerContext* context, const GetDigitalPowerUpStatesRequest* request, GetDigitalPowerUpStatesResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - auto get_channelName_if = [](const google::protobuf::RepeatedPtrField& vector, int n) -> const char* { - if (vector.size() > n) { - return vector[n].c_str(); - } - return nullptr; - }; - auto channel_name = request->channel_name(); - if (channel_name.size() == 0) { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "No values for channelName were specified"); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetTimingAttributeDouble(::grpc::ServerContext* context, const GetTimingAttributeDoubleRequest* request, GetTimingAttributeDoubleResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - if (channel_name.size() > 96) { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "More than 96 values for channelName were specified"); - } - - auto get_state_if = [](std::vector& vector, int n) -> int32* { - if (vector.size() > n) { - return &(vector[n]); + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetTimingAttributeDoubleRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TimingDoubleAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTimingAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TimingDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTimingAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - return nullptr; - }; - std::vector stateVector; - stateVector.resize(channel_name.size()); - auto status = std::static_pointer_cast(library_)->GetDigitalPowerUpStates(device_name, get_channelName_if(channel_name, 0), get_state_if(stateVector, 0), get_channelName_if(channel_name, 1), get_state_if(stateVector, 1), get_channelName_if(channel_name, 2), get_state_if(stateVector, 2), get_channelName_if(channel_name, 3), get_state_if(stateVector, 3), get_channelName_if(channel_name, 4), get_state_if(stateVector, 4), get_channelName_if(channel_name, 5), get_state_if(stateVector, 5), get_channelName_if(channel_name, 6), get_state_if(stateVector, 6), get_channelName_if(channel_name, 7), get_state_if(stateVector, 7), get_channelName_if(channel_name, 8), get_state_if(stateVector, 8), get_channelName_if(channel_name, 9), get_state_if(stateVector, 9), get_channelName_if(channel_name, 10), get_state_if(stateVector, 10), get_channelName_if(channel_name, 11), get_state_if(stateVector, 11), get_channelName_if(channel_name, 12), get_state_if(stateVector, 12), get_channelName_if(channel_name, 13), get_state_if(stateVector, 13), get_channelName_if(channel_name, 14), get_state_if(stateVector, 14), get_channelName_if(channel_name, 15), get_state_if(stateVector, 15), get_channelName_if(channel_name, 16), get_state_if(stateVector, 16), get_channelName_if(channel_name, 17), get_state_if(stateVector, 17), get_channelName_if(channel_name, 18), get_state_if(stateVector, 18), get_channelName_if(channel_name, 19), get_state_if(stateVector, 19), get_channelName_if(channel_name, 20), get_state_if(stateVector, 20), get_channelName_if(channel_name, 21), get_state_if(stateVector, 21), get_channelName_if(channel_name, 22), get_state_if(stateVector, 22), get_channelName_if(channel_name, 23), get_state_if(stateVector, 23), get_channelName_if(channel_name, 24), get_state_if(stateVector, 24), get_channelName_if(channel_name, 25), get_state_if(stateVector, 25), get_channelName_if(channel_name, 26), get_state_if(stateVector, 26), get_channelName_if(channel_name, 27), get_state_if(stateVector, 27), get_channelName_if(channel_name, 28), get_state_if(stateVector, 28), get_channelName_if(channel_name, 29), get_state_if(stateVector, 29), get_channelName_if(channel_name, 30), get_state_if(stateVector, 30), get_channelName_if(channel_name, 31), get_state_if(stateVector, 31), get_channelName_if(channel_name, 32), get_state_if(stateVector, 32), get_channelName_if(channel_name, 33), get_state_if(stateVector, 33), get_channelName_if(channel_name, 34), get_state_if(stateVector, 34), get_channelName_if(channel_name, 35), get_state_if(stateVector, 35), get_channelName_if(channel_name, 36), get_state_if(stateVector, 36), get_channelName_if(channel_name, 37), get_state_if(stateVector, 37), get_channelName_if(channel_name, 38), get_state_if(stateVector, 38), get_channelName_if(channel_name, 39), get_state_if(stateVector, 39), get_channelName_if(channel_name, 40), get_state_if(stateVector, 40), get_channelName_if(channel_name, 41), get_state_if(stateVector, 41), get_channelName_if(channel_name, 42), get_state_if(stateVector, 42), get_channelName_if(channel_name, 43), get_state_if(stateVector, 43), get_channelName_if(channel_name, 44), get_state_if(stateVector, 44), get_channelName_if(channel_name, 45), get_state_if(stateVector, 45), get_channelName_if(channel_name, 46), get_state_if(stateVector, 46), get_channelName_if(channel_name, 47), get_state_if(stateVector, 47), get_channelName_if(channel_name, 48), get_state_if(stateVector, 48), get_channelName_if(channel_name, 49), get_state_if(stateVector, 49), get_channelName_if(channel_name, 50), get_state_if(stateVector, 50), get_channelName_if(channel_name, 51), get_state_if(stateVector, 51), get_channelName_if(channel_name, 52), get_state_if(stateVector, 52), get_channelName_if(channel_name, 53), get_state_if(stateVector, 53), get_channelName_if(channel_name, 54), get_state_if(stateVector, 54), get_channelName_if(channel_name, 55), get_state_if(stateVector, 55), get_channelName_if(channel_name, 56), get_state_if(stateVector, 56), get_channelName_if(channel_name, 57), get_state_if(stateVector, 57), get_channelName_if(channel_name, 58), get_state_if(stateVector, 58), get_channelName_if(channel_name, 59), get_state_if(stateVector, 59), get_channelName_if(channel_name, 60), get_state_if(stateVector, 60), get_channelName_if(channel_name, 61), get_state_if(stateVector, 61), get_channelName_if(channel_name, 62), get_state_if(stateVector, 62), get_channelName_if(channel_name, 63), get_state_if(stateVector, 63), get_channelName_if(channel_name, 64), get_state_if(stateVector, 64), get_channelName_if(channel_name, 65), get_state_if(stateVector, 65), get_channelName_if(channel_name, 66), get_state_if(stateVector, 66), get_channelName_if(channel_name, 67), get_state_if(stateVector, 67), get_channelName_if(channel_name, 68), get_state_if(stateVector, 68), get_channelName_if(channel_name, 69), get_state_if(stateVector, 69), get_channelName_if(channel_name, 70), get_state_if(stateVector, 70), get_channelName_if(channel_name, 71), get_state_if(stateVector, 71), get_channelName_if(channel_name, 72), get_state_if(stateVector, 72), get_channelName_if(channel_name, 73), get_state_if(stateVector, 73), get_channelName_if(channel_name, 74), get_state_if(stateVector, 74), get_channelName_if(channel_name, 75), get_state_if(stateVector, 75), get_channelName_if(channel_name, 76), get_state_if(stateVector, 76), get_channelName_if(channel_name, 77), get_state_if(stateVector, 77), get_channelName_if(channel_name, 78), get_state_if(stateVector, 78), get_channelName_if(channel_name, 79), get_state_if(stateVector, 79), get_channelName_if(channel_name, 80), get_state_if(stateVector, 80), get_channelName_if(channel_name, 81), get_state_if(stateVector, 81), get_channelName_if(channel_name, 82), get_state_if(stateVector, 82), get_channelName_if(channel_name, 83), get_state_if(stateVector, 83), get_channelName_if(channel_name, 84), get_state_if(stateVector, 84), get_channelName_if(channel_name, 85), get_state_if(stateVector, 85), get_channelName_if(channel_name, 86), get_state_if(stateVector, 86), get_channelName_if(channel_name, 87), get_state_if(stateVector, 87), get_channelName_if(channel_name, 88), get_state_if(stateVector, 88), get_channelName_if(channel_name, 89), get_state_if(stateVector, 89), get_channelName_if(channel_name, 90), get_state_if(stateVector, 90), get_channelName_if(channel_name, 91), get_state_if(stateVector, 91), get_channelName_if(channel_name, 92), get_state_if(stateVector, 92), get_channelName_if(channel_name, 93), get_state_if(stateVector, 93), get_channelName_if(channel_name, 94), get_state_if(stateVector, 94), get_channelName_if(channel_name, 95), get_state_if(stateVector, 95), get_channelName_if(channel_name, 96), get_state_if(stateVector, 96)); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - for (int i = 0; i < stateVector.size(); ++i) { - response->add_power_up_states(static_cast(stateVector[i])); - } - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetDigitalPullUpPullDownStates(::grpc::ServerContext* context, const GetDigitalPullUpPullDownStatesRequest* request, GetDigitalPullUpPullDownStatesResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - auto get_channelName_if = [](const google::protobuf::RepeatedPtrField& vector, int n) -> const char* { - if (vector.size() > n) { - return vector[n].c_str(); + float64 value {}; + auto status = library_->GetTimingAttributeDouble(task, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - return nullptr; - }; - auto channel_name = request->channel_name(); - if (channel_name.size() == 0) { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "No values for channelName were specified"); - } - if (channel_name.size() > 96) { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "More than 96 values for channelName were specified"); + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; } - - auto get_state_if = [](std::vector& vector, int n) -> int32* { - if (vector.size() > n) { - return &(vector[n]); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetTimingAttributeExBool(::grpc::ServerContext* context, const GetTimingAttributeExBoolRequest* request, GetTimingAttributeExBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto device_names_mbcs = convert_from_grpc(request->device_names()); + auto device_names = device_names_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetTimingAttributeExBoolRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TimingBoolAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTimingAttributeExBoolRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TimingBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTimingAttributeExBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - return nullptr; - }; - std::vector stateVector; - stateVector.resize(channel_name.size()); - auto status = std::static_pointer_cast(library_)->GetDigitalPullUpPullDownStates(device_name, get_channelName_if(channel_name, 0), get_state_if(stateVector, 0), get_channelName_if(channel_name, 1), get_state_if(stateVector, 1), get_channelName_if(channel_name, 2), get_state_if(stateVector, 2), get_channelName_if(channel_name, 3), get_state_if(stateVector, 3), get_channelName_if(channel_name, 4), get_state_if(stateVector, 4), get_channelName_if(channel_name, 5), get_state_if(stateVector, 5), get_channelName_if(channel_name, 6), get_state_if(stateVector, 6), get_channelName_if(channel_name, 7), get_state_if(stateVector, 7), get_channelName_if(channel_name, 8), get_state_if(stateVector, 8), get_channelName_if(channel_name, 9), get_state_if(stateVector, 9), get_channelName_if(channel_name, 10), get_state_if(stateVector, 10), get_channelName_if(channel_name, 11), get_state_if(stateVector, 11), get_channelName_if(channel_name, 12), get_state_if(stateVector, 12), get_channelName_if(channel_name, 13), get_state_if(stateVector, 13), get_channelName_if(channel_name, 14), get_state_if(stateVector, 14), get_channelName_if(channel_name, 15), get_state_if(stateVector, 15), get_channelName_if(channel_name, 16), get_state_if(stateVector, 16), get_channelName_if(channel_name, 17), get_state_if(stateVector, 17), get_channelName_if(channel_name, 18), get_state_if(stateVector, 18), get_channelName_if(channel_name, 19), get_state_if(stateVector, 19), get_channelName_if(channel_name, 20), get_state_if(stateVector, 20), get_channelName_if(channel_name, 21), get_state_if(stateVector, 21), get_channelName_if(channel_name, 22), get_state_if(stateVector, 22), get_channelName_if(channel_name, 23), get_state_if(stateVector, 23), get_channelName_if(channel_name, 24), get_state_if(stateVector, 24), get_channelName_if(channel_name, 25), get_state_if(stateVector, 25), get_channelName_if(channel_name, 26), get_state_if(stateVector, 26), get_channelName_if(channel_name, 27), get_state_if(stateVector, 27), get_channelName_if(channel_name, 28), get_state_if(stateVector, 28), get_channelName_if(channel_name, 29), get_state_if(stateVector, 29), get_channelName_if(channel_name, 30), get_state_if(stateVector, 30), get_channelName_if(channel_name, 31), get_state_if(stateVector, 31), get_channelName_if(channel_name, 32), get_state_if(stateVector, 32), get_channelName_if(channel_name, 33), get_state_if(stateVector, 33), get_channelName_if(channel_name, 34), get_state_if(stateVector, 34), get_channelName_if(channel_name, 35), get_state_if(stateVector, 35), get_channelName_if(channel_name, 36), get_state_if(stateVector, 36), get_channelName_if(channel_name, 37), get_state_if(stateVector, 37), get_channelName_if(channel_name, 38), get_state_if(stateVector, 38), get_channelName_if(channel_name, 39), get_state_if(stateVector, 39), get_channelName_if(channel_name, 40), get_state_if(stateVector, 40), get_channelName_if(channel_name, 41), get_state_if(stateVector, 41), get_channelName_if(channel_name, 42), get_state_if(stateVector, 42), get_channelName_if(channel_name, 43), get_state_if(stateVector, 43), get_channelName_if(channel_name, 44), get_state_if(stateVector, 44), get_channelName_if(channel_name, 45), get_state_if(stateVector, 45), get_channelName_if(channel_name, 46), get_state_if(stateVector, 46), get_channelName_if(channel_name, 47), get_state_if(stateVector, 47), get_channelName_if(channel_name, 48), get_state_if(stateVector, 48), get_channelName_if(channel_name, 49), get_state_if(stateVector, 49), get_channelName_if(channel_name, 50), get_state_if(stateVector, 50), get_channelName_if(channel_name, 51), get_state_if(stateVector, 51), get_channelName_if(channel_name, 52), get_state_if(stateVector, 52), get_channelName_if(channel_name, 53), get_state_if(stateVector, 53), get_channelName_if(channel_name, 54), get_state_if(stateVector, 54), get_channelName_if(channel_name, 55), get_state_if(stateVector, 55), get_channelName_if(channel_name, 56), get_state_if(stateVector, 56), get_channelName_if(channel_name, 57), get_state_if(stateVector, 57), get_channelName_if(channel_name, 58), get_state_if(stateVector, 58), get_channelName_if(channel_name, 59), get_state_if(stateVector, 59), get_channelName_if(channel_name, 60), get_state_if(stateVector, 60), get_channelName_if(channel_name, 61), get_state_if(stateVector, 61), get_channelName_if(channel_name, 62), get_state_if(stateVector, 62), get_channelName_if(channel_name, 63), get_state_if(stateVector, 63), get_channelName_if(channel_name, 64), get_state_if(stateVector, 64), get_channelName_if(channel_name, 65), get_state_if(stateVector, 65), get_channelName_if(channel_name, 66), get_state_if(stateVector, 66), get_channelName_if(channel_name, 67), get_state_if(stateVector, 67), get_channelName_if(channel_name, 68), get_state_if(stateVector, 68), get_channelName_if(channel_name, 69), get_state_if(stateVector, 69), get_channelName_if(channel_name, 70), get_state_if(stateVector, 70), get_channelName_if(channel_name, 71), get_state_if(stateVector, 71), get_channelName_if(channel_name, 72), get_state_if(stateVector, 72), get_channelName_if(channel_name, 73), get_state_if(stateVector, 73), get_channelName_if(channel_name, 74), get_state_if(stateVector, 74), get_channelName_if(channel_name, 75), get_state_if(stateVector, 75), get_channelName_if(channel_name, 76), get_state_if(stateVector, 76), get_channelName_if(channel_name, 77), get_state_if(stateVector, 77), get_channelName_if(channel_name, 78), get_state_if(stateVector, 78), get_channelName_if(channel_name, 79), get_state_if(stateVector, 79), get_channelName_if(channel_name, 80), get_state_if(stateVector, 80), get_channelName_if(channel_name, 81), get_state_if(stateVector, 81), get_channelName_if(channel_name, 82), get_state_if(stateVector, 82), get_channelName_if(channel_name, 83), get_state_if(stateVector, 83), get_channelName_if(channel_name, 84), get_state_if(stateVector, 84), get_channelName_if(channel_name, 85), get_state_if(stateVector, 85), get_channelName_if(channel_name, 86), get_state_if(stateVector, 86), get_channelName_if(channel_name, 87), get_state_if(stateVector, 87), get_channelName_if(channel_name, 88), get_state_if(stateVector, 88), get_channelName_if(channel_name, 89), get_state_if(stateVector, 89), get_channelName_if(channel_name, 90), get_state_if(stateVector, 90), get_channelName_if(channel_name, 91), get_state_if(stateVector, 91), get_channelName_if(channel_name, 92), get_state_if(stateVector, 92), get_channelName_if(channel_name, 93), get_state_if(stateVector, 93), get_channelName_if(channel_name, 94), get_state_if(stateVector, 94), get_channelName_if(channel_name, 95), get_state_if(stateVector, 95), get_channelName_if(channel_name, 96), get_state_if(stateVector, 96)); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - for (int i = 0; i < stateVector.size(); ++i) { - response->add_pull_up_pull_down_states(static_cast(stateVector[i])); - } - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetDisconnectedCDAQSyncPorts(::grpc::ServerContext* context, const GetDisconnectedCDAQSyncPortsRequest* request, GetDisconnectedCDAQSyncPortsResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - while (true) { - auto status = library_->GetDisconnectedCDAQSyncPorts(nullptr, 0); + bool32 value {}; + auto status = library_->GetTimingAttributeExBool(task, device_names, attribute, &value); if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - uInt32 port_list_size = status; - - std::string port_list; - if (port_list_size > 0) { - port_list.resize(port_list_size - 1); + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - status = library_->GetDisconnectedCDAQSyncPorts((char*)port_list.data(), port_list_size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(port_list_size)) { - // buffer is now too small, try again - continue; + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetTimingAttributeExDouble(::grpc::ServerContext* context, const GetTimingAttributeExDoubleRequest* request, GetTimingAttributeExDoubleResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto device_names_mbcs = convert_from_grpc(request->device_names()); + auto device_names = device_names_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetTimingAttributeExDoubleRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TimingDoubleAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTimingAttributeExDoubleRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TimingDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTimingAttributeExDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } + + float64 value {}; + auto status = library_->GetTimingAttributeExDouble(task, device_names, attribute, &value); if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + return ConvertApiErrorStatusForTaskHandle(context, status, task); } response->set_status(status); - std::string port_list_utf8; - convert_to_grpc(port_list, &port_list_utf8); - response->set_port_list(port_list_utf8); - nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_port_list())); + response->set_value(value); return ::grpc::Status::OK; } - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetErrorString(::grpc::ServerContext* context, const GetErrorStringRequest* request, GetErrorStringResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - int32 error_code = request->error_code(); - - while (true) { - auto status = library_->GetErrorString(error_code, nullptr, 0); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetTimingAttributeExInt32(::grpc::ServerContext* context, const GetTimingAttributeExInt32Request* request, GetTimingAttributeExInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto device_names_mbcs = convert_from_grpc(request->device_names()); + auto device_names = device_names_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetTimingAttributeExInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TimingInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTimingAttributeExInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TimingInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTimingAttributeExInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - uInt32 buffer_size = status; - std::string error_string; - if (buffer_size > 0) { - error_string.resize(buffer_size - 1); - } - status = library_->GetErrorString(error_code, (char*)error_string.data(), buffer_size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(buffer_size)) { - // buffer is now too small, try again - continue; - } + int32 value {}; + auto status = library_->GetTimingAttributeExInt32(task, device_names, attribute, &value); if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + return ConvertApiErrorStatusForTaskHandle(context, status, task); } response->set_status(status); - std::string error_string_utf8; - convert_to_grpc(error_string, &error_string_utf8); - response->set_error_string(error_string_utf8); - nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_error_string())); + auto checked_convert_value = [](auto raw_value) { + bool raw_value_is_valid = nidaqmx_grpc::TimingInt32AttributeValues_IsValid(raw_value); + auto valid_enum_value = raw_value_is_valid ? raw_value : 0; + return static_cast(valid_enum_value); + }; + response->set_value(checked_convert_value(value)); + response->set_value_raw(value); return ::grpc::Status::OK; } - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetExportedSignalAttributeBool(::grpc::ServerContext* context, const GetExportedSignalAttributeBoolRequest* request, GetExportedSignalAttributeBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetExportedSignalAttributeBoolRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ExportSignalBoolAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetExportedSignalAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ExportSignalBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetExportedSignalAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - bool32 value{}; - auto status = library_->GetExportedSignalAttributeBool(task, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetTimingAttributeExString(::grpc::ServerContext* context, const GetTimingAttributeExStringRequest* request, GetTimingAttributeExStringResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto device_names_mbcs = convert_from_grpc(request->device_names()); + auto device_names = device_names_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetTimingAttributeExStringRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TimingStringAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTimingAttributeExStringRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TimingStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTimingAttributeExStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetExportedSignalAttributeDouble(::grpc::ServerContext* context, const GetExportedSignalAttributeDoubleRequest* request, GetExportedSignalAttributeDoubleResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetExportedSignalAttributeDoubleRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ExportSignalDoubleAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetExportedSignalAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ExportSignalDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetExportedSignalAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - float64 value{}; - auto status = library_->GetExportedSignalAttributeDouble(task, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetExportedSignalAttributeInt32(::grpc::ServerContext* context, const GetExportedSignalAttributeInt32Request* request, GetExportedSignalAttributeInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetExportedSignalAttributeInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ExportSignalInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetExportedSignalAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ExportSignalInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetExportedSignalAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - int32 value{}; - auto status = library_->GetExportedSignalAttributeInt32(task, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - auto checked_convert_value = [](auto raw_value) { - bool raw_value_is_valid = nidaqmx_grpc::ExportSignalInt32AttributeValues_IsValid(raw_value); - auto valid_enum_value = raw_value_is_valid ? raw_value : 0; - return static_cast(valid_enum_value); - }; - response->set_value(checked_convert_value(value)); - response->set_value_raw(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + while (true) { + auto status = library_->GetTimingAttributeExString(task, device_names, attribute, nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + uInt32 size = status; -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetExportedSignalAttributeString(::grpc::ServerContext* context, const GetExportedSignalAttributeStringRequest* request, GetExportedSignalAttributeStringResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetExportedSignalAttributeStringRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ExportSignalStringAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetExportedSignalAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ExportSignalStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetExportedSignalAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + std::string value; + if (size > 0) { + value.resize(size - 1); + } + status = library_->GetTimingAttributeExString(task, device_names, attribute, (char*)value.data(), size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + std::string value_utf8; + convert_to_grpc(value, &value_utf8); + response->set_value(value_utf8); + nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); + return ::grpc::Status::OK; + } + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetTimingAttributeExTimestamp(::grpc::ServerContext* context, const GetTimingAttributeExTimestampRequest* request, GetTimingAttributeExTimestampResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto device_names_mbcs = convert_from_grpc(request->device_names()); + auto device_names = device_names_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetTimingAttributeExTimestampRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TimingTimestampAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTimingAttributeExTimestampRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TimingTimestampAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTimingAttributeExTimestampRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - } - while (true) { - auto status = library_->GetExportedSignalAttributeString(task, attribute, nullptr, 0); + CVIAbsoluteTime value {}; + auto status = library_->GetTimingAttributeExTimestamp(task, device_names, attribute, &value); if (!status_ok(status)) { return ConvertApiErrorStatusForTaskHandle(context, status, task); } - uInt32 size = status; + response->set_status(status); + convert_to_grpc(value, response->mutable_value()); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetTimingAttributeExUInt32(::grpc::ServerContext* context, const GetTimingAttributeExUInt32Request* request, GetTimingAttributeExUInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto device_names_mbcs = convert_from_grpc(request->device_names()); + auto device_names = device_names_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetTimingAttributeExUInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TimingUInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTimingAttributeExUInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TimingUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTimingAttributeExUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } - std::string value; - if (size > 0) { - value.resize(size - 1); + uInt32 value {}; + auto status = library_->GetTimingAttributeExUInt32(task, device_names, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - status = library_->GetExportedSignalAttributeString(task, attribute, (char*)value.data(), size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { - // buffer is now too small, try again - continue; + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetTimingAttributeExUInt64(::grpc::ServerContext* context, const GetTimingAttributeExUInt64Request* request, GetTimingAttributeExUInt64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto device_names_mbcs = convert_from_grpc(request->device_names()); + auto device_names = device_names_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetTimingAttributeExUInt64Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TimingUInt64Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTimingAttributeExUInt64Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TimingUInt64Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTimingAttributeExUInt64Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } + + uInt64 value {}; + auto status = library_->GetTimingAttributeExUInt64(task, device_names, attribute, &value); if (!status_ok(status)) { return ConvertApiErrorStatusForTaskHandle(context, status, task); } response->set_status(status); - std::string value_utf8; - convert_to_grpc(value, &value_utf8); - response->set_value(value_utf8); - nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); + response->set_value(value); return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetExportedSignalAttributeUInt32(::grpc::ServerContext* context, const GetExportedSignalAttributeUInt32Request* request, GetExportedSignalAttributeUInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetExportedSignalAttributeUInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ExportSignalUInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetExportedSignalAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ExportSignalUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetExportedSignalAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - uInt32 value{}; - auto status = library_->GetExportedSignalAttributeUInt32(task, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetTimingAttributeInt32(::grpc::ServerContext* context, const GetTimingAttributeInt32Request* request, GetTimingAttributeInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetTimingAttributeInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TimingInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTimingAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TimingInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTimingAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetExtCalLastDateAndTime(::grpc::ServerContext* context, const GetExtCalLastDateAndTimeRequest* request, GetExtCalLastDateAndTimeResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - uInt32 year{}; - uInt32 month{}; - uInt32 day{}; - uInt32 hour{}; - uInt32 minute{}; - auto status = library_->GetExtCalLastDateAndTime(device_name, &year, &month, &day, &hour, &minute); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - response->set_year(year); - response->set_month(month); - response->set_day(day); - response->set_hour(hour); - response->set_minute(minute); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + int32 value {}; + auto status = library_->GetTimingAttributeInt32(task, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + auto checked_convert_value = [](auto raw_value) { + bool raw_value_is_valid = nidaqmx_grpc::TimingInt32AttributeValues_IsValid(raw_value); + auto valid_enum_value = raw_value_is_valid ? raw_value : 0; + return static_cast(valid_enum_value); + }; + response->set_value(checked_convert_value(value)); + response->set_value_raw(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetFirstSampClkWhen(::grpc::ServerContext* context, const GetFirstSampClkWhenRequest* request, GetFirstSampClkWhenResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - CVIAbsoluteTime data{}; - auto status = library_->GetFirstSampClkWhen(task, &data); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - convert_to_grpc(data, response->mutable_data()); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetTimingAttributeString(::grpc::ServerContext* context, const GetTimingAttributeStringRequest* request, GetTimingAttributeStringResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetTimingAttributeStringRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TimingStringAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTimingAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TimingStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTimingAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetFirstSampTimestampVal(::grpc::ServerContext* context, const GetFirstSampTimestampValRequest* request, GetFirstSampTimestampValResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - CVIAbsoluteTime data{}; - auto status = library_->GetFirstSampTimestampVal(task, &data); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - convert_to_grpc(data, response->mutable_data()); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetNthTaskChannel(::grpc::ServerContext* context, const GetNthTaskChannelRequest* request, GetNthTaskChannelResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - uInt32 index = request->index(); + while (true) { + auto status = library_->GetTimingAttributeString(task, attribute, nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + uInt32 size = status; - while (true) { - auto status = library_->GetNthTaskChannel(task, index, nullptr, 0); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + std::string value; + if (size > 0) { + value.resize(size - 1); + } + status = library_->GetTimingAttributeString(task, attribute, (char*)value.data(), size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + std::string value_utf8; + convert_to_grpc(value, &value_utf8); + response->set_value(value_utf8); + nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); + return ::grpc::Status::OK; + } + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetTimingAttributeTimestamp(::grpc::ServerContext* context, const GetTimingAttributeTimestampRequest* request, GetTimingAttributeTimestampResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetTimingAttributeTimestampRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TimingTimestampAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTimingAttributeTimestampRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TimingTimestampAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTimingAttributeTimestampRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - int32 buffer_size = status; - std::string buffer; - if (buffer_size > 0) { - buffer.resize(buffer_size - 1); - } - status = library_->GetNthTaskChannel(task, index, (char*)buffer.data(), buffer_size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(buffer_size)) { - // buffer is now too small, try again - continue; - } + CVIAbsoluteTime value {}; + auto status = library_->GetTimingAttributeTimestamp(task, attribute, &value); if (!status_ok(status)) { return ConvertApiErrorStatusForTaskHandle(context, status, task); } response->set_status(status); - std::string buffer_utf8; - convert_to_grpc(buffer, &buffer_utf8); - response->set_buffer(buffer_utf8); - nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_buffer())); + convert_to_grpc(value, response->mutable_value()); return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetNthTaskDevice(::grpc::ServerContext* context, const GetNthTaskDeviceRequest* request, GetNthTaskDeviceResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - uInt32 index = request->index(); - while (true) { - auto status = library_->GetNthTaskDevice(task, index, nullptr, 0); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetTimingAttributeUInt32(::grpc::ServerContext* context, const GetTimingAttributeUInt32Request* request, GetTimingAttributeUInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetTimingAttributeUInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TimingUInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTimingAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TimingUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTimingAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - int32 buffer_size = status; - std::string buffer; - if (buffer_size > 0) { - buffer.resize(buffer_size - 1); - } - status = library_->GetNthTaskDevice(task, index, (char*)buffer.data(), buffer_size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(buffer_size)) { - // buffer is now too small, try again - continue; - } + uInt32 value {}; + auto status = library_->GetTimingAttributeUInt32(task, attribute, &value); if (!status_ok(status)) { return ConvertApiErrorStatusForTaskHandle(context, status, task); } response->set_status(status); - std::string buffer_utf8; - convert_to_grpc(buffer, &buffer_utf8); - response->set_buffer(buffer_utf8); - nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_buffer())); + response->set_value(value); return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetNthTaskReadChannel(::grpc::ServerContext* context, const GetNthTaskReadChannelRequest* request, GetNthTaskReadChannelResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - uInt32 index = request->index(); - while (true) { - auto status = library_->GetNthTaskReadChannel(task, index, nullptr, 0); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetTimingAttributeUInt64(::grpc::ServerContext* context, const GetTimingAttributeUInt64Request* request, GetTimingAttributeUInt64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetTimingAttributeUInt64Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TimingUInt64Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTimingAttributeUInt64Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TimingUInt64Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTimingAttributeUInt64Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - int32 buffer_size = status; - std::string buffer; - if (buffer_size > 0) { - buffer.resize(buffer_size - 1); - } - status = library_->GetNthTaskReadChannel(task, index, (char*)buffer.data(), buffer_size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(buffer_size)) { - // buffer is now too small, try again - continue; - } + uInt64 value {}; + auto status = library_->GetTimingAttributeUInt64(task, attribute, &value); if (!status_ok(status)) { return ConvertApiErrorStatusForTaskHandle(context, status, task); } response->set_status(status); - std::string buffer_utf8; - convert_to_grpc(buffer, &buffer_utf8); - response->set_buffer(buffer_utf8); - nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_buffer())); + response->set_value(value); return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetPersistedChanAttributeBool(::grpc::ServerContext* context, const GetPersistedChanAttributeBoolRequest* request, GetPersistedChanAttributeBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto channel_mbcs = convert_from_grpc(request->channel()); - auto channel = channel_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetPersistedChanAttributeBoolRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::PersistedChannelBoolAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetPersistedChanAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::PersistedChannelBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetPersistedChanAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - bool32 value{}; - auto status = library_->GetPersistedChanAttributeBool(channel, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetPersistedChanAttributeString(::grpc::ServerContext* context, const GetPersistedChanAttributeStringRequest* request, GetPersistedChanAttributeStringResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto channel_mbcs = convert_from_grpc(request->channel()); - auto channel = channel_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetPersistedChanAttributeStringRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::PersistedChannelStringAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetPersistedChanAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::PersistedChannelStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetPersistedChanAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetTrigAttributeBool(::grpc::ServerContext* context, const GetTrigAttributeBoolRequest* request, GetTrigAttributeBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - - while (true) { - auto status = library_->GetPersistedChanAttributeString(channel, attribute, nullptr, 0); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetTrigAttributeBoolRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TriggerBoolAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTrigAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TriggerBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTrigAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - uInt32 size = status; - std::string value; - if (size > 0) { - value.resize(size - 1); - } - status = library_->GetPersistedChanAttributeString(channel, attribute, (char*)value.data(), size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { - // buffer is now too small, try again - continue; - } + bool32 value {}; + auto status = library_->GetTrigAttributeBool(task, attribute, &value); if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + return ConvertApiErrorStatusForTaskHandle(context, status, task); } response->set_status(status); - std::string value_utf8; - convert_to_grpc(value, &value_utf8); - response->set_value(value_utf8); - nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); + response->set_value(value); return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetPersistedScaleAttributeBool(::grpc::ServerContext* context, const GetPersistedScaleAttributeBoolRequest* request, GetPersistedScaleAttributeBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto scale_name_mbcs = convert_from_grpc(request->scale_name()); - auto scale_name = scale_name_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetPersistedScaleAttributeBoolRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::PersistedScaleBoolAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetPersistedScaleAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::PersistedScaleBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetPersistedScaleAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - bool32 value{}; - auto status = library_->GetPersistedScaleAttributeBool(scale_name, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetPersistedScaleAttributeString(::grpc::ServerContext* context, const GetPersistedScaleAttributeStringRequest* request, GetPersistedScaleAttributeStringResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto scale_name_mbcs = convert_from_grpc(request->scale_name()); - auto scale_name = scale_name_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetPersistedScaleAttributeStringRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::PersistedScaleStringAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetPersistedScaleAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::PersistedScaleStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetPersistedScaleAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetTrigAttributeDouble(::grpc::ServerContext* context, const GetTrigAttributeDoubleRequest* request, GetTrigAttributeDoubleResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - - while (true) { - auto status = library_->GetPersistedScaleAttributeString(scale_name, attribute, nullptr, 0); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetTrigAttributeDoubleRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TriggerDoubleAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTrigAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TriggerDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTrigAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - uInt32 size = status; - std::string value; - if (size > 0) { - value.resize(size - 1); - } - status = library_->GetPersistedScaleAttributeString(scale_name, attribute, (char*)value.data(), size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { - // buffer is now too small, try again - continue; - } + float64 value {}; + auto status = library_->GetTrigAttributeDouble(task, attribute, &value); if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + return ConvertApiErrorStatusForTaskHandle(context, status, task); } response->set_status(status); - std::string value_utf8; - convert_to_grpc(value, &value_utf8); - response->set_value(value_utf8); - nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); + response->set_value(value); return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetPersistedTaskAttributeBool(::grpc::ServerContext* context, const GetPersistedTaskAttributeBoolRequest* request, GetPersistedTaskAttributeBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_name_mbcs = convert_from_grpc(request->task_name()); - auto task_name = task_name_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetPersistedTaskAttributeBoolRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::PersistedTaskBoolAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetPersistedTaskAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::PersistedTaskBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetPersistedTaskAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - bool32 value{}; - auto status = library_->GetPersistedTaskAttributeBool(task_name, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetPersistedTaskAttributeString(::grpc::ServerContext* context, const GetPersistedTaskAttributeStringRequest* request, GetPersistedTaskAttributeStringResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_name_mbcs = convert_from_grpc(request->task_name()); - auto task_name = task_name_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetPersistedTaskAttributeStringRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::PersistedTaskStringAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetPersistedTaskAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::PersistedTaskStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetTrigAttributeDoubleArray(::grpc::ServerContext* context, const GetTrigAttributeDoubleArrayRequest* request, GetTrigAttributeDoubleArrayResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetTrigAttributeDoubleArrayRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TriggerDoubleArrayAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTrigAttributeDoubleArrayRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TriggerDoubleArrayAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTrigAttributeDoubleArrayRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::GetPersistedTaskAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + + while (true) { + auto status = library_->GetTrigAttributeDoubleArray(task, attribute, nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + uInt32 size = status; + + response->mutable_value()->Resize(size, 0); + float64* value = response->mutable_value()->mutable_data(); + status = library_->GetTrigAttributeDoubleArray(task, attribute, value, size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; } } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } - while (true) { - auto status = library_->GetPersistedTaskAttributeString(task_name, attribute, nullptr, 0); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetTrigAttributeInt32(::grpc::ServerContext* context, const GetTrigAttributeInt32Request* request, GetTrigAttributeInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetTrigAttributeInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TriggerInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTrigAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TriggerInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTrigAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - uInt32 size = status; - std::string value; - if (size > 0) { - value.resize(size - 1); - } - status = library_->GetPersistedTaskAttributeString(task_name, attribute, (char*)value.data(), size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { - // buffer is now too small, try again - continue; - } + int32 value {}; + auto status = library_->GetTrigAttributeInt32(task, attribute, &value); if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + return ConvertApiErrorStatusForTaskHandle(context, status, task); } response->set_status(status); - std::string value_utf8; - convert_to_grpc(value, &value_utf8); - response->set_value(value_utf8); - nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); + auto checked_convert_value = [](auto raw_value) { + bool raw_value_is_valid = nidaqmx_grpc::TriggerInt32AttributeValues_IsValid(raw_value); + auto valid_enum_value = raw_value_is_valid ? raw_value : 0; + return static_cast(valid_enum_value); + }; + response->set_value(checked_convert_value(value)); + response->set_value_raw(value); return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetPhysicalChanAttributeBool(::grpc::ServerContext* context, const GetPhysicalChanAttributeBoolRequest* request, GetPhysicalChanAttributeBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetPhysicalChanAttributeBoolRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::PhysicalChannelBoolAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetPhysicalChanAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::PhysicalChannelBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetPhysicalChanAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - bool32 value{}; - auto status = library_->GetPhysicalChanAttributeBool(physical_channel, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetPhysicalChanAttributeBytes(::grpc::ServerContext* context, const GetPhysicalChanAttributeBytesRequest* request, GetPhysicalChanAttributeBytesResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetPhysicalChanAttributeBytesRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::PhysicalChannelBytesAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetPhysicalChanAttributeBytesRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::PhysicalChannelBytesAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetTrigAttributeInt32Array(::grpc::ServerContext* context, const GetTrigAttributeInt32ArrayRequest* request, GetTrigAttributeInt32ArrayResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetTrigAttributeInt32ArrayRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TriggerInt32ArrayAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTrigAttributeInt32ArrayRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TriggerInt32ArrayAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTrigAttributeInt32ArrayRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::GetPhysicalChanAttributeBytesRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + + while (true) { + auto status = library_->GetTrigAttributeInt32Array(task, attribute, nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + uInt32 size = status; + + response->mutable_value_raw()->Resize(size, 0); + int32* value = reinterpret_cast(response->mutable_value_raw()->mutable_data()); + status = library_->GetTrigAttributeInt32Array(task, attribute, value, size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + auto checked_convert_value = [](auto raw_value) { + bool raw_value_is_valid = nidaqmx_grpc::TriggerInt32AttributeValues_IsValid(raw_value); + auto valid_enum_value = raw_value_is_valid ? raw_value : 0; + return static_cast(valid_enum_value); + }; + response->mutable_value()->Clear(); + response->mutable_value()->Reserve(size); + std::transform( + response->value_raw().begin(), + response->value_raw().begin() + size, + google::protobuf::RepeatedFieldBackInserter(response->mutable_value()), + [&](auto x) { + return checked_convert_value(x); + }); + return ::grpc::Status::OK; } } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } - while (true) { - auto status = library_->GetPhysicalChanAttributeBytes(physical_channel, attribute, nullptr, 0); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetTrigAttributeString(::grpc::ServerContext* context, const GetTrigAttributeStringRequest* request, GetTrigAttributeStringResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetTrigAttributeStringRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TriggerStringAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTrigAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TriggerStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTrigAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - uInt32 size = status; - std::string value(size, '\0'); - status = library_->GetPhysicalChanAttributeBytes(physical_channel, attribute, (uInt8*)value.data(), size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { - // buffer is now too small, try again - continue; + + while (true) { + auto status = library_->GetTrigAttributeString(task, attribute, nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + uInt32 size = status; + + std::string value; + if (size > 0) { + value.resize(size - 1); + } + status = library_->GetTrigAttributeString(task, attribute, (char*)value.data(), size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + std::string value_utf8; + convert_to_grpc(value, &value_utf8); + response->set_value(value_utf8); + nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); + return ::grpc::Status::OK; + } + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetTrigAttributeTimestamp(::grpc::ServerContext* context, const GetTrigAttributeTimestampRequest* request, GetTrigAttributeTimestampResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetTrigAttributeTimestampRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TriggerTimestampAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTrigAttributeTimestampRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TriggerTimestampAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTrigAttributeTimestampRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } + + CVIAbsoluteTime value {}; + auto status = library_->GetTrigAttributeTimestamp(task, attribute, &value); if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + return ConvertApiErrorStatusForTaskHandle(context, status, task); } response->set_status(status); - response->set_value(value); + convert_to_grpc(value, response->mutable_value()); return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetPhysicalChanAttributeDouble(::grpc::ServerContext* context, const GetPhysicalChanAttributeDoubleRequest* request, GetPhysicalChanAttributeDoubleResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetPhysicalChanAttributeDoubleRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::PhysicalChannelDoubleAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetPhysicalChanAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::PhysicalChannelDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetPhysicalChanAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - float64 value{}; - auto status = library_->GetPhysicalChanAttributeDouble(physical_channel, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetPhysicalChanAttributeDoubleArray(::grpc::ServerContext* context, const GetPhysicalChanAttributeDoubleArrayRequest* request, GetPhysicalChanAttributeDoubleArrayResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetPhysicalChanAttributeDoubleArrayRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::PhysicalChannelDoubleArrayAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetPhysicalChanAttributeDoubleArrayRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::PhysicalChannelDoubleArrayAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetPhysicalChanAttributeDoubleArrayRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetTrigAttributeUInt32(::grpc::ServerContext* context, const GetTrigAttributeUInt32Request* request, GetTrigAttributeUInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - - while (true) { - auto status = library_->GetPhysicalChanAttributeDoubleArray(physical_channel, attribute, nullptr, 0); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetTrigAttributeUInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TriggerUInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTrigAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TriggerUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTrigAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - uInt32 size = status; - response->mutable_value()->Resize(size, 0); - float64* value = response->mutable_value()->mutable_data(); - status = library_->GetPhysicalChanAttributeDoubleArray(physical_channel, attribute, value, size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { - // buffer is now too small, try again - continue; - } + uInt32 value {}; + auto status = library_->GetTrigAttributeUInt32(task, attribute, &value); if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + return ConvertApiErrorStatusForTaskHandle(context, status, task); } response->set_status(status); + response->set_value(value); return ::grpc::Status::OK; } - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetPhysicalChanAttributeInt32(::grpc::ServerContext* context, const GetPhysicalChanAttributeInt32Request* request, GetPhysicalChanAttributeInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetPhysicalChanAttributeInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::PhysicalChannelInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetPhysicalChanAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::PhysicalChannelInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetPhysicalChanAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - int32 value{}; - auto status = library_->GetPhysicalChanAttributeInt32(physical_channel, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - auto checked_convert_value = [](auto raw_value) { - bool raw_value_is_valid = nidaqmx_grpc::PhysicalChannelInt32AttributeValues_IsValid(raw_value); - auto valid_enum_value = raw_value_is_valid ? raw_value : 0; - return static_cast(valid_enum_value); - }; - response->set_value(checked_convert_value(value)); - response->set_value_raw(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetPhysicalChanAttributeInt32Array(::grpc::ServerContext* context, const GetPhysicalChanAttributeInt32ArrayRequest* request, GetPhysicalChanAttributeInt32ArrayResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetPhysicalChanAttributeInt32ArrayRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::PhysicalChannelInt32ArrayAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetPhysicalChanAttributeInt32ArrayRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::PhysicalChannelInt32ArrayAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetWatchdogAttributeBool(::grpc::ServerContext* context, const GetWatchdogAttributeBoolRequest* request, GetWatchdogAttributeBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto lines_mbcs = convert_from_grpc(request->lines()); + auto lines = lines_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetWatchdogAttributeBoolRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::WatchdogBoolAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetWatchdogAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::WatchdogBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetWatchdogAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::GetPhysicalChanAttributeInt32ArrayRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + bool32 value {}; + auto status = library_->GetWatchdogAttributeBool(task, lines, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetWatchdogAttributeDouble(::grpc::ServerContext* context, const GetWatchdogAttributeDoubleRequest* request, GetWatchdogAttributeDoubleResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto lines_mbcs = convert_from_grpc(request->lines()); + auto lines = lines_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetWatchdogAttributeDoubleRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::WatchdogDoubleAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetWatchdogAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::WatchdogDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetWatchdogAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } - while (true) { - auto status = library_->GetPhysicalChanAttributeInt32Array(physical_channel, attribute, nullptr, 0); + float64 value {}; + auto status = library_->GetWatchdogAttributeDouble(task, lines, attribute, &value); if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - uInt32 size = status; - - response->mutable_value_raw()->Resize(size, 0); - int32* value = reinterpret_cast(response->mutable_value_raw()->mutable_data()); - status = library_->GetPhysicalChanAttributeInt32Array(physical_channel, attribute, value, size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { - // buffer is now too small, try again - continue; + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetWatchdogAttributeInt32(::grpc::ServerContext* context, const GetWatchdogAttributeInt32Request* request, GetWatchdogAttributeInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto lines_mbcs = convert_from_grpc(request->lines()); + auto lines = lines_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetWatchdogAttributeInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::WatchdogInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetWatchdogAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::WatchdogInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetWatchdogAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } + + int32 value {}; + auto status = library_->GetWatchdogAttributeInt32(task, lines, attribute, &value); if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + return ConvertApiErrorStatusForTaskHandle(context, status, task); } response->set_status(status); auto checked_convert_value = [](auto raw_value) { - bool raw_value_is_valid = nidaqmx_grpc::PhysicalChannelInt32AttributeValues_IsValid(raw_value); + bool raw_value_is_valid = nidaqmx_grpc::WatchdogInt32AttributeValues_IsValid(raw_value); auto valid_enum_value = raw_value_is_valid ? raw_value : 0; - return static_cast(valid_enum_value); + return static_cast(valid_enum_value); }; - response->mutable_value()->Clear(); - response->mutable_value()->Reserve(size); - std::transform( - response->value_raw().begin(), - response->value_raw().begin() + size, - google::protobuf::RepeatedFieldBackInserter(response->mutable_value()), - [&](auto x) { - return checked_convert_value(x); - }); + response->set_value(checked_convert_value(value)); + response->set_value_raw(value); return ::grpc::Status::OK; } - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetPhysicalChanAttributeString(::grpc::ServerContext* context, const GetPhysicalChanAttributeStringRequest* request, GetPhysicalChanAttributeStringResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetPhysicalChanAttributeStringRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::PhysicalChannelStringAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetPhysicalChanAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::PhysicalChannelStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetWatchdogAttributeString(::grpc::ServerContext* context, const GetWatchdogAttributeStringRequest* request, GetWatchdogAttributeStringResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto lines_mbcs = convert_from_grpc(request->lines()); + auto lines = lines_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetWatchdogAttributeStringRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::WatchdogStringAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetWatchdogAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::WatchdogStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetWatchdogAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::GetPhysicalChanAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + + while (true) { + auto status = library_->GetWatchdogAttributeString(task, lines, attribute, nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + uInt32 size = status; + + std::string value; + if (size > 0) { + value.resize(size - 1); + } + status = library_->GetWatchdogAttributeString(task, lines, attribute, (char*)value.data(), size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + std::string value_utf8; + convert_to_grpc(value, &value_utf8); + response->set_value(value_utf8); + nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); + return ::grpc::Status::OK; + } + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetWriteAttributeBool(::grpc::ServerContext* context, const GetWriteAttributeBoolRequest* request, GetWriteAttributeBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetWriteAttributeBoolRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::WriteBoolAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetWriteAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::WriteBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetWriteAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - } - while (true) { - auto status = library_->GetPhysicalChanAttributeString(physical_channel, attribute, nullptr, 0); + bool32 value {}; + auto status = library_->GetWriteAttributeBool(task, attribute, &value); if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - uInt32 size = status; + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } - std::string value; - if (size > 0) { - value.resize(size - 1); - } - status = library_->GetPhysicalChanAttributeString(physical_channel, attribute, (char*)value.data(), size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { - // buffer is now too small, try again - continue; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetWriteAttributeDouble(::grpc::ServerContext* context, const GetWriteAttributeDoubleRequest* request, GetWriteAttributeDoubleResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetWriteAttributeDoubleRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::WriteDoubleAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetWriteAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::WriteDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetWriteAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } + + float64 value {}; + auto status = library_->GetWriteAttributeDouble(task, attribute, &value); if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + return ConvertApiErrorStatusForTaskHandle(context, status, task); } response->set_status(status); - std::string value_utf8; - convert_to_grpc(value, &value_utf8); - response->set_value(value_utf8); - nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); + response->set_value(value); return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetPhysicalChanAttributeUInt32(::grpc::ServerContext* context, const GetPhysicalChanAttributeUInt32Request* request, GetPhysicalChanAttributeUInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetPhysicalChanAttributeUInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::PhysicalChannelUInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetPhysicalChanAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::PhysicalChannelUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetPhysicalChanAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - uInt32 value{}; - auto status = library_->GetPhysicalChanAttributeUInt32(physical_channel, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetPhysicalChanAttributeUInt32Array(::grpc::ServerContext* context, const GetPhysicalChanAttributeUInt32ArrayRequest* request, GetPhysicalChanAttributeUInt32ArrayResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetPhysicalChanAttributeUInt32ArrayRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::PhysicalChannelUInt32ArrayAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetPhysicalChanAttributeUInt32ArrayRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::PhysicalChannelUInt32ArrayAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetPhysicalChanAttributeUInt32ArrayRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetWriteAttributeInt32(::grpc::ServerContext* context, const GetWriteAttributeInt32Request* request, GetWriteAttributeInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - - while (true) { - auto status = library_->GetPhysicalChanAttributeUInt32Array(physical_channel, attribute, nullptr, 0); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetWriteAttributeInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::WriteInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetWriteAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::WriteInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetWriteAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - uInt32 size = status; - response->mutable_value()->Resize(size, 0); - uInt32* value = reinterpret_cast(response->mutable_value()->mutable_data()); - status = library_->GetPhysicalChanAttributeUInt32Array(physical_channel, attribute, value, size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { - // buffer is now too small, try again - continue; - } + int32 value {}; + auto status = library_->GetWriteAttributeInt32(task, attribute, &value); if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + return ConvertApiErrorStatusForTaskHandle(context, status, task); } response->set_status(status); + auto checked_convert_value = [](auto raw_value) { + bool raw_value_is_valid = nidaqmx_grpc::WriteInt32AttributeValues_IsValid(raw_value); + auto valid_enum_value = raw_value_is_valid ? raw_value : 0; + return static_cast(valid_enum_value); + }; + response->set_value(checked_convert_value(value)); + response->set_value_raw(value); return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetReadAttributeBool(::grpc::ServerContext* context, const GetReadAttributeBoolRequest* request, GetReadAttributeBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetReadAttributeBoolRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ReadBoolAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetReadAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ReadBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetReadAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - bool32 value{}; - auto status = library_->GetReadAttributeBool(task, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetWriteAttributeString(::grpc::ServerContext* context, const GetWriteAttributeStringRequest* request, GetWriteAttributeStringResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetWriteAttributeStringRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::WriteStringAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetWriteAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::WriteStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetWriteAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetReadAttributeDouble(::grpc::ServerContext* context, const GetReadAttributeDoubleRequest* request, GetReadAttributeDoubleResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetReadAttributeDoubleRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ReadDoubleAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetReadAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ReadDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetReadAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - float64 value{}; - auto status = library_->GetReadAttributeDouble(task, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetReadAttributeInt32(::grpc::ServerContext* context, const GetReadAttributeInt32Request* request, GetReadAttributeInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetReadAttributeInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ReadInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetReadAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ReadInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetReadAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - int32 value{}; - auto status = library_->GetReadAttributeInt32(task, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - auto checked_convert_value = [](auto raw_value) { - bool raw_value_is_valid = nidaqmx_grpc::ReadInt32AttributeValues_IsValid(raw_value); - auto valid_enum_value = raw_value_is_valid ? raw_value : 0; - return static_cast(valid_enum_value); - }; - response->set_value(checked_convert_value(value)); - response->set_value_raw(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + while (true) { + auto status = library_->GetWriteAttributeString(task, attribute, nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + uInt32 size = status; -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetReadAttributeString(::grpc::ServerContext* context, const GetReadAttributeStringRequest* request, GetReadAttributeStringResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetReadAttributeStringRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ReadStringAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetReadAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ReadStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetReadAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + std::string value; + if (size > 0) { + value.resize(size - 1); + } + status = library_->GetWriteAttributeString(task, attribute, (char*)value.data(), size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + std::string value_utf8; + convert_to_grpc(value, &value_utf8); + response->set_value(value_utf8); + nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); + return ::grpc::Status::OK; + } + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetWriteAttributeUInt32(::grpc::ServerContext* context, const GetWriteAttributeUInt32Request* request, GetWriteAttributeUInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetWriteAttributeUInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::WriteUInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetWriteAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::WriteUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetWriteAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - } - while (true) { - auto status = library_->GetReadAttributeString(task, attribute, nullptr, 0); + uInt32 value {}; + auto status = library_->GetWriteAttributeUInt32(task, attribute, &value); if (!status_ok(status)) { return ConvertApiErrorStatusForTaskHandle(context, status, task); } - uInt32 size = status; + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } - std::string value; - if (size > 0) { - value.resize(size - 1); - } - status = library_->GetReadAttributeString(task, attribute, (char*)value.data(), size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { - // buffer is now too small, try again - continue; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetWriteAttributeUInt64(::grpc::ServerContext* context, const GetWriteAttributeUInt64Request* request, GetWriteAttributeUInt64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetWriteAttributeUInt64Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::WriteUInt64Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetWriteAttributeUInt64Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::WriteUInt64Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetWriteAttributeUInt64Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } + + uInt64 value {}; + auto status = library_->GetWriteAttributeUInt64(task, attribute, &value); if (!status_ok(status)) { return ConvertApiErrorStatusForTaskHandle(context, status, task); } response->set_status(status); - std::string value_utf8; - convert_to_grpc(value, &value_utf8); - response->set_value(value_utf8); - nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); + response->set_value(value); return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetReadAttributeUInt32(::grpc::ServerContext* context, const GetReadAttributeUInt32Request* request, GetReadAttributeUInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetReadAttributeUInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ReadUInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetReadAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ReadUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetReadAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - uInt32 value{}; - auto status = library_->GetReadAttributeUInt32(task, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetReadAttributeUInt64(::grpc::ServerContext* context, const GetReadAttributeUInt64Request* request, GetReadAttributeUInt64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetReadAttributeUInt64Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ReadUInt64Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetReadAttributeUInt64Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ReadUInt64Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetReadAttributeUInt64Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - uInt64 value{}; - auto status = library_->GetReadAttributeUInt64(task, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetRealTimeAttributeBool(::grpc::ServerContext* context, const GetRealTimeAttributeBoolRequest* request, GetRealTimeAttributeBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetRealTimeAttributeBoolRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::RealTimeBoolAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetRealTimeAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::RealTimeBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetRealTimeAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - bool32 value{}; - auto status = library_->GetRealTimeAttributeBool(task, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetRealTimeAttributeInt32(::grpc::ServerContext* context, const GetRealTimeAttributeInt32Request* request, GetRealTimeAttributeInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetRealTimeAttributeInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::RealTimeInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetRealTimeAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::RealTimeInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetRealTimeAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - int32 value{}; - auto status = library_->GetRealTimeAttributeInt32(task, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - auto checked_convert_value = [](auto raw_value) { - bool raw_value_is_valid = nidaqmx_grpc::RealTimeInt32AttributeValues_IsValid(raw_value); - auto valid_enum_value = raw_value_is_valid ? raw_value : 0; - return static_cast(valid_enum_value); - }; - response->set_value(checked_convert_value(value)); - response->set_value_raw(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetRealTimeAttributeUInt32(::grpc::ServerContext* context, const GetRealTimeAttributeUInt32Request* request, GetRealTimeAttributeUInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetRealTimeAttributeUInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::RealTimeUInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetRealTimeAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::RealTimeUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetRealTimeAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - uInt32 value{}; - auto status = library_->GetRealTimeAttributeUInt32(task, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetRefTrigTimestampVal(::grpc::ServerContext* context, const GetRefTrigTimestampValRequest* request, GetRefTrigTimestampValResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - CVIAbsoluteTime data{}; - auto status = library_->GetRefTrigTimestampVal(task, &data); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - convert_to_grpc(data, response->mutable_data()); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetScaleAttributeDouble(::grpc::ServerContext* context, const GetScaleAttributeDoubleRequest* request, GetScaleAttributeDoubleResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto scale_name_mbcs = convert_from_grpc(request->scale_name()); - auto scale_name = scale_name_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetScaleAttributeDoubleRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ScaleDoubleAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetScaleAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ScaleDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetScaleAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - float64 value{}; - auto status = library_->GetScaleAttributeDouble(scale_name, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::IsTaskDone(::grpc::ServerContext* context, const IsTaskDoneRequest* request, IsTaskDoneResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + bool32 is_task_done {}; + auto status = library_->IsTaskDone(task, &is_task_done); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + response->set_is_task_done(is_task_done); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetScaleAttributeDoubleArray(::grpc::ServerContext* context, const GetScaleAttributeDoubleArrayRequest* request, GetScaleAttributeDoubleArrayResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto scale_name_mbcs = convert_from_grpc(request->scale_name()); - auto scale_name = scale_name_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetScaleAttributeDoubleArrayRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ScaleDoubleArrayAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetScaleAttributeDoubleArrayRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ScaleDoubleArrayAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetScaleAttributeDoubleArrayRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::LoadTask(::grpc::ServerContext* context, const LoadTaskRequest* request, LoadTaskResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } + try { + auto session_name_mbcs = convert_from_grpc(request->session_name()); + auto session_name = session_name_mbcs.c_str(); + auto initialization_behavior = request->initialization_behavior(); - while (true) { - auto status = library_->GetScaleAttributeDoubleArray(scale_name, attribute, nullptr, 0); + bool new_session_initialized {}; + auto init_lambda = [&] () { + TaskHandle task; + auto status = library_->LoadTask(session_name, &task); + return std::make_tuple(status, task); + }; + std::string grpc_device_session_name = request->session_name(); + // Capture the library shared_ptr by value. Do not capture `this` or any references. + LibrarySharedPtr library = library_; + auto cleanup_lambda = [library] (TaskHandle id) { library->ClearTask(id); }; + int status = session_repository_->add_session(grpc_device_session_name, init_lambda, cleanup_lambda, initialization_behavior, &new_session_initialized); if (!status_ok(status)) { return ConvertApiErrorStatusForTaskHandle(context, status, 0); } - uInt32 size = status; + response->set_status(status); + response->mutable_task()->set_name(grpc_device_session_name); + response->set_new_session_initialized(new_session_initialized); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } - response->mutable_value()->Resize(size, 0); - float64* value = response->mutable_value()->mutable_data(); - status = library_->GetScaleAttributeDoubleArray(scale_name, attribute, value, size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { - // buffer is now too small, try again - continue; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::PerformBridgeOffsetNullingCalEx(::grpc::ServerContext* context, const PerformBridgeOffsetNullingCalExRequest* request, PerformBridgeOffsetNullingCalExResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto channel_mbcs = convert_from_grpc(request->channel()); + auto channel = channel_mbcs.c_str(); + bool32 skip_unsupported_channels = request->skip_unsupported_channels(); + auto status = library_->PerformBridgeOffsetNullingCalEx(task, channel, skip_unsupported_channels); if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + return ConvertApiErrorStatusForTaskHandle(context, status, task); } response->set_status(status); return ::grpc::Status::OK; } - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetScaleAttributeInt32(::grpc::ServerContext* context, const GetScaleAttributeInt32Request* request, GetScaleAttributeInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto scale_name_mbcs = convert_from_grpc(request->scale_name()); - auto scale_name = scale_name_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetScaleAttributeInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ScaleInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetScaleAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ScaleInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetScaleAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - int32 value{}; - auto status = library_->GetScaleAttributeInt32(scale_name, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - auto checked_convert_value = [](auto raw_value) { - bool raw_value_is_valid = nidaqmx_grpc::ScaleInt32AttributeValues_IsValid(raw_value); - auto valid_enum_value = raw_value_is_valid ? raw_value : 0; - return static_cast(valid_enum_value); - }; - response->set_value(checked_convert_value(value)); - response->set_value_raw(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetScaleAttributeString(::grpc::ServerContext* context, const GetScaleAttributeStringRequest* request, GetScaleAttributeStringResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto scale_name_mbcs = convert_from_grpc(request->scale_name()); - auto scale_name = scale_name_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetScaleAttributeStringRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ScaleStringAttribute_IsValid(attribute) ? attribute : 0; - break; + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::PerformBridgeShuntCalEx(::grpc::ServerContext* context, const PerformBridgeShuntCalExRequest* request, PerformBridgeShuntCalExResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto channel_mbcs = convert_from_grpc(request->channel()); + auto channel = channel_mbcs.c_str(); + float64 shunt_resistor_value = request->shunt_resistor_value(); + int32 shunt_resistor_location; + switch (request->shunt_resistor_location_enum_case()) { + case nidaqmx_grpc::PerformBridgeShuntCalExRequest::ShuntResistorLocationEnumCase::kShuntResistorLocation: { + shunt_resistor_location = static_cast(request->shunt_resistor_location()); + break; + } + case nidaqmx_grpc::PerformBridgeShuntCalExRequest::ShuntResistorLocationEnumCase::kShuntResistorLocationRaw: { + shunt_resistor_location = static_cast(request->shunt_resistor_location_raw()); + break; + } + case nidaqmx_grpc::PerformBridgeShuntCalExRequest::ShuntResistorLocationEnumCase::SHUNT_RESISTOR_LOCATION_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for shunt_resistor_location was not specified or out of range"); + break; + } } - case nidaqmx_grpc::GetScaleAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ScaleStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; + + int32 shunt_resistor_select; + switch (request->shunt_resistor_select_enum_case()) { + case nidaqmx_grpc::PerformBridgeShuntCalExRequest::ShuntResistorSelectEnumCase::kShuntResistorSelect: { + shunt_resistor_select = static_cast(request->shunt_resistor_select()); + break; + } + case nidaqmx_grpc::PerformBridgeShuntCalExRequest::ShuntResistorSelectEnumCase::kShuntResistorSelectRaw: { + shunt_resistor_select = static_cast(request->shunt_resistor_select_raw()); + break; + } + case nidaqmx_grpc::PerformBridgeShuntCalExRequest::ShuntResistorSelectEnumCase::SHUNT_RESISTOR_SELECT_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for shunt_resistor_select was not specified or out of range"); + break; + } } - case nidaqmx_grpc::GetScaleAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + int32 shunt_resistor_source; + switch (request->shunt_resistor_source_enum_case()) { + case nidaqmx_grpc::PerformBridgeShuntCalExRequest::ShuntResistorSourceEnumCase::kShuntResistorSource: { + shunt_resistor_source = static_cast(request->shunt_resistor_source()); + break; + } + case nidaqmx_grpc::PerformBridgeShuntCalExRequest::ShuntResistorSourceEnumCase::kShuntResistorSourceRaw: { + shunt_resistor_source = static_cast(request->shunt_resistor_source_raw()); + break; + } + case nidaqmx_grpc::PerformBridgeShuntCalExRequest::ShuntResistorSourceEnumCase::SHUNT_RESISTOR_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for shunt_resistor_source was not specified or out of range"); + break; + } } - } - while (true) { - auto status = library_->GetScaleAttributeString(scale_name, attribute, nullptr, 0); + float64 bridge_resistance = request->bridge_resistance(); + bool32 skip_unsupported_channels = request->skip_unsupported_channels(); + auto status = library_->PerformBridgeShuntCalEx(task, channel, shunt_resistor_value, shunt_resistor_location, shunt_resistor_select, shunt_resistor_source, bridge_resistance, skip_unsupported_channels); if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::PerformStrainShuntCalEx(::grpc::ServerContext* context, const PerformStrainShuntCalExRequest* request, PerformStrainShuntCalExResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto channel_mbcs = convert_from_grpc(request->channel()); + auto channel = channel_mbcs.c_str(); + float64 shunt_resistor_value = request->shunt_resistor_value(); + int32 shunt_resistor_location; + switch (request->shunt_resistor_location_enum_case()) { + case nidaqmx_grpc::PerformStrainShuntCalExRequest::ShuntResistorLocationEnumCase::kShuntResistorLocation: { + shunt_resistor_location = static_cast(request->shunt_resistor_location()); + break; + } + case nidaqmx_grpc::PerformStrainShuntCalExRequest::ShuntResistorLocationEnumCase::kShuntResistorLocationRaw: { + shunt_resistor_location = static_cast(request->shunt_resistor_location_raw()); + break; + } + case nidaqmx_grpc::PerformStrainShuntCalExRequest::ShuntResistorLocationEnumCase::SHUNT_RESISTOR_LOCATION_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for shunt_resistor_location was not specified or out of range"); + break; + } } - uInt32 size = status; - std::string value; - if (size > 0) { - value.resize(size - 1); + int32 shunt_resistor_select; + switch (request->shunt_resistor_select_enum_case()) { + case nidaqmx_grpc::PerformStrainShuntCalExRequest::ShuntResistorSelectEnumCase::kShuntResistorSelect: { + shunt_resistor_select = static_cast(request->shunt_resistor_select()); + break; + } + case nidaqmx_grpc::PerformStrainShuntCalExRequest::ShuntResistorSelectEnumCase::kShuntResistorSelectRaw: { + shunt_resistor_select = static_cast(request->shunt_resistor_select_raw()); + break; + } + case nidaqmx_grpc::PerformStrainShuntCalExRequest::ShuntResistorSelectEnumCase::SHUNT_RESISTOR_SELECT_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for shunt_resistor_select was not specified or out of range"); + break; + } } - status = library_->GetScaleAttributeString(scale_name, attribute, (char*)value.data(), size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { - // buffer is now too small, try again - continue; + + int32 shunt_resistor_source; + switch (request->shunt_resistor_source_enum_case()) { + case nidaqmx_grpc::PerformStrainShuntCalExRequest::ShuntResistorSourceEnumCase::kShuntResistorSource: { + shunt_resistor_source = static_cast(request->shunt_resistor_source()); + break; + } + case nidaqmx_grpc::PerformStrainShuntCalExRequest::ShuntResistorSourceEnumCase::kShuntResistorSourceRaw: { + shunt_resistor_source = static_cast(request->shunt_resistor_source_raw()); + break; + } + case nidaqmx_grpc::PerformStrainShuntCalExRequest::ShuntResistorSourceEnumCase::SHUNT_RESISTOR_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for shunt_resistor_source was not specified or out of range"); + break; + } } + + bool32 skip_unsupported_channels = request->skip_unsupported_channels(); + auto status = library_->PerformStrainShuntCalEx(task, channel, shunt_resistor_value, shunt_resistor_location, shunt_resistor_select, shunt_resistor_source, skip_unsupported_channels); if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + return ConvertApiErrorStatusForTaskHandle(context, status, task); } response->set_status(status); - std::string value_utf8; - convert_to_grpc(value, &value_utf8); - response->set_value(value_utf8); - nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetSelfCalLastDateAndTime(::grpc::ServerContext* context, const GetSelfCalLastDateAndTimeRequest* request, GetSelfCalLastDateAndTimeResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - uInt32 year{}; - uInt32 month{}; - uInt32 day{}; - uInt32 hour{}; - uInt32 minute{}; - auto status = library_->GetSelfCalLastDateAndTime(device_name, &year, &month, &day, &hour, &minute); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - response->set_year(year); - response->set_month(month); - response->set_day(day); - response->set_hour(hour); - response->set_minute(minute); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::PerformThrmcplLeadOffsetNullingCal(::grpc::ServerContext* context, const PerformThrmcplLeadOffsetNullingCalRequest* request, PerformThrmcplLeadOffsetNullingCalResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto channel_mbcs = convert_from_grpc(request->channel()); + auto channel = channel_mbcs.c_str(); + bool32 skip_unsupported_channels = request->skip_unsupported_channels(); + auto status = library_->PerformThrmcplLeadOffsetNullingCal(task, channel, skip_unsupported_channels); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetStartTrigTimestampVal(::grpc::ServerContext* context, const GetStartTrigTimestampValRequest* request, GetStartTrigTimestampValResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - CVIAbsoluteTime data{}; - auto status = library_->GetStartTrigTimestampVal(task, &data); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - convert_to_grpc(data, response->mutable_data()); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetStartTrigTrigWhen(::grpc::ServerContext* context, const GetStartTrigTrigWhenRequest* request, GetStartTrigTrigWhenResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - CVIAbsoluteTime data{}; - auto status = library_->GetStartTrigTrigWhen(task, &data); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - convert_to_grpc(data, response->mutable_data()); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetSyncPulseTimeWhen(::grpc::ServerContext* context, const GetSyncPulseTimeWhenRequest* request, GetSyncPulseTimeWhenResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - CVIAbsoluteTime data{}; - auto status = library_->GetSyncPulseTimeWhen(task, &data); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - convert_to_grpc(data, response->mutable_data()); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetSystemInfoAttributeString(::grpc::ServerContext* context, const GetSystemInfoAttributeStringRequest* request, GetSystemInfoAttributeStringResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetSystemInfoAttributeStringRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::SystemStringAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetSystemInfoAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::SystemStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ReadAnalogF64(::grpc::ServerContext* context, const ReadAnalogF64Request* request, ReadAnalogF64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 fill_mode; + switch (request->fill_mode_enum_case()) { + case nidaqmx_grpc::ReadAnalogF64Request::FillModeEnumCase::kFillMode: { + fill_mode = static_cast(request->fill_mode()); + break; + } + case nidaqmx_grpc::ReadAnalogF64Request::FillModeEnumCase::kFillModeRaw: { + fill_mode = static_cast(request->fill_mode_raw()); + break; + } + case nidaqmx_grpc::ReadAnalogF64Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); + break; + } } - case nidaqmx_grpc::GetSystemInfoAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + response->mutable_read_array()->Resize(array_size_in_samps, 0); + float64* read_array = response->mutable_read_array()->mutable_data(); + int32 samps_per_chan_read {}; + auto status = library_->ReadAnalogF64(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); + context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); + if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + response->set_samps_per_chan_read(samps_per_chan_read); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } + } - while (true) { - auto status = library_->GetSystemInfoAttributeString(attribute, nullptr, 0); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginReadAnalogF64(::grpc::ServerContext* context, const BeginReadAnalogF64Request* request, BeginReadAnalogF64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 fill_mode; + switch (request->fill_mode_enum_case()) { + case nidaqmx_grpc::BeginReadAnalogF64Request::FillModeEnumCase::kFillMode: { + fill_mode = static_cast(request->fill_mode()); + break; + } + case nidaqmx_grpc::BeginReadAnalogF64Request::FillModeEnumCase::kFillModeRaw: { + fill_mode = static_cast(request->fill_mode_raw()); + break; + } + case nidaqmx_grpc::BeginReadAnalogF64Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); + break; + } } - uInt32 size = status; - std::string value; - if (size > 0) { - value.resize(size - 1); - } - status = library_->GetSystemInfoAttributeString(attribute, (char*)value.data(), size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { - // buffer is now too small, try again - continue; - } + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->timeout = timeout; + data->fill_mode = fill_mode; + data->array_size_in_samps = array_size_in_samps; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + data->response.mutable_read_array()->Reserve(request->array_size_in_samps()); + data->response.mutable_read_array()->Resize(request->array_size_in_samps(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadAnalogF64", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ReadAnalogScalarF64(::grpc::ServerContext* context, const ReadAnalogScalarF64Request* request, ReadAnalogScalarF64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + float64 timeout = request->timeout(); + auto reserved = nullptr; + float64 value {}; + auto status = library_->ReadAnalogScalarF64(task, timeout, &value, reserved); if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + return ConvertApiErrorStatusForTaskHandle(context, status, task); } response->set_status(status); - std::string value_utf8; - convert_to_grpc(value, &value_utf8); - response->set_value(value_utf8); - nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); + response->set_value(value); return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetSystemInfoAttributeUInt32(::grpc::ServerContext* context, const GetSystemInfoAttributeUInt32Request* request, GetSystemInfoAttributeUInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetSystemInfoAttributeUInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::SystemUInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetSystemInfoAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::SystemUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetSystemInfoAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginReadAnalogScalarF64(::grpc::ServerContext* context, const BeginReadAnalogScalarF64Request* request, BeginReadAnalogScalarF64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + float64 timeout = request->timeout(); + auto reserved = nullptr; - uInt32 value{}; - auto status = library_->GetSystemInfoAttributeUInt32(attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + auto data = std::make_unique(); + data->task = task; + data->timeout = timeout; + data->reserved = reserved; + data->library = std::shared_ptr(library_); -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetTaskAttributeBool(::grpc::ServerContext* context, const GetTaskAttributeBoolRequest* request, GetTaskAttributeBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetTaskAttributeBoolRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TaskBoolAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTaskAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TaskBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTaskAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - bool32 value{}; - auto status = library_->GetTaskAttributeBool(task, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadAnalogScalarF64", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetTaskAttributeString(::grpc::ServerContext* context, const GetTaskAttributeStringRequest* request, GetTaskAttributeStringResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetTaskAttributeStringRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TaskStringAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTaskAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TaskStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTaskAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ReadBinaryI16(::grpc::ServerContext* context, const ReadBinaryI16Request* request, ReadBinaryI16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - - while (true) { - auto status = library_->GetTaskAttributeString(task, attribute, nullptr, 0); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 fill_mode; + switch (request->fill_mode_enum_case()) { + case nidaqmx_grpc::ReadBinaryI16Request::FillModeEnumCase::kFillMode: { + fill_mode = static_cast(request->fill_mode()); + break; + } + case nidaqmx_grpc::ReadBinaryI16Request::FillModeEnumCase::kFillModeRaw: { + fill_mode = static_cast(request->fill_mode_raw()); + break; + } + case nidaqmx_grpc::ReadBinaryI16Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); + break; + } } - uInt32 size = status; - std::string value; - if (size > 0) { - value.resize(size - 1); - } - status = library_->GetTaskAttributeString(task, attribute, (char*)value.data(), size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { - // buffer is now too small, try again - continue; - } - if (!status_ok(status)) { + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + std::vector read_array(array_size_in_samps); + int32 samps_per_chan_read {}; + auto status = library_->ReadBinaryI16(task, num_samps_per_chan, timeout, fill_mode, read_array.data(), array_size_in_samps, &samps_per_chan_read, reserved); + context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); + if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { return ConvertApiErrorStatusForTaskHandle(context, status, task); } response->set_status(status); - std::string value_utf8; - convert_to_grpc(value, &value_utf8); - response->set_value(value_utf8); - nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); + response->mutable_read_array()->Clear(); + response->mutable_read_array()->Reserve(array_size_in_samps); + std::transform( + read_array.begin(), + read_array.begin() + array_size_in_samps, + google::protobuf::RepeatedFieldBackInserter(response->mutable_read_array()), + [&](auto x) { + return x; + }); + response->set_samps_per_chan_read(samps_per_chan_read); return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetTaskAttributeUInt32(::grpc::ServerContext* context, const GetTaskAttributeUInt32Request* request, GetTaskAttributeUInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetTaskAttributeUInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TaskUInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTaskAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TaskUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTaskAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - uInt32 value{}; - auto status = library_->GetTaskAttributeUInt32(task, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginReadBinaryI16(::grpc::ServerContext* context, const BeginReadBinaryI16Request* request, BeginReadBinaryI16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 fill_mode; + switch (request->fill_mode_enum_case()) { + case nidaqmx_grpc::BeginReadBinaryI16Request::FillModeEnumCase::kFillMode: { + fill_mode = static_cast(request->fill_mode()); + break; + } + case nidaqmx_grpc::BeginReadBinaryI16Request::FillModeEnumCase::kFillModeRaw: { + fill_mode = static_cast(request->fill_mode_raw()); + break; + } + case nidaqmx_grpc::BeginReadBinaryI16Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetTimingAttributeBool(::grpc::ServerContext* context, const GetTimingAttributeBoolRequest* request, GetTimingAttributeBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetTimingAttributeBoolRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TimingBoolAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTimingAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TimingBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTimingAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - bool32 value{}; - auto status = library_->GetTimingAttributeBool(task, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->timeout = timeout; + data->fill_mode = fill_mode; + data->array_size_in_samps = array_size_in_samps; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + data->response.mutable_read_array()->Reserve(request->array_size_in_samps()); + data->response.mutable_read_array()->Resize(request->array_size_in_samps(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadBinaryI16", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetTimingAttributeDouble(::grpc::ServerContext* context, const GetTimingAttributeDoubleRequest* request, GetTimingAttributeDoubleResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetTimingAttributeDoubleRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TimingDoubleAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTimingAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TimingDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTimingAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - float64 value{}; - auto status = library_->GetTimingAttributeDouble(task, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ReadBinaryI32(::grpc::ServerContext* context, const ReadBinaryI32Request* request, ReadBinaryI32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 fill_mode; + switch (request->fill_mode_enum_case()) { + case nidaqmx_grpc::ReadBinaryI32Request::FillModeEnumCase::kFillMode: { + fill_mode = static_cast(request->fill_mode()); + break; + } + case nidaqmx_grpc::ReadBinaryI32Request::FillModeEnumCase::kFillModeRaw: { + fill_mode = static_cast(request->fill_mode_raw()); + break; + } + case nidaqmx_grpc::ReadBinaryI32Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetTimingAttributeExBool(::grpc::ServerContext* context, const GetTimingAttributeExBoolRequest* request, GetTimingAttributeExBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto device_names_mbcs = convert_from_grpc(request->device_names()); - auto device_names = device_names_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetTimingAttributeExBoolRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TimingBoolAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTimingAttributeExBoolRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TimingBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTimingAttributeExBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - bool32 value{}; - auto status = library_->GetTimingAttributeExBool(task, device_names, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + response->mutable_read_array()->Resize(array_size_in_samps, 0); + int32* read_array = reinterpret_cast(response->mutable_read_array()->mutable_data()); + int32 samps_per_chan_read {}; + auto status = library_->ReadBinaryI32(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); + context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); + if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + response->set_samps_per_chan_read(samps_per_chan_read); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetTimingAttributeExDouble(::grpc::ServerContext* context, const GetTimingAttributeExDoubleRequest* request, GetTimingAttributeExDoubleResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto device_names_mbcs = convert_from_grpc(request->device_names()); - auto device_names = device_names_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetTimingAttributeExDoubleRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TimingDoubleAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTimingAttributeExDoubleRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TimingDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTimingAttributeExDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - float64 value{}; - auto status = library_->GetTimingAttributeExDouble(task, device_names, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginReadBinaryI32(::grpc::ServerContext* context, const BeginReadBinaryI32Request* request, BeginReadBinaryI32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 fill_mode; + switch (request->fill_mode_enum_case()) { + case nidaqmx_grpc::BeginReadBinaryI32Request::FillModeEnumCase::kFillMode: { + fill_mode = static_cast(request->fill_mode()); + break; + } + case nidaqmx_grpc::BeginReadBinaryI32Request::FillModeEnumCase::kFillModeRaw: { + fill_mode = static_cast(request->fill_mode_raw()); + break; + } + case nidaqmx_grpc::BeginReadBinaryI32Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetTimingAttributeExInt32(::grpc::ServerContext* context, const GetTimingAttributeExInt32Request* request, GetTimingAttributeExInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto device_names_mbcs = convert_from_grpc(request->device_names()); - auto device_names = device_names_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetTimingAttributeExInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TimingInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTimingAttributeExInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TimingInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTimingAttributeExInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - int32 value{}; - auto status = library_->GetTimingAttributeExInt32(task, device_names, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - auto checked_convert_value = [](auto raw_value) { - bool raw_value_is_valid = nidaqmx_grpc::TimingInt32AttributeValues_IsValid(raw_value); - auto valid_enum_value = raw_value_is_valid ? raw_value : 0; - return static_cast(valid_enum_value); - }; - response->set_value(checked_convert_value(value)); - response->set_value_raw(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->timeout = timeout; + data->fill_mode = fill_mode; + data->array_size_in_samps = array_size_in_samps; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + data->response.mutable_read_array()->Reserve(request->array_size_in_samps()); + data->response.mutable_read_array()->Resize(request->array_size_in_samps(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadBinaryI32", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetTimingAttributeExString(::grpc::ServerContext* context, const GetTimingAttributeExStringRequest* request, GetTimingAttributeExStringResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto device_names_mbcs = convert_from_grpc(request->device_names()); - auto device_names = device_names_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetTimingAttributeExStringRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TimingStringAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTimingAttributeExStringRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TimingStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTimingAttributeExStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ReadBinaryU16(::grpc::ServerContext* context, const ReadBinaryU16Request* request, ReadBinaryU16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - - while (true) { - auto status = library_->GetTimingAttributeExString(task, device_names, attribute, nullptr, 0); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 fill_mode; + switch (request->fill_mode_enum_case()) { + case nidaqmx_grpc::ReadBinaryU16Request::FillModeEnumCase::kFillMode: { + fill_mode = static_cast(request->fill_mode()); + break; + } + case nidaqmx_grpc::ReadBinaryU16Request::FillModeEnumCase::kFillModeRaw: { + fill_mode = static_cast(request->fill_mode_raw()); + break; + } + case nidaqmx_grpc::ReadBinaryU16Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); + break; + } } - uInt32 size = status; - std::string value; - if (size > 0) { - value.resize(size - 1); - } - status = library_->GetTimingAttributeExString(task, device_names, attribute, (char*)value.data(), size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { - // buffer is now too small, try again - continue; - } - if (!status_ok(status)) { + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + std::vector read_array(array_size_in_samps); + int32 samps_per_chan_read {}; + auto status = library_->ReadBinaryU16(task, num_samps_per_chan, timeout, fill_mode, read_array.data(), array_size_in_samps, &samps_per_chan_read, reserved); + context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); + if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { return ConvertApiErrorStatusForTaskHandle(context, status, task); } response->set_status(status); - std::string value_utf8; - convert_to_grpc(value, &value_utf8); - response->set_value(value_utf8); - nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); + response->mutable_read_array()->Clear(); + response->mutable_read_array()->Reserve(array_size_in_samps); + std::transform( + read_array.begin(), + read_array.begin() + array_size_in_samps, + google::protobuf::RepeatedFieldBackInserter(response->mutable_read_array()), + [&](auto x) { + return x; + }); + response->set_samps_per_chan_read(samps_per_chan_read); return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetTimingAttributeExTimestamp(::grpc::ServerContext* context, const GetTimingAttributeExTimestampRequest* request, GetTimingAttributeExTimestampResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto device_names_mbcs = convert_from_grpc(request->device_names()); - auto device_names = device_names_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetTimingAttributeExTimestampRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TimingTimestampAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTimingAttributeExTimestampRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TimingTimestampAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTimingAttributeExTimestampRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - CVIAbsoluteTime value{}; - auto status = library_->GetTimingAttributeExTimestamp(task, device_names, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - convert_to_grpc(value, response->mutable_value()); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetTimingAttributeExUInt32(::grpc::ServerContext* context, const GetTimingAttributeExUInt32Request* request, GetTimingAttributeExUInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto device_names_mbcs = convert_from_grpc(request->device_names()); - auto device_names = device_names_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetTimingAttributeExUInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TimingUInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTimingAttributeExUInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TimingUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTimingAttributeExUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - uInt32 value{}; - auto status = library_->GetTimingAttributeExUInt32(task, device_names, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetTimingAttributeExUInt64(::grpc::ServerContext* context, const GetTimingAttributeExUInt64Request* request, GetTimingAttributeExUInt64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto device_names_mbcs = convert_from_grpc(request->device_names()); - auto device_names = device_names_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetTimingAttributeExUInt64Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TimingUInt64Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTimingAttributeExUInt64Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TimingUInt64Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTimingAttributeExUInt64Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - uInt64 value{}; - auto status = library_->GetTimingAttributeExUInt64(task, device_names, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginReadBinaryU16(::grpc::ServerContext* context, const BeginReadBinaryU16Request* request, BeginReadBinaryU16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 fill_mode; + switch (request->fill_mode_enum_case()) { + case nidaqmx_grpc::BeginReadBinaryU16Request::FillModeEnumCase::kFillMode: { + fill_mode = static_cast(request->fill_mode()); + break; + } + case nidaqmx_grpc::BeginReadBinaryU16Request::FillModeEnumCase::kFillModeRaw: { + fill_mode = static_cast(request->fill_mode_raw()); + break; + } + case nidaqmx_grpc::BeginReadBinaryU16Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetTimingAttributeInt32(::grpc::ServerContext* context, const GetTimingAttributeInt32Request* request, GetTimingAttributeInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetTimingAttributeInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TimingInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTimingAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TimingInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTimingAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - int32 value{}; - auto status = library_->GetTimingAttributeInt32(task, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - auto checked_convert_value = [](auto raw_value) { - bool raw_value_is_valid = nidaqmx_grpc::TimingInt32AttributeValues_IsValid(raw_value); - auto valid_enum_value = raw_value_is_valid ? raw_value : 0; - return static_cast(valid_enum_value); - }; - response->set_value(checked_convert_value(value)); - response->set_value_raw(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->timeout = timeout; + data->fill_mode = fill_mode; + data->array_size_in_samps = array_size_in_samps; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + data->response.mutable_read_array()->Reserve(request->array_size_in_samps()); + data->response.mutable_read_array()->Resize(request->array_size_in_samps(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadBinaryU16", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetTimingAttributeString(::grpc::ServerContext* context, const GetTimingAttributeStringRequest* request, GetTimingAttributeStringResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetTimingAttributeStringRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TimingStringAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTimingAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TimingStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTimingAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ReadBinaryU32(::grpc::ServerContext* context, const ReadBinaryU32Request* request, ReadBinaryU32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 fill_mode; + switch (request->fill_mode_enum_case()) { + case nidaqmx_grpc::ReadBinaryU32Request::FillModeEnumCase::kFillMode: { + fill_mode = static_cast(request->fill_mode()); + break; + } + case nidaqmx_grpc::ReadBinaryU32Request::FillModeEnumCase::kFillModeRaw: { + fill_mode = static_cast(request->fill_mode_raw()); + break; + } + case nidaqmx_grpc::ReadBinaryU32Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); + break; + } + } - while (true) { - auto status = library_->GetTimingAttributeString(task, attribute, nullptr, 0); - if (!status_ok(status)) { + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + response->mutable_read_array()->Resize(array_size_in_samps, 0); + uInt32* read_array = reinterpret_cast(response->mutable_read_array()->mutable_data()); + int32 samps_per_chan_read {}; + auto status = library_->ReadBinaryU32(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); + context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); + if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { return ConvertApiErrorStatusForTaskHandle(context, status, task); } - uInt32 size = status; + response->set_status(status); + response->set_samps_per_chan_read(samps_per_chan_read); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } - std::string value; - if (size > 0) { - value.resize(size - 1); - } - status = library_->GetTimingAttributeString(task, attribute, (char*)value.data(), size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { - // buffer is now too small, try again - continue; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginReadBinaryU32(::grpc::ServerContext* context, const BeginReadBinaryU32Request* request, BeginReadBinaryU32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 fill_mode; + switch (request->fill_mode_enum_case()) { + case nidaqmx_grpc::BeginReadBinaryU32Request::FillModeEnumCase::kFillMode: { + fill_mode = static_cast(request->fill_mode()); + break; + } + case nidaqmx_grpc::BeginReadBinaryU32Request::FillModeEnumCase::kFillModeRaw: { + fill_mode = static_cast(request->fill_mode_raw()); + break; + } + case nidaqmx_grpc::BeginReadBinaryU32Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); + break; + } } - if (!status_ok(status)) { + + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->timeout = timeout; + data->fill_mode = fill_mode; + data->array_size_in_samps = array_size_in_samps; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + data->response.mutable_read_array()->Reserve(request->array_size_in_samps()); + data->response.mutable_read_array()->Resize(request->array_size_in_samps(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadBinaryU32", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ReadCounterF64(::grpc::ServerContext* context, const ReadCounterF64Request* request, ReadCounterF64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + response->mutable_read_array()->Resize(array_size_in_samps, 0); + float64* read_array = response->mutable_read_array()->mutable_data(); + int32 samps_per_chan_read {}; + auto status = library_->ReadCounterF64(task, num_samps_per_chan, timeout, read_array, array_size_in_samps, &samps_per_chan_read, reserved); + context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); + if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { return ConvertApiErrorStatusForTaskHandle(context, status, task); } response->set_status(status); - std::string value_utf8; - convert_to_grpc(value, &value_utf8); - response->set_value(value_utf8); - nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); + response->set_samps_per_chan_read(samps_per_chan_read); return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginReadCounterF64(::grpc::ServerContext* context, const BeginReadCounterF64Request* request, BeginReadCounterF64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->timeout = timeout; + data->array_size_in_samps = array_size_in_samps; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + data->response.mutable_read_array()->Reserve(request->array_size_in_samps()); + data->response.mutable_read_array()->Resize(request->array_size_in_samps(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCounterF64", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetTimingAttributeTimestamp(::grpc::ServerContext* context, const GetTimingAttributeTimestampRequest* request, GetTimingAttributeTimestampResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetTimingAttributeTimestampRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TimingTimestampAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTimingAttributeTimestampRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TimingTimestampAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTimingAttributeTimestampRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - CVIAbsoluteTime value{}; - auto status = library_->GetTimingAttributeTimestamp(task, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - convert_to_grpc(value, response->mutable_value()); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetTimingAttributeUInt32(::grpc::ServerContext* context, const GetTimingAttributeUInt32Request* request, GetTimingAttributeUInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetTimingAttributeUInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TimingUInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTimingAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TimingUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTimingAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - uInt32 value{}; - auto status = library_->GetTimingAttributeUInt32(task, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ReadCounterF64Ex(::grpc::ServerContext* context, const ReadCounterF64ExRequest* request, ReadCounterF64ExResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 fill_mode; + switch (request->fill_mode_enum_case()) { + case nidaqmx_grpc::ReadCounterF64ExRequest::FillModeEnumCase::kFillMode: { + fill_mode = static_cast(request->fill_mode()); + break; + } + case nidaqmx_grpc::ReadCounterF64ExRequest::FillModeEnumCase::kFillModeRaw: { + fill_mode = static_cast(request->fill_mode_raw()); + break; + } + case nidaqmx_grpc::ReadCounterF64ExRequest::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetTimingAttributeUInt64(::grpc::ServerContext* context, const GetTimingAttributeUInt64Request* request, GetTimingAttributeUInt64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetTimingAttributeUInt64Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TimingUInt64Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTimingAttributeUInt64Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TimingUInt64Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTimingAttributeUInt64Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - uInt64 value{}; - auto status = library_->GetTimingAttributeUInt64(task, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + response->mutable_read_array()->Resize(array_size_in_samps, 0); + float64* read_array = response->mutable_read_array()->mutable_data(); + int32 samps_per_chan_read {}; + auto status = library_->ReadCounterF64Ex(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); + context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); + if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + response->set_samps_per_chan_read(samps_per_chan_read); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetTrigAttributeBool(::grpc::ServerContext* context, const GetTrigAttributeBoolRequest* request, GetTrigAttributeBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetTrigAttributeBoolRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TriggerBoolAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTrigAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TriggerBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTrigAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - bool32 value{}; - auto status = library_->GetTrigAttributeBool(task, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginReadCounterF64Ex(::grpc::ServerContext* context, const BeginReadCounterF64ExRequest* request, BeginReadCounterF64ExResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 fill_mode; + switch (request->fill_mode_enum_case()) { + case nidaqmx_grpc::BeginReadCounterF64ExRequest::FillModeEnumCase::kFillMode: { + fill_mode = static_cast(request->fill_mode()); + break; + } + case nidaqmx_grpc::BeginReadCounterF64ExRequest::FillModeEnumCase::kFillModeRaw: { + fill_mode = static_cast(request->fill_mode_raw()); + break; + } + case nidaqmx_grpc::BeginReadCounterF64ExRequest::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetTrigAttributeDouble(::grpc::ServerContext* context, const GetTrigAttributeDoubleRequest* request, GetTrigAttributeDoubleResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetTrigAttributeDoubleRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TriggerDoubleAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTrigAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TriggerDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTrigAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - float64 value{}; - auto status = library_->GetTrigAttributeDouble(task, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->timeout = timeout; + data->fill_mode = fill_mode; + data->array_size_in_samps = array_size_in_samps; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + data->response.mutable_read_array()->Reserve(request->array_size_in_samps()); + data->response.mutable_read_array()->Resize(request->array_size_in_samps(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCounterF64Ex", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetTrigAttributeDoubleArray(::grpc::ServerContext* context, const GetTrigAttributeDoubleArrayRequest* request, GetTrigAttributeDoubleArrayResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetTrigAttributeDoubleArrayRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TriggerDoubleArrayAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTrigAttributeDoubleArrayRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TriggerDoubleArrayAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTrigAttributeDoubleArrayRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ReadCounterScalarF64(::grpc::ServerContext* context, const ReadCounterScalarF64Request* request, ReadCounterScalarF64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - - while (true) { - auto status = library_->GetTrigAttributeDoubleArray(task, attribute, nullptr, 0); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - uInt32 size = status; - - response->mutable_value()->Resize(size, 0); - float64* value = response->mutable_value()->mutable_data(); - status = library_->GetTrigAttributeDoubleArray(task, attribute, value, size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { - // buffer is now too small, try again - continue; - } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + float64 timeout = request->timeout(); + auto reserved = nullptr; + float64 value {}; + auto status = library_->ReadCounterScalarF64(task, timeout, &value, reserved); if (!status_ok(status)) { return ConvertApiErrorStatusForTaskHandle(context, status, task); } response->set_status(status); + response->set_value(value); return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetTrigAttributeInt32(::grpc::ServerContext* context, const GetTrigAttributeInt32Request* request, GetTrigAttributeInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetTrigAttributeInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TriggerInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTrigAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TriggerInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTrigAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - int32 value{}; - auto status = library_->GetTrigAttributeInt32(task, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - auto checked_convert_value = [](auto raw_value) { - bool raw_value_is_valid = nidaqmx_grpc::TriggerInt32AttributeValues_IsValid(raw_value); - auto valid_enum_value = raw_value_is_valid ? raw_value : 0; - return static_cast(valid_enum_value); - }; - response->set_value(checked_convert_value(value)); - response->set_value_raw(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetTrigAttributeInt32Array(::grpc::ServerContext* context, const GetTrigAttributeInt32ArrayRequest* request, GetTrigAttributeInt32ArrayResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetTrigAttributeInt32ArrayRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TriggerInt32ArrayAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTrigAttributeInt32ArrayRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TriggerInt32ArrayAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTrigAttributeInt32ArrayRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginReadCounterScalarF64(::grpc::ServerContext* context, const BeginReadCounterScalarF64Request* request, BeginReadCounterScalarF64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + float64 timeout = request->timeout(); + auto reserved = nullptr; - while (true) { - auto status = library_->GetTrigAttributeInt32Array(task, attribute, nullptr, 0); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - uInt32 size = status; + auto data = std::make_unique(); + data->task = task; + data->timeout = timeout; + data->reserved = reserved; + data->library = std::shared_ptr(library_); - response->mutable_value_raw()->Resize(size, 0); - int32* value = reinterpret_cast(response->mutable_value_raw()->mutable_data()); - status = library_->GetTrigAttributeInt32Array(task, attribute, value, size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { - // buffer is now too small, try again - continue; - } + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCounterScalarF64", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ReadCounterScalarU32(::grpc::ServerContext* context, const ReadCounterScalarU32Request* request, ReadCounterScalarU32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + float64 timeout = request->timeout(); + auto reserved = nullptr; + uInt32 value {}; + auto status = library_->ReadCounterScalarU32(task, timeout, &value, reserved); if (!status_ok(status)) { return ConvertApiErrorStatusForTaskHandle(context, status, task); } response->set_status(status); - auto checked_convert_value = [](auto raw_value) { - bool raw_value_is_valid = nidaqmx_grpc::TriggerInt32AttributeValues_IsValid(raw_value); - auto valid_enum_value = raw_value_is_valid ? raw_value : 0; - return static_cast(valid_enum_value); - }; - response->mutable_value()->Clear(); - response->mutable_value()->Reserve(size); - std::transform( - response->value_raw().begin(), - response->value_raw().begin() + size, - google::protobuf::RepeatedFieldBackInserter(response->mutable_value()), - [&](auto x) { - return checked_convert_value(x); - }); + response->set_value(value); return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetTrigAttributeString(::grpc::ServerContext* context, const GetTrigAttributeStringRequest* request, GetTrigAttributeStringResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetTrigAttributeStringRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TriggerStringAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTrigAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TriggerStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTrigAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginReadCounterScalarU32(::grpc::ServerContext* context, const BeginReadCounterScalarU32Request* request, BeginReadCounterScalarU32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + float64 timeout = request->timeout(); + auto reserved = nullptr; - while (true) { - auto status = library_->GetTrigAttributeString(task, attribute, nullptr, 0); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - uInt32 size = status; + auto data = std::make_unique(); + data->task = task; + data->timeout = timeout; + data->reserved = reserved; + data->library = std::shared_ptr(library_); - std::string value; - if (size > 0) { - value.resize(size - 1); - } - status = library_->GetTrigAttributeString(task, attribute, (char*)value.data(), size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { - // buffer is now too small, try again - continue; - } - if (!status_ok(status)) { + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCounterScalarU32", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ReadCounterU32(::grpc::ServerContext* context, const ReadCounterU32Request* request, ReadCounterU32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + response->mutable_read_array()->Resize(array_size_in_samps, 0); + uInt32* read_array = reinterpret_cast(response->mutable_read_array()->mutable_data()); + int32 samps_per_chan_read {}; + auto status = library_->ReadCounterU32(task, num_samps_per_chan, timeout, read_array, array_size_in_samps, &samps_per_chan_read, reserved); + context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); + if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { return ConvertApiErrorStatusForTaskHandle(context, status, task); } response->set_status(status); - std::string value_utf8; - convert_to_grpc(value, &value_utf8); - response->set_value(value_utf8); - nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); + response->set_samps_per_chan_read(samps_per_chan_read); return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginReadCounterU32(::grpc::ServerContext* context, const BeginReadCounterU32Request* request, BeginReadCounterU32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->timeout = timeout; + data->array_size_in_samps = array_size_in_samps; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + data->response.mutable_read_array()->Reserve(request->array_size_in_samps()); + data->response.mutable_read_array()->Resize(request->array_size_in_samps(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCounterU32", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetTrigAttributeTimestamp(::grpc::ServerContext* context, const GetTrigAttributeTimestampRequest* request, GetTrigAttributeTimestampResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetTrigAttributeTimestampRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TriggerTimestampAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTrigAttributeTimestampRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TriggerTimestampAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTrigAttributeTimestampRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - CVIAbsoluteTime value{}; - auto status = library_->GetTrigAttributeTimestamp(task, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - convert_to_grpc(value, response->mutable_value()); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetTrigAttributeUInt32(::grpc::ServerContext* context, const GetTrigAttributeUInt32Request* request, GetTrigAttributeUInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetTrigAttributeUInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TriggerUInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTrigAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TriggerUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTrigAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - uInt32 value{}; - auto status = library_->GetTrigAttributeUInt32(task, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ReadCounterU32Ex(::grpc::ServerContext* context, const ReadCounterU32ExRequest* request, ReadCounterU32ExResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 fill_mode; + switch (request->fill_mode_enum_case()) { + case nidaqmx_grpc::ReadCounterU32ExRequest::FillModeEnumCase::kFillMode: { + fill_mode = static_cast(request->fill_mode()); + break; + } + case nidaqmx_grpc::ReadCounterU32ExRequest::FillModeEnumCase::kFillModeRaw: { + fill_mode = static_cast(request->fill_mode_raw()); + break; + } + case nidaqmx_grpc::ReadCounterU32ExRequest::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetWatchdogAttributeBool(::grpc::ServerContext* context, const GetWatchdogAttributeBoolRequest* request, GetWatchdogAttributeBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto lines_mbcs = convert_from_grpc(request->lines()); - auto lines = lines_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetWatchdogAttributeBoolRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::WatchdogBoolAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetWatchdogAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::WatchdogBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetWatchdogAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - bool32 value{}; - auto status = library_->GetWatchdogAttributeBool(task, lines, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + response->mutable_read_array()->Resize(array_size_in_samps, 0); + uInt32* read_array = reinterpret_cast(response->mutable_read_array()->mutable_data()); + int32 samps_per_chan_read {}; + auto status = library_->ReadCounterU32Ex(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); + context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); + if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + response->set_samps_per_chan_read(samps_per_chan_read); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetWatchdogAttributeDouble(::grpc::ServerContext* context, const GetWatchdogAttributeDoubleRequest* request, GetWatchdogAttributeDoubleResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto lines_mbcs = convert_from_grpc(request->lines()); - auto lines = lines_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetWatchdogAttributeDoubleRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::WatchdogDoubleAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetWatchdogAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::WatchdogDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetWatchdogAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - float64 value{}; - auto status = library_->GetWatchdogAttributeDouble(task, lines, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginReadCounterU32Ex(::grpc::ServerContext* context, const BeginReadCounterU32ExRequest* request, BeginReadCounterU32ExResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 fill_mode; + switch (request->fill_mode_enum_case()) { + case nidaqmx_grpc::BeginReadCounterU32ExRequest::FillModeEnumCase::kFillMode: { + fill_mode = static_cast(request->fill_mode()); + break; + } + case nidaqmx_grpc::BeginReadCounterU32ExRequest::FillModeEnumCase::kFillModeRaw: { + fill_mode = static_cast(request->fill_mode_raw()); + break; + } + case nidaqmx_grpc::BeginReadCounterU32ExRequest::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetWatchdogAttributeInt32(::grpc::ServerContext* context, const GetWatchdogAttributeInt32Request* request, GetWatchdogAttributeInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto lines_mbcs = convert_from_grpc(request->lines()); - auto lines = lines_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetWatchdogAttributeInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::WatchdogInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetWatchdogAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::WatchdogInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetWatchdogAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - int32 value{}; - auto status = library_->GetWatchdogAttributeInt32(task, lines, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - auto checked_convert_value = [](auto raw_value) { - bool raw_value_is_valid = nidaqmx_grpc::WatchdogInt32AttributeValues_IsValid(raw_value); - auto valid_enum_value = raw_value_is_valid ? raw_value : 0; - return static_cast(valid_enum_value); - }; - response->set_value(checked_convert_value(value)); - response->set_value_raw(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->timeout = timeout; + data->fill_mode = fill_mode; + data->array_size_in_samps = array_size_in_samps; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + data->response.mutable_read_array()->Reserve(request->array_size_in_samps()); + data->response.mutable_read_array()->Resize(request->array_size_in_samps(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCounterU32Ex", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetWatchdogAttributeString(::grpc::ServerContext* context, const GetWatchdogAttributeStringRequest* request, GetWatchdogAttributeStringResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto lines_mbcs = convert_from_grpc(request->lines()); - auto lines = lines_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetWatchdogAttributeStringRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::WatchdogStringAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetWatchdogAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::WatchdogStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetWatchdogAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ReadCtrFreq(::grpc::ServerContext* context, const ReadCtrFreqRequest* request, ReadCtrFreqResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 interleaved; + switch (request->interleaved_enum_case()) { + case nidaqmx_grpc::ReadCtrFreqRequest::InterleavedEnumCase::kInterleaved: { + interleaved = static_cast(request->interleaved()); + break; + } + case nidaqmx_grpc::ReadCtrFreqRequest::InterleavedEnumCase::kInterleavedRaw: { + interleaved = static_cast(request->interleaved_raw()); + break; + } + case nidaqmx_grpc::ReadCtrFreqRequest::InterleavedEnumCase::INTERLEAVED_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for interleaved was not specified or out of range"); + break; + } + } - while (true) { - auto status = library_->GetWatchdogAttributeString(task, lines, attribute, nullptr, 0); - if (!status_ok(status)) { + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + response->mutable_read_array_frequency()->Resize(array_size_in_samps, 0); + float64* read_array_frequency = response->mutable_read_array_frequency()->mutable_data(); + response->mutable_read_array_duty_cycle()->Resize(array_size_in_samps, 0); + float64* read_array_duty_cycle = response->mutable_read_array_duty_cycle()->mutable_data(); + int32 samps_per_chan_read {}; + auto status = library_->ReadCtrFreq(task, num_samps_per_chan, timeout, interleaved, read_array_frequency, read_array_duty_cycle, array_size_in_samps, &samps_per_chan_read, reserved); + context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); + if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { return ConvertApiErrorStatusForTaskHandle(context, status, task); } - uInt32 size = status; + response->set_status(status); + response->set_samps_per_chan_read(samps_per_chan_read); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } - std::string value; - if (size > 0) { - value.resize(size - 1); - } - status = library_->GetWatchdogAttributeString(task, lines, attribute, (char*)value.data(), size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { - // buffer is now too small, try again - continue; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginReadCtrFreq(::grpc::ServerContext* context, const BeginReadCtrFreqRequest* request, BeginReadCtrFreqResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 interleaved; + switch (request->interleaved_enum_case()) { + case nidaqmx_grpc::BeginReadCtrFreqRequest::InterleavedEnumCase::kInterleaved: { + interleaved = static_cast(request->interleaved()); + break; + } + case nidaqmx_grpc::BeginReadCtrFreqRequest::InterleavedEnumCase::kInterleavedRaw: { + interleaved = static_cast(request->interleaved_raw()); + break; + } + case nidaqmx_grpc::BeginReadCtrFreqRequest::InterleavedEnumCase::INTERLEAVED_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for interleaved was not specified or out of range"); + break; + } } + + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->timeout = timeout; + data->interleaved = interleaved; + data->array_size_in_samps = array_size_in_samps; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + data->response.mutable_read_array_frequency()->Reserve(request->array_size_in_samps()); + data->response.mutable_read_array_frequency()->Resize(request->array_size_in_samps(), 0); + data->response.mutable_read_array_duty_cycle()->Reserve(request->array_size_in_samps()); + data->response.mutable_read_array_duty_cycle()->Resize(request->array_size_in_samps(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCtrFreq", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ReadCtrFreqScalar(::grpc::ServerContext* context, const ReadCtrFreqScalarRequest* request, ReadCtrFreqScalarResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + float64 timeout = request->timeout(); + auto reserved = nullptr; + float64 frequency {}; + float64 duty_cycle {}; + auto status = library_->ReadCtrFreqScalar(task, timeout, &frequency, &duty_cycle, reserved); if (!status_ok(status)) { return ConvertApiErrorStatusForTaskHandle(context, status, task); } response->set_status(status); - std::string value_utf8; - convert_to_grpc(value, &value_utf8); - response->set_value(value_utf8); - nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); + response->set_frequency(frequency); + response->set_duty_cycle(duty_cycle); return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetWriteAttributeBool(::grpc::ServerContext* context, const GetWriteAttributeBoolRequest* request, GetWriteAttributeBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetWriteAttributeBoolRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::WriteBoolAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetWriteAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::WriteBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetWriteAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - bool32 value{}; - auto status = library_->GetWriteAttributeBool(task, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginReadCtrFreqScalar(::grpc::ServerContext* context, const BeginReadCtrFreqScalarRequest* request, BeginReadCtrFreqScalarResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + float64 timeout = request->timeout(); + auto reserved = nullptr; -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetWriteAttributeDouble(::grpc::ServerContext* context, const GetWriteAttributeDoubleRequest* request, GetWriteAttributeDoubleResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetWriteAttributeDoubleRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::WriteDoubleAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetWriteAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::WriteDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetWriteAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - float64 value{}; - auto status = library_->GetWriteAttributeDouble(task, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + auto data = std::make_unique(); + data->task = task; + data->timeout = timeout; + data->reserved = reserved; + data->library = std::shared_ptr(library_); -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetWriteAttributeInt32(::grpc::ServerContext* context, const GetWriteAttributeInt32Request* request, GetWriteAttributeInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetWriteAttributeInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::WriteInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetWriteAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::WriteInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetWriteAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - int32 value{}; - auto status = library_->GetWriteAttributeInt32(task, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - auto checked_convert_value = [](auto raw_value) { - bool raw_value_is_valid = nidaqmx_grpc::WriteInt32AttributeValues_IsValid(raw_value); - auto valid_enum_value = raw_value_is_valid ? raw_value : 0; - return static_cast(valid_enum_value); - }; - response->set_value(checked_convert_value(value)); - response->set_value_raw(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCtrFreqScalar", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetWriteAttributeString(::grpc::ServerContext* context, const GetWriteAttributeStringRequest* request, GetWriteAttributeStringResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetWriteAttributeStringRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::WriteStringAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetWriteAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::WriteStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetWriteAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ReadCtrTicks(::grpc::ServerContext* context, const ReadCtrTicksRequest* request, ReadCtrTicksResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - - while (true) { - auto status = library_->GetWriteAttributeString(task, attribute, nullptr, 0); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 interleaved; + switch (request->interleaved_enum_case()) { + case nidaqmx_grpc::ReadCtrTicksRequest::InterleavedEnumCase::kInterleaved: { + interleaved = static_cast(request->interleaved()); + break; + } + case nidaqmx_grpc::ReadCtrTicksRequest::InterleavedEnumCase::kInterleavedRaw: { + interleaved = static_cast(request->interleaved_raw()); + break; + } + case nidaqmx_grpc::ReadCtrTicksRequest::InterleavedEnumCase::INTERLEAVED_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for interleaved was not specified or out of range"); + break; + } } - uInt32 size = status; - std::string value; - if (size > 0) { - value.resize(size - 1); - } - status = library_->GetWriteAttributeString(task, attribute, (char*)value.data(), size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { - // buffer is now too small, try again - continue; - } - if (!status_ok(status)) { + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + response->mutable_read_array_high_ticks()->Resize(array_size_in_samps, 0); + uInt32* read_array_high_ticks = reinterpret_cast(response->mutable_read_array_high_ticks()->mutable_data()); + response->mutable_read_array_low_ticks()->Resize(array_size_in_samps, 0); + uInt32* read_array_low_ticks = reinterpret_cast(response->mutable_read_array_low_ticks()->mutable_data()); + int32 samps_per_chan_read {}; + auto status = library_->ReadCtrTicks(task, num_samps_per_chan, timeout, interleaved, read_array_high_ticks, read_array_low_ticks, array_size_in_samps, &samps_per_chan_read, reserved); + context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); + if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { return ConvertApiErrorStatusForTaskHandle(context, status, task); } response->set_status(status); - std::string value_utf8; - convert_to_grpc(value, &value_utf8); - response->set_value(value_utf8); - nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); + response->set_samps_per_chan_read(samps_per_chan_read); return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetWriteAttributeUInt32(::grpc::ServerContext* context, const GetWriteAttributeUInt32Request* request, GetWriteAttributeUInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetWriteAttributeUInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::WriteUInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetWriteAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::WriteUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetWriteAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - uInt32 value{}; - auto status = library_->GetWriteAttributeUInt32(task, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginReadCtrTicks(::grpc::ServerContext* context, const BeginReadCtrTicksRequest* request, BeginReadCtrTicksResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 interleaved; + switch (request->interleaved_enum_case()) { + case nidaqmx_grpc::BeginReadCtrTicksRequest::InterleavedEnumCase::kInterleaved: { + interleaved = static_cast(request->interleaved()); + break; + } + case nidaqmx_grpc::BeginReadCtrTicksRequest::InterleavedEnumCase::kInterleavedRaw: { + interleaved = static_cast(request->interleaved_raw()); + break; + } + case nidaqmx_grpc::BeginReadCtrTicksRequest::InterleavedEnumCase::INTERLEAVED_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for interleaved was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetWriteAttributeUInt64(::grpc::ServerContext* context, const GetWriteAttributeUInt64Request* request, GetWriteAttributeUInt64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetWriteAttributeUInt64Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::WriteUInt64Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetWriteAttributeUInt64Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::WriteUInt64Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetWriteAttributeUInt64Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - uInt64 value{}; - auto status = library_->GetWriteAttributeUInt64(task, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->timeout = timeout; + data->interleaved = interleaved; + data->array_size_in_samps = array_size_in_samps; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + data->response.mutable_read_array_high_ticks()->Reserve(request->array_size_in_samps()); + data->response.mutable_read_array_high_ticks()->Resize(request->array_size_in_samps(), 0); + data->response.mutable_read_array_low_ticks()->Reserve(request->array_size_in_samps()); + data->response.mutable_read_array_low_ticks()->Resize(request->array_size_in_samps(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCtrTicks", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::IsTaskDone(::grpc::ServerContext* context, const IsTaskDoneRequest* request, IsTaskDoneResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - bool32 is_task_done{}; - auto status = library_->IsTaskDone(task, &is_task_done); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_is_task_done(is_task_done); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ReadCtrTicksScalar(::grpc::ServerContext* context, const ReadCtrTicksScalarRequest* request, ReadCtrTicksScalarResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + float64 timeout = request->timeout(); + auto reserved = nullptr; + uInt32 high_ticks {}; + uInt32 low_ticks {}; + auto status = library_->ReadCtrTicksScalar(task, timeout, &high_ticks, &low_ticks, reserved); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + response->set_high_ticks(high_ticks); + response->set_low_ticks(low_ticks); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::LoadTask(::grpc::ServerContext* context, const LoadTaskRequest* request, LoadTaskResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_name_mbcs = convert_from_grpc(request->session_name()); - auto session_name = session_name_mbcs.c_str(); - auto initialization_behavior = request->initialization_behavior(); - - bool new_session_initialized{}; - auto init_lambda = [&]() { - TaskHandle task; - auto status = library_->LoadTask(session_name, &task); - return std::make_tuple(status, task); - }; - std::string grpc_device_session_name = request->session_name(); - // Capture the library shared_ptr by value. Do not capture `this` or any references. - LibrarySharedPtr library = library_; - auto cleanup_lambda = [library](TaskHandle id) { library->ClearTask(id); }; - int status = session_repository_->add_session(grpc_device_session_name, init_lambda, cleanup_lambda, initialization_behavior, &new_session_initialized); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - response->mutable_task()->set_name(grpc_device_session_name); - response->set_new_session_initialized(new_session_initialized); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginReadCtrTicksScalar(::grpc::ServerContext* context, const BeginReadCtrTicksScalarRequest* request, BeginReadCtrTicksScalarResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + float64 timeout = request->timeout(); + auto reserved = nullptr; -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::PerformBridgeOffsetNullingCalEx(::grpc::ServerContext* context, const PerformBridgeOffsetNullingCalExRequest* request, PerformBridgeOffsetNullingCalExResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto channel_mbcs = convert_from_grpc(request->channel()); - auto channel = channel_mbcs.c_str(); - bool32 skip_unsupported_channels = request->skip_unsupported_channels(); - auto status = library_->PerformBridgeOffsetNullingCalEx(task, channel, skip_unsupported_channels); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + auto data = std::make_unique(); + data->task = task; + data->timeout = timeout; + data->reserved = reserved; + data->library = std::shared_ptr(library_); -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::PerformBridgeShuntCalEx(::grpc::ServerContext* context, const PerformBridgeShuntCalExRequest* request, PerformBridgeShuntCalExResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCtrTicksScalar", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto channel_mbcs = convert_from_grpc(request->channel()); - auto channel = channel_mbcs.c_str(); - float64 shunt_resistor_value = request->shunt_resistor_value(); - int32 shunt_resistor_location; - switch (request->shunt_resistor_location_enum_case()) { - case nidaqmx_grpc::PerformBridgeShuntCalExRequest::ShuntResistorLocationEnumCase::kShuntResistorLocation: { - shunt_resistor_location = static_cast(request->shunt_resistor_location()); - break; - } - case nidaqmx_grpc::PerformBridgeShuntCalExRequest::ShuntResistorLocationEnumCase::kShuntResistorLocationRaw: { - shunt_resistor_location = static_cast(request->shunt_resistor_location_raw()); - break; + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ReadCtrTime(::grpc::ServerContext* context, const ReadCtrTimeRequest* request, ReadCtrTimeResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 interleaved; + switch (request->interleaved_enum_case()) { + case nidaqmx_grpc::ReadCtrTimeRequest::InterleavedEnumCase::kInterleaved: { + interleaved = static_cast(request->interleaved()); + break; + } + case nidaqmx_grpc::ReadCtrTimeRequest::InterleavedEnumCase::kInterleavedRaw: { + interleaved = static_cast(request->interleaved_raw()); + break; + } + case nidaqmx_grpc::ReadCtrTimeRequest::InterleavedEnumCase::INTERLEAVED_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for interleaved was not specified or out of range"); + break; + } } - case nidaqmx_grpc::PerformBridgeShuntCalExRequest::ShuntResistorLocationEnumCase::SHUNT_RESISTOR_LOCATION_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for shunt_resistor_location was not specified or out of range"); - break; + + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + response->mutable_read_array_high_time()->Resize(array_size_in_samps, 0); + float64* read_array_high_time = response->mutable_read_array_high_time()->mutable_data(); + response->mutable_read_array_low_time()->Resize(array_size_in_samps, 0); + float64* read_array_low_time = response->mutable_read_array_low_time()->mutable_data(); + int32 samps_per_chan_read {}; + auto status = library_->ReadCtrTime(task, num_samps_per_chan, timeout, interleaved, read_array_high_time, read_array_low_time, array_size_in_samps, &samps_per_chan_read, reserved); + context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); + if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + response->set_samps_per_chan_read(samps_per_chan_read); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } + } - int32 shunt_resistor_select; - switch (request->shunt_resistor_select_enum_case()) { - case nidaqmx_grpc::PerformBridgeShuntCalExRequest::ShuntResistorSelectEnumCase::kShuntResistorSelect: { - shunt_resistor_select = static_cast(request->shunt_resistor_select()); - break; - } - case nidaqmx_grpc::PerformBridgeShuntCalExRequest::ShuntResistorSelectEnumCase::kShuntResistorSelectRaw: { - shunt_resistor_select = static_cast(request->shunt_resistor_select_raw()); - break; - } - case nidaqmx_grpc::PerformBridgeShuntCalExRequest::ShuntResistorSelectEnumCase::SHUNT_RESISTOR_SELECT_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for shunt_resistor_select was not specified or out of range"); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginReadCtrTime(::grpc::ServerContext* context, const BeginReadCtrTimeRequest* request, BeginReadCtrTimeResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 interleaved; + switch (request->interleaved_enum_case()) { + case nidaqmx_grpc::BeginReadCtrTimeRequest::InterleavedEnumCase::kInterleaved: { + interleaved = static_cast(request->interleaved()); + break; + } + case nidaqmx_grpc::BeginReadCtrTimeRequest::InterleavedEnumCase::kInterleavedRaw: { + interleaved = static_cast(request->interleaved_raw()); + break; + } + case nidaqmx_grpc::BeginReadCtrTimeRequest::InterleavedEnumCase::INTERLEAVED_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for interleaved was not specified or out of range"); + break; + } } + + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->timeout = timeout; + data->interleaved = interleaved; + data->array_size_in_samps = array_size_in_samps; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + data->response.mutable_read_array_high_time()->Reserve(request->array_size_in_samps()); + data->response.mutable_read_array_high_time()->Resize(request->array_size_in_samps(), 0); + data->response.mutable_read_array_low_time()->Reserve(request->array_size_in_samps()); + data->response.mutable_read_array_low_time()->Resize(request->array_size_in_samps(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCtrTime", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } + } - int32 shunt_resistor_source; - switch (request->shunt_resistor_source_enum_case()) { - case nidaqmx_grpc::PerformBridgeShuntCalExRequest::ShuntResistorSourceEnumCase::kShuntResistorSource: { - shunt_resistor_source = static_cast(request->shunt_resistor_source()); - break; - } - case nidaqmx_grpc::PerformBridgeShuntCalExRequest::ShuntResistorSourceEnumCase::kShuntResistorSourceRaw: { - shunt_resistor_source = static_cast(request->shunt_resistor_source_raw()); - break; - } - case nidaqmx_grpc::PerformBridgeShuntCalExRequest::ShuntResistorSourceEnumCase::SHUNT_RESISTOR_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for shunt_resistor_source was not specified or out of range"); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ReadCtrTimeScalar(::grpc::ServerContext* context, const ReadCtrTimeScalarRequest* request, ReadCtrTimeScalarResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + float64 timeout = request->timeout(); + auto reserved = nullptr; + float64 high_time {}; + float64 low_time {}; + auto status = library_->ReadCtrTimeScalar(task, timeout, &high_time, &low_time, reserved); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + response->set_high_time(high_time); + response->set_low_time(low_time); + return ::grpc::Status::OK; } - - float64 bridge_resistance = request->bridge_resistance(); - bool32 skip_unsupported_channels = request->skip_unsupported_channels(); - auto status = library_->PerformBridgeShuntCalEx(task, channel, shunt_resistor_value, shunt_resistor_location, shunt_resistor_select, shunt_resistor_source, bridge_resistance, skip_unsupported_channels); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::PerformStrainShuntCalEx(::grpc::ServerContext* context, const PerformStrainShuntCalExRequest* request, PerformStrainShuntCalExResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginReadCtrTimeScalar(::grpc::ServerContext* context, const BeginReadCtrTimeScalarRequest* request, BeginReadCtrTimeScalarResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + float64 timeout = request->timeout(); + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->timeout = timeout; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCtrTimeScalar", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto channel_mbcs = convert_from_grpc(request->channel()); - auto channel = channel_mbcs.c_str(); - float64 shunt_resistor_value = request->shunt_resistor_value(); - int32 shunt_resistor_location; - switch (request->shunt_resistor_location_enum_case()) { - case nidaqmx_grpc::PerformStrainShuntCalExRequest::ShuntResistorLocationEnumCase::kShuntResistorLocation: { - shunt_resistor_location = static_cast(request->shunt_resistor_location()); - break; - } - case nidaqmx_grpc::PerformStrainShuntCalExRequest::ShuntResistorLocationEnumCase::kShuntResistorLocationRaw: { - shunt_resistor_location = static_cast(request->shunt_resistor_location_raw()); - break; + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ReadDigitalLines(::grpc::ServerContext* context, const ReadDigitalLinesRequest* request, ReadDigitalLinesResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 fill_mode; + switch (request->fill_mode_enum_case()) { + case nidaqmx_grpc::ReadDigitalLinesRequest::FillModeEnumCase::kFillMode: { + fill_mode = static_cast(request->fill_mode()); + break; + } + case nidaqmx_grpc::ReadDigitalLinesRequest::FillModeEnumCase::kFillModeRaw: { + fill_mode = static_cast(request->fill_mode_raw()); + break; + } + case nidaqmx_grpc::ReadDigitalLinesRequest::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); + break; + } } - case nidaqmx_grpc::PerformStrainShuntCalExRequest::ShuntResistorLocationEnumCase::SHUNT_RESISTOR_LOCATION_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for shunt_resistor_location was not specified or out of range"); - break; + + uInt32 array_size_in_bytes = request->array_size_in_bytes(); + auto reserved = nullptr; + std::string read_array(array_size_in_bytes, '\0'); + int32 samps_per_chan_read {}; + int32 num_bytes_per_samp {}; + auto status = library_->ReadDigitalLines(task, num_samps_per_chan, timeout, fill_mode, (uInt8*)read_array.data(), array_size_in_bytes, &samps_per_chan_read, &num_bytes_per_samp, reserved); + context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); + if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + response->set_read_array(read_array); + response->set_samps_per_chan_read(samps_per_chan_read); + response->set_num_bytes_per_samp(num_bytes_per_samp); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } + } - int32 shunt_resistor_select; - switch (request->shunt_resistor_select_enum_case()) { - case nidaqmx_grpc::PerformStrainShuntCalExRequest::ShuntResistorSelectEnumCase::kShuntResistorSelect: { - shunt_resistor_select = static_cast(request->shunt_resistor_select()); - break; - } - case nidaqmx_grpc::PerformStrainShuntCalExRequest::ShuntResistorSelectEnumCase::kShuntResistorSelectRaw: { - shunt_resistor_select = static_cast(request->shunt_resistor_select_raw()); - break; - } - case nidaqmx_grpc::PerformStrainShuntCalExRequest::ShuntResistorSelectEnumCase::SHUNT_RESISTOR_SELECT_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for shunt_resistor_select was not specified or out of range"); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginReadDigitalLines(::grpc::ServerContext* context, const BeginReadDigitalLinesRequest* request, BeginReadDigitalLinesResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 fill_mode; + switch (request->fill_mode_enum_case()) { + case nidaqmx_grpc::BeginReadDigitalLinesRequest::FillModeEnumCase::kFillMode: { + fill_mode = static_cast(request->fill_mode()); + break; + } + case nidaqmx_grpc::BeginReadDigitalLinesRequest::FillModeEnumCase::kFillModeRaw: { + fill_mode = static_cast(request->fill_mode_raw()); + break; + } + case nidaqmx_grpc::BeginReadDigitalLinesRequest::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); + break; + } } + + uInt32 array_size_in_bytes = request->array_size_in_bytes(); + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->timeout = timeout; + data->fill_mode = fill_mode; + data->array_size_in_bytes = array_size_in_bytes; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + data->response.mutable_read_array()->reserve(request->array_size_in_bytes()); + data->response.mutable_read_array()->resize(request->array_size_in_bytes(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadDigitalLines", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } + } - int32 shunt_resistor_source; - switch (request->shunt_resistor_source_enum_case()) { - case nidaqmx_grpc::PerformStrainShuntCalExRequest::ShuntResistorSourceEnumCase::kShuntResistorSource: { - shunt_resistor_source = static_cast(request->shunt_resistor_source()); - break; - } - case nidaqmx_grpc::PerformStrainShuntCalExRequest::ShuntResistorSourceEnumCase::kShuntResistorSourceRaw: { - shunt_resistor_source = static_cast(request->shunt_resistor_source_raw()); - break; - } - case nidaqmx_grpc::PerformStrainShuntCalExRequest::ShuntResistorSourceEnumCase::SHUNT_RESISTOR_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for shunt_resistor_source was not specified or out of range"); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ReadDigitalScalarU32(::grpc::ServerContext* context, const ReadDigitalScalarU32Request* request, ReadDigitalScalarU32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + float64 timeout = request->timeout(); + auto reserved = nullptr; + uInt32 value {}; + auto status = library_->ReadDigitalScalarU32(task, timeout, &value, reserved); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; } - - bool32 skip_unsupported_channels = request->skip_unsupported_channels(); - auto status = library_->PerformStrainShuntCalEx(task, channel, shunt_resistor_value, shunt_resistor_location, shunt_resistor_select, shunt_resistor_source, skip_unsupported_channels); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::PerformThrmcplLeadOffsetNullingCal(::grpc::ServerContext* context, const PerformThrmcplLeadOffsetNullingCalRequest* request, PerformThrmcplLeadOffsetNullingCalResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto channel_mbcs = convert_from_grpc(request->channel()); - auto channel = channel_mbcs.c_str(); - bool32 skip_unsupported_channels = request->skip_unsupported_channels(); - auto status = library_->PerformThrmcplLeadOffsetNullingCal(task, channel, skip_unsupported_channels); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginReadDigitalScalarU32(::grpc::ServerContext* context, const BeginReadDigitalScalarU32Request* request, BeginReadDigitalScalarU32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + float64 timeout = request->timeout(); + auto reserved = nullptr; -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ReadAnalogF64(::grpc::ServerContext* context, const ReadAnalogF64Request* request, ReadAnalogF64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; + auto data = std::make_unique(); + data->task = task; + data->timeout = timeout; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadDigitalScalarU32", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - int32 fill_mode; - switch (request->fill_mode_enum_case()) { - case nidaqmx_grpc::ReadAnalogF64Request::FillModeEnumCase::kFillMode: { - fill_mode = static_cast(request->fill_mode()); - break; - } - case nidaqmx_grpc::ReadAnalogF64Request::FillModeEnumCase::kFillModeRaw: { - fill_mode = static_cast(request->fill_mode_raw()); - break; + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ReadDigitalU16(::grpc::ServerContext* context, const ReadDigitalU16Request* request, ReadDigitalU16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 fill_mode; + switch (request->fill_mode_enum_case()) { + case nidaqmx_grpc::ReadDigitalU16Request::FillModeEnumCase::kFillMode: { + fill_mode = static_cast(request->fill_mode()); + break; + } + case nidaqmx_grpc::ReadDigitalU16Request::FillModeEnumCase::kFillModeRaw: { + fill_mode = static_cast(request->fill_mode_raw()); + break; + } + case nidaqmx_grpc::ReadDigitalU16Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); + break; + } } - case nidaqmx_grpc::ReadAnalogF64Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); - break; + + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + std::vector read_array(array_size_in_samps); + int32 samps_per_chan_read {}; + auto status = library_->ReadDigitalU16(task, num_samps_per_chan, timeout, fill_mode, read_array.data(), array_size_in_samps, &samps_per_chan_read, reserved); + context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); + if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + response->mutable_read_array()->Clear(); + response->mutable_read_array()->Reserve(array_size_in_samps); + std::transform( + read_array.begin(), + read_array.begin() + array_size_in_samps, + google::protobuf::RepeatedFieldBackInserter(response->mutable_read_array()), + [&](auto x) { + return x; + }); + response->set_samps_per_chan_read(samps_per_chan_read); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - response->mutable_read_array()->Resize(array_size_in_samps, 0); - float64* read_array = response->mutable_read_array()->mutable_data(); - int32 samps_per_chan_read{}; - auto status = library_->ReadAnalogF64(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); - context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); - if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_samps_per_chan_read(samps_per_chan_read); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginReadAnalogF64(::grpc::ServerContext* context, const BeginReadAnalogF64Request* request, BeginReadAnalogF64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - int32 fill_mode; - switch (request->fill_mode_enum_case()) { - case nidaqmx_grpc::BeginReadAnalogF64Request::FillModeEnumCase::kFillMode: { - fill_mode = static_cast(request->fill_mode()); - break; - } - case nidaqmx_grpc::BeginReadAnalogF64Request::FillModeEnumCase::kFillModeRaw: { - fill_mode = static_cast(request->fill_mode_raw()); - break; - } - case nidaqmx_grpc::BeginReadAnalogF64Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); - break; - } - } - - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->num_samps_per_chan = num_samps_per_chan; - data->timeout = timeout; - data->fill_mode = fill_mode; - data->array_size_in_samps = array_size_in_samps; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - data->response.mutable_read_array()->Reserve(request->array_size_in_samps()); - data->response.mutable_read_array()->Resize(request->array_size_in_samps(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadAnalogF64", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ReadAnalogScalarF64(::grpc::ServerContext* context, const ReadAnalogScalarF64Request* request, ReadAnalogScalarF64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - float64 timeout = request->timeout(); - auto reserved = nullptr; - float64 value{}; - auto status = library_->ReadAnalogScalarF64(task, timeout, &value, reserved); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginReadDigitalU16(::grpc::ServerContext* context, const BeginReadDigitalU16Request* request, BeginReadDigitalU16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 fill_mode; + switch (request->fill_mode_enum_case()) { + case nidaqmx_grpc::BeginReadDigitalU16Request::FillModeEnumCase::kFillMode: { + fill_mode = static_cast(request->fill_mode()); + break; + } + case nidaqmx_grpc::BeginReadDigitalU16Request::FillModeEnumCase::kFillModeRaw: { + fill_mode = static_cast(request->fill_mode_raw()); + break; + } + case nidaqmx_grpc::BeginReadDigitalU16Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginReadAnalogScalarF64(::grpc::ServerContext* context, const BeginReadAnalogScalarF64Request* request, BeginReadAnalogScalarF64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - float64 timeout = request->timeout(); - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->timeout = timeout; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadAnalogScalarF64", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->timeout = timeout; + data->fill_mode = fill_mode; + data->array_size_in_samps = array_size_in_samps; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + data->response.mutable_read_array()->Reserve(request->array_size_in_samps()); + data->response.mutable_read_array()->Resize(request->array_size_in_samps(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadDigitalU16", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ReadBinaryI16(::grpc::ServerContext* context, const ReadBinaryI16Request* request, ReadBinaryI16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - int32 fill_mode; - switch (request->fill_mode_enum_case()) { - case nidaqmx_grpc::ReadBinaryI16Request::FillModeEnumCase::kFillMode: { - fill_mode = static_cast(request->fill_mode()); - break; - } - case nidaqmx_grpc::ReadBinaryI16Request::FillModeEnumCase::kFillModeRaw: { - fill_mode = static_cast(request->fill_mode_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ReadDigitalU32(::grpc::ServerContext* context, const ReadDigitalU32Request* request, ReadDigitalU32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 fill_mode; + switch (request->fill_mode_enum_case()) { + case nidaqmx_grpc::ReadDigitalU32Request::FillModeEnumCase::kFillMode: { + fill_mode = static_cast(request->fill_mode()); + break; + } + case nidaqmx_grpc::ReadDigitalU32Request::FillModeEnumCase::kFillModeRaw: { + fill_mode = static_cast(request->fill_mode_raw()); + break; + } + case nidaqmx_grpc::ReadDigitalU32Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); + break; + } } - case nidaqmx_grpc::ReadBinaryI16Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); - break; + + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + response->mutable_read_array()->Resize(array_size_in_samps, 0); + uInt32* read_array = reinterpret_cast(response->mutable_read_array()->mutable_data()); + int32 samps_per_chan_read {}; + auto status = library_->ReadDigitalU32(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); + context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); + if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + response->set_samps_per_chan_read(samps_per_chan_read); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - std::vector read_array(array_size_in_samps); - int32 samps_per_chan_read{}; - auto status = library_->ReadBinaryI16(task, num_samps_per_chan, timeout, fill_mode, read_array.data(), array_size_in_samps, &samps_per_chan_read, reserved); - context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); - if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->mutable_read_array()->Clear(); - response->mutable_read_array()->Reserve(array_size_in_samps); - std::transform( - read_array.begin(), - read_array.begin() + array_size_in_samps, - google::protobuf::RepeatedFieldBackInserter(response->mutable_read_array()), - [&](auto x) { - return x; - }); - response->set_samps_per_chan_read(samps_per_chan_read); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginReadBinaryI16(::grpc::ServerContext* context, const BeginReadBinaryI16Request* request, BeginReadBinaryI16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - int32 fill_mode; - switch (request->fill_mode_enum_case()) { - case nidaqmx_grpc::BeginReadBinaryI16Request::FillModeEnumCase::kFillMode: { - fill_mode = static_cast(request->fill_mode()); - break; - } - case nidaqmx_grpc::BeginReadBinaryI16Request::FillModeEnumCase::kFillModeRaw: { - fill_mode = static_cast(request->fill_mode_raw()); - break; - } - case nidaqmx_grpc::BeginReadBinaryI16Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); - break; - } - } - - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->num_samps_per_chan = num_samps_per_chan; - data->timeout = timeout; - data->fill_mode = fill_mode; - data->array_size_in_samps = array_size_in_samps; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - data->response.mutable_read_array()->Reserve(request->array_size_in_samps()); - data->response.mutable_read_array()->Resize(request->array_size_in_samps(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadBinaryI16", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginReadDigitalU32(::grpc::ServerContext* context, const BeginReadDigitalU32Request* request, BeginReadDigitalU32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 fill_mode; + switch (request->fill_mode_enum_case()) { + case nidaqmx_grpc::BeginReadDigitalU32Request::FillModeEnumCase::kFillMode: { + fill_mode = static_cast(request->fill_mode()); + break; + } + case nidaqmx_grpc::BeginReadDigitalU32Request::FillModeEnumCase::kFillModeRaw: { + fill_mode = static_cast(request->fill_mode_raw()); + break; + } + case nidaqmx_grpc::BeginReadDigitalU32Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ReadBinaryI32(::grpc::ServerContext* context, const ReadBinaryI32Request* request, ReadBinaryI32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->timeout = timeout; + data->fill_mode = fill_mode; + data->array_size_in_samps = array_size_in_samps; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + data->response.mutable_read_array()->Reserve(request->array_size_in_samps()); + data->response.mutable_read_array()->Resize(request->array_size_in_samps(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadDigitalU32", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - int32 fill_mode; - switch (request->fill_mode_enum_case()) { - case nidaqmx_grpc::ReadBinaryI32Request::FillModeEnumCase::kFillMode: { - fill_mode = static_cast(request->fill_mode()); - break; - } - case nidaqmx_grpc::ReadBinaryI32Request::FillModeEnumCase::kFillModeRaw: { - fill_mode = static_cast(request->fill_mode_raw()); - break; + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ReadDigitalU8(::grpc::ServerContext* context, const ReadDigitalU8Request* request, ReadDigitalU8Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 fill_mode; + switch (request->fill_mode_enum_case()) { + case nidaqmx_grpc::ReadDigitalU8Request::FillModeEnumCase::kFillMode: { + fill_mode = static_cast(request->fill_mode()); + break; + } + case nidaqmx_grpc::ReadDigitalU8Request::FillModeEnumCase::kFillModeRaw: { + fill_mode = static_cast(request->fill_mode_raw()); + break; + } + case nidaqmx_grpc::ReadDigitalU8Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); + break; + } } - case nidaqmx_grpc::ReadBinaryI32Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); - break; + + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + std::string read_array(array_size_in_samps, '\0'); + int32 samps_per_chan_read {}; + auto status = library_->ReadDigitalU8(task, num_samps_per_chan, timeout, fill_mode, (uInt8*)read_array.data(), array_size_in_samps, &samps_per_chan_read, reserved); + context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); + if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + response->set_read_array(read_array); + response->set_samps_per_chan_read(samps_per_chan_read); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - response->mutable_read_array()->Resize(array_size_in_samps, 0); - int32* read_array = reinterpret_cast(response->mutable_read_array()->mutable_data()); - int32 samps_per_chan_read{}; - auto status = library_->ReadBinaryI32(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); - context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); - if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_samps_per_chan_read(samps_per_chan_read); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginReadBinaryI32(::grpc::ServerContext* context, const BeginReadBinaryI32Request* request, BeginReadBinaryI32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - int32 fill_mode; - switch (request->fill_mode_enum_case()) { - case nidaqmx_grpc::BeginReadBinaryI32Request::FillModeEnumCase::kFillMode: { - fill_mode = static_cast(request->fill_mode()); - break; - } - case nidaqmx_grpc::BeginReadBinaryI32Request::FillModeEnumCase::kFillModeRaw: { - fill_mode = static_cast(request->fill_mode_raw()); - break; - } - case nidaqmx_grpc::BeginReadBinaryI32Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); - break; - } - } - - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->num_samps_per_chan = num_samps_per_chan; - data->timeout = timeout; - data->fill_mode = fill_mode; - data->array_size_in_samps = array_size_in_samps; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - data->response.mutable_read_array()->Reserve(request->array_size_in_samps()); - data->response.mutable_read_array()->Resize(request->array_size_in_samps(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadBinaryI32", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ReadBinaryU16(::grpc::ServerContext* context, const ReadBinaryU16Request* request, ReadBinaryU16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - int32 fill_mode; - switch (request->fill_mode_enum_case()) { - case nidaqmx_grpc::ReadBinaryU16Request::FillModeEnumCase::kFillMode: { - fill_mode = static_cast(request->fill_mode()); - break; - } - case nidaqmx_grpc::ReadBinaryU16Request::FillModeEnumCase::kFillModeRaw: { - fill_mode = static_cast(request->fill_mode_raw()); - break; - } - case nidaqmx_grpc::ReadBinaryU16Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); - break; - } - } - - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - std::vector read_array(array_size_in_samps); - int32 samps_per_chan_read{}; - auto status = library_->ReadBinaryU16(task, num_samps_per_chan, timeout, fill_mode, read_array.data(), array_size_in_samps, &samps_per_chan_read, reserved); - context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); - if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->mutable_read_array()->Clear(); - response->mutable_read_array()->Reserve(array_size_in_samps); - std::transform( - read_array.begin(), - read_array.begin() + array_size_in_samps, - google::protobuf::RepeatedFieldBackInserter(response->mutable_read_array()), - [&](auto x) { - return x; - }); - response->set_samps_per_chan_read(samps_per_chan_read); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginReadBinaryU16(::grpc::ServerContext* context, const BeginReadBinaryU16Request* request, BeginReadBinaryU16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - int32 fill_mode; - switch (request->fill_mode_enum_case()) { - case nidaqmx_grpc::BeginReadBinaryU16Request::FillModeEnumCase::kFillMode: { - fill_mode = static_cast(request->fill_mode()); - break; - } - case nidaqmx_grpc::BeginReadBinaryU16Request::FillModeEnumCase::kFillModeRaw: { - fill_mode = static_cast(request->fill_mode_raw()); - break; - } - case nidaqmx_grpc::BeginReadBinaryU16Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); - break; - } - } - - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->num_samps_per_chan = num_samps_per_chan; - data->timeout = timeout; - data->fill_mode = fill_mode; - data->array_size_in_samps = array_size_in_samps; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - data->response.mutable_read_array()->Reserve(request->array_size_in_samps()); - data->response.mutable_read_array()->Resize(request->array_size_in_samps(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadBinaryU16", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ReadBinaryU32(::grpc::ServerContext* context, const ReadBinaryU32Request* request, ReadBinaryU32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - int32 fill_mode; - switch (request->fill_mode_enum_case()) { - case nidaqmx_grpc::ReadBinaryU32Request::FillModeEnumCase::kFillMode: { - fill_mode = static_cast(request->fill_mode()); - break; - } - case nidaqmx_grpc::ReadBinaryU32Request::FillModeEnumCase::kFillModeRaw: { - fill_mode = static_cast(request->fill_mode_raw()); - break; - } - case nidaqmx_grpc::ReadBinaryU32Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); - break; - } - } - - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - response->mutable_read_array()->Resize(array_size_in_samps, 0); - uInt32* read_array = reinterpret_cast(response->mutable_read_array()->mutable_data()); - int32 samps_per_chan_read{}; - auto status = library_->ReadBinaryU32(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); - context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); - if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_samps_per_chan_read(samps_per_chan_read); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginReadBinaryU32(::grpc::ServerContext* context, const BeginReadBinaryU32Request* request, BeginReadBinaryU32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - int32 fill_mode; - switch (request->fill_mode_enum_case()) { - case nidaqmx_grpc::BeginReadBinaryU32Request::FillModeEnumCase::kFillMode: { - fill_mode = static_cast(request->fill_mode()); - break; - } - case nidaqmx_grpc::BeginReadBinaryU32Request::FillModeEnumCase::kFillModeRaw: { - fill_mode = static_cast(request->fill_mode_raw()); - break; - } - case nidaqmx_grpc::BeginReadBinaryU32Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); - break; - } - } - - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->num_samps_per_chan = num_samps_per_chan; - data->timeout = timeout; - data->fill_mode = fill_mode; - data->array_size_in_samps = array_size_in_samps; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - data->response.mutable_read_array()->Reserve(request->array_size_in_samps()); - data->response.mutable_read_array()->Resize(request->array_size_in_samps(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadBinaryU32", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ReadCounterF64(::grpc::ServerContext* context, const ReadCounterF64Request* request, ReadCounterF64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - response->mutable_read_array()->Resize(array_size_in_samps, 0); - float64* read_array = response->mutable_read_array()->mutable_data(); - int32 samps_per_chan_read{}; - auto status = library_->ReadCounterF64(task, num_samps_per_chan, timeout, read_array, array_size_in_samps, &samps_per_chan_read, reserved); - context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); - if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_samps_per_chan_read(samps_per_chan_read); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginReadCounterF64(::grpc::ServerContext* context, const BeginReadCounterF64Request* request, BeginReadCounterF64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->num_samps_per_chan = num_samps_per_chan; - data->timeout = timeout; - data->array_size_in_samps = array_size_in_samps; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - data->response.mutable_read_array()->Reserve(request->array_size_in_samps()); - data->response.mutable_read_array()->Resize(request->array_size_in_samps(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCounterF64", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ReadCounterF64Ex(::grpc::ServerContext* context, const ReadCounterF64ExRequest* request, ReadCounterF64ExResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - int32 fill_mode; - switch (request->fill_mode_enum_case()) { - case nidaqmx_grpc::ReadCounterF64ExRequest::FillModeEnumCase::kFillMode: { - fill_mode = static_cast(request->fill_mode()); - break; - } - case nidaqmx_grpc::ReadCounterF64ExRequest::FillModeEnumCase::kFillModeRaw: { - fill_mode = static_cast(request->fill_mode_raw()); - break; - } - case nidaqmx_grpc::ReadCounterF64ExRequest::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); - break; - } - } - - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - response->mutable_read_array()->Resize(array_size_in_samps, 0); - float64* read_array = response->mutable_read_array()->mutable_data(); - int32 samps_per_chan_read{}; - auto status = library_->ReadCounterF64Ex(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); - context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); - if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_samps_per_chan_read(samps_per_chan_read); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginReadCounterF64Ex(::grpc::ServerContext* context, const BeginReadCounterF64ExRequest* request, BeginReadCounterF64ExResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - int32 fill_mode; - switch (request->fill_mode_enum_case()) { - case nidaqmx_grpc::BeginReadCounterF64ExRequest::FillModeEnumCase::kFillMode: { - fill_mode = static_cast(request->fill_mode()); - break; - } - case nidaqmx_grpc::BeginReadCounterF64ExRequest::FillModeEnumCase::kFillModeRaw: { - fill_mode = static_cast(request->fill_mode_raw()); - break; - } - case nidaqmx_grpc::BeginReadCounterF64ExRequest::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); - break; - } - } - - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->num_samps_per_chan = num_samps_per_chan; - data->timeout = timeout; - data->fill_mode = fill_mode; - data->array_size_in_samps = array_size_in_samps; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - data->response.mutable_read_array()->Reserve(request->array_size_in_samps()); - data->response.mutable_read_array()->Resize(request->array_size_in_samps(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCounterF64Ex", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ReadCounterScalarF64(::grpc::ServerContext* context, const ReadCounterScalarF64Request* request, ReadCounterScalarF64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - float64 timeout = request->timeout(); - auto reserved = nullptr; - float64 value{}; - auto status = library_->ReadCounterScalarF64(task, timeout, &value, reserved); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginReadCounterScalarF64(::grpc::ServerContext* context, const BeginReadCounterScalarF64Request* request, BeginReadCounterScalarF64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - float64 timeout = request->timeout(); - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->timeout = timeout; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCounterScalarF64", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ReadCounterScalarU32(::grpc::ServerContext* context, const ReadCounterScalarU32Request* request, ReadCounterScalarU32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - float64 timeout = request->timeout(); - auto reserved = nullptr; - uInt32 value{}; - auto status = library_->ReadCounterScalarU32(task, timeout, &value, reserved); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginReadCounterScalarU32(::grpc::ServerContext* context, const BeginReadCounterScalarU32Request* request, BeginReadCounterScalarU32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - float64 timeout = request->timeout(); - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->timeout = timeout; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCounterScalarU32", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ReadCounterU32(::grpc::ServerContext* context, const ReadCounterU32Request* request, ReadCounterU32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - response->mutable_read_array()->Resize(array_size_in_samps, 0); - uInt32* read_array = reinterpret_cast(response->mutable_read_array()->mutable_data()); - int32 samps_per_chan_read{}; - auto status = library_->ReadCounterU32(task, num_samps_per_chan, timeout, read_array, array_size_in_samps, &samps_per_chan_read, reserved); - context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); - if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_samps_per_chan_read(samps_per_chan_read); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginReadCounterU32(::grpc::ServerContext* context, const BeginReadCounterU32Request* request, BeginReadCounterU32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->num_samps_per_chan = num_samps_per_chan; - data->timeout = timeout; - data->array_size_in_samps = array_size_in_samps; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - data->response.mutable_read_array()->Reserve(request->array_size_in_samps()); - data->response.mutable_read_array()->Resize(request->array_size_in_samps(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCounterU32", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ReadCounterU32Ex(::grpc::ServerContext* context, const ReadCounterU32ExRequest* request, ReadCounterU32ExResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - int32 fill_mode; - switch (request->fill_mode_enum_case()) { - case nidaqmx_grpc::ReadCounterU32ExRequest::FillModeEnumCase::kFillMode: { - fill_mode = static_cast(request->fill_mode()); - break; - } - case nidaqmx_grpc::ReadCounterU32ExRequest::FillModeEnumCase::kFillModeRaw: { - fill_mode = static_cast(request->fill_mode_raw()); - break; - } - case nidaqmx_grpc::ReadCounterU32ExRequest::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); - break; - } - } - - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - response->mutable_read_array()->Resize(array_size_in_samps, 0); - uInt32* read_array = reinterpret_cast(response->mutable_read_array()->mutable_data()); - int32 samps_per_chan_read{}; - auto status = library_->ReadCounterU32Ex(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); - context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); - if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_samps_per_chan_read(samps_per_chan_read); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginReadCounterU32Ex(::grpc::ServerContext* context, const BeginReadCounterU32ExRequest* request, BeginReadCounterU32ExResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - int32 fill_mode; - switch (request->fill_mode_enum_case()) { - case nidaqmx_grpc::BeginReadCounterU32ExRequest::FillModeEnumCase::kFillMode: { - fill_mode = static_cast(request->fill_mode()); - break; - } - case nidaqmx_grpc::BeginReadCounterU32ExRequest::FillModeEnumCase::kFillModeRaw: { - fill_mode = static_cast(request->fill_mode_raw()); - break; - } - case nidaqmx_grpc::BeginReadCounterU32ExRequest::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); - break; - } - } - - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->num_samps_per_chan = num_samps_per_chan; - data->timeout = timeout; - data->fill_mode = fill_mode; - data->array_size_in_samps = array_size_in_samps; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - data->response.mutable_read_array()->Reserve(request->array_size_in_samps()); - data->response.mutable_read_array()->Resize(request->array_size_in_samps(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCounterU32Ex", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ReadCtrFreq(::grpc::ServerContext* context, const ReadCtrFreqRequest* request, ReadCtrFreqResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - int32 interleaved; - switch (request->interleaved_enum_case()) { - case nidaqmx_grpc::ReadCtrFreqRequest::InterleavedEnumCase::kInterleaved: { - interleaved = static_cast(request->interleaved()); - break; - } - case nidaqmx_grpc::ReadCtrFreqRequest::InterleavedEnumCase::kInterleavedRaw: { - interleaved = static_cast(request->interleaved_raw()); - break; - } - case nidaqmx_grpc::ReadCtrFreqRequest::InterleavedEnumCase::INTERLEAVED_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for interleaved was not specified or out of range"); - break; - } - } - - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - response->mutable_read_array_frequency()->Resize(array_size_in_samps, 0); - float64* read_array_frequency = response->mutable_read_array_frequency()->mutable_data(); - response->mutable_read_array_duty_cycle()->Resize(array_size_in_samps, 0); - float64* read_array_duty_cycle = response->mutable_read_array_duty_cycle()->mutable_data(); - int32 samps_per_chan_read{}; - auto status = library_->ReadCtrFreq(task, num_samps_per_chan, timeout, interleaved, read_array_frequency, read_array_duty_cycle, array_size_in_samps, &samps_per_chan_read, reserved); - context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); - if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_samps_per_chan_read(samps_per_chan_read); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginReadCtrFreq(::grpc::ServerContext* context, const BeginReadCtrFreqRequest* request, BeginReadCtrFreqResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - int32 interleaved; - switch (request->interleaved_enum_case()) { - case nidaqmx_grpc::BeginReadCtrFreqRequest::InterleavedEnumCase::kInterleaved: { - interleaved = static_cast(request->interleaved()); - break; - } - case nidaqmx_grpc::BeginReadCtrFreqRequest::InterleavedEnumCase::kInterleavedRaw: { - interleaved = static_cast(request->interleaved_raw()); - break; - } - case nidaqmx_grpc::BeginReadCtrFreqRequest::InterleavedEnumCase::INTERLEAVED_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for interleaved was not specified or out of range"); - break; - } - } - - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->num_samps_per_chan = num_samps_per_chan; - data->timeout = timeout; - data->interleaved = interleaved; - data->array_size_in_samps = array_size_in_samps; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - data->response.mutable_read_array_frequency()->Reserve(request->array_size_in_samps()); - data->response.mutable_read_array_frequency()->Resize(request->array_size_in_samps(), 0); - data->response.mutable_read_array_duty_cycle()->Reserve(request->array_size_in_samps()); - data->response.mutable_read_array_duty_cycle()->Resize(request->array_size_in_samps(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCtrFreq", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ReadCtrFreqScalar(::grpc::ServerContext* context, const ReadCtrFreqScalarRequest* request, ReadCtrFreqScalarResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - float64 timeout = request->timeout(); - auto reserved = nullptr; - float64 frequency{}; - float64 duty_cycle{}; - auto status = library_->ReadCtrFreqScalar(task, timeout, &frequency, &duty_cycle, reserved); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_frequency(frequency); - response->set_duty_cycle(duty_cycle); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginReadCtrFreqScalar(::grpc::ServerContext* context, const BeginReadCtrFreqScalarRequest* request, BeginReadCtrFreqScalarResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - float64 timeout = request->timeout(); - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->timeout = timeout; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCtrFreqScalar", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ReadCtrTicks(::grpc::ServerContext* context, const ReadCtrTicksRequest* request, ReadCtrTicksResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - int32 interleaved; - switch (request->interleaved_enum_case()) { - case nidaqmx_grpc::ReadCtrTicksRequest::InterleavedEnumCase::kInterleaved: { - interleaved = static_cast(request->interleaved()); - break; - } - case nidaqmx_grpc::ReadCtrTicksRequest::InterleavedEnumCase::kInterleavedRaw: { - interleaved = static_cast(request->interleaved_raw()); - break; - } - case nidaqmx_grpc::ReadCtrTicksRequest::InterleavedEnumCase::INTERLEAVED_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for interleaved was not specified or out of range"); - break; - } - } - - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - response->mutable_read_array_high_ticks()->Resize(array_size_in_samps, 0); - uInt32* read_array_high_ticks = reinterpret_cast(response->mutable_read_array_high_ticks()->mutable_data()); - response->mutable_read_array_low_ticks()->Resize(array_size_in_samps, 0); - uInt32* read_array_low_ticks = reinterpret_cast(response->mutable_read_array_low_ticks()->mutable_data()); - int32 samps_per_chan_read{}; - auto status = library_->ReadCtrTicks(task, num_samps_per_chan, timeout, interleaved, read_array_high_ticks, read_array_low_ticks, array_size_in_samps, &samps_per_chan_read, reserved); - context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); - if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_samps_per_chan_read(samps_per_chan_read); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginReadCtrTicks(::grpc::ServerContext* context, const BeginReadCtrTicksRequest* request, BeginReadCtrTicksResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - int32 interleaved; - switch (request->interleaved_enum_case()) { - case nidaqmx_grpc::BeginReadCtrTicksRequest::InterleavedEnumCase::kInterleaved: { - interleaved = static_cast(request->interleaved()); - break; - } - case nidaqmx_grpc::BeginReadCtrTicksRequest::InterleavedEnumCase::kInterleavedRaw: { - interleaved = static_cast(request->interleaved_raw()); - break; - } - case nidaqmx_grpc::BeginReadCtrTicksRequest::InterleavedEnumCase::INTERLEAVED_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for interleaved was not specified or out of range"); - break; - } - } - - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->num_samps_per_chan = num_samps_per_chan; - data->timeout = timeout; - data->interleaved = interleaved; - data->array_size_in_samps = array_size_in_samps; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - data->response.mutable_read_array_high_ticks()->Reserve(request->array_size_in_samps()); - data->response.mutable_read_array_high_ticks()->Resize(request->array_size_in_samps(), 0); - data->response.mutable_read_array_low_ticks()->Reserve(request->array_size_in_samps()); - data->response.mutable_read_array_low_ticks()->Resize(request->array_size_in_samps(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCtrTicks", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ReadCtrTicksScalar(::grpc::ServerContext* context, const ReadCtrTicksScalarRequest* request, ReadCtrTicksScalarResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - float64 timeout = request->timeout(); - auto reserved = nullptr; - uInt32 high_ticks{}; - uInt32 low_ticks{}; - auto status = library_->ReadCtrTicksScalar(task, timeout, &high_ticks, &low_ticks, reserved); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_high_ticks(high_ticks); - response->set_low_ticks(low_ticks); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginReadCtrTicksScalar(::grpc::ServerContext* context, const BeginReadCtrTicksScalarRequest* request, BeginReadCtrTicksScalarResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - float64 timeout = request->timeout(); - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->timeout = timeout; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCtrTicksScalar", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ReadCtrTime(::grpc::ServerContext* context, const ReadCtrTimeRequest* request, ReadCtrTimeResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - int32 interleaved; - switch (request->interleaved_enum_case()) { - case nidaqmx_grpc::ReadCtrTimeRequest::InterleavedEnumCase::kInterleaved: { - interleaved = static_cast(request->interleaved()); - break; - } - case nidaqmx_grpc::ReadCtrTimeRequest::InterleavedEnumCase::kInterleavedRaw: { - interleaved = static_cast(request->interleaved_raw()); - break; - } - case nidaqmx_grpc::ReadCtrTimeRequest::InterleavedEnumCase::INTERLEAVED_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for interleaved was not specified or out of range"); - break; - } - } - - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - response->mutable_read_array_high_time()->Resize(array_size_in_samps, 0); - float64* read_array_high_time = response->mutable_read_array_high_time()->mutable_data(); - response->mutable_read_array_low_time()->Resize(array_size_in_samps, 0); - float64* read_array_low_time = response->mutable_read_array_low_time()->mutable_data(); - int32 samps_per_chan_read{}; - auto status = library_->ReadCtrTime(task, num_samps_per_chan, timeout, interleaved, read_array_high_time, read_array_low_time, array_size_in_samps, &samps_per_chan_read, reserved); - context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); - if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_samps_per_chan_read(samps_per_chan_read); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginReadCtrTime(::grpc::ServerContext* context, const BeginReadCtrTimeRequest* request, BeginReadCtrTimeResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - int32 interleaved; - switch (request->interleaved_enum_case()) { - case nidaqmx_grpc::BeginReadCtrTimeRequest::InterleavedEnumCase::kInterleaved: { - interleaved = static_cast(request->interleaved()); - break; - } - case nidaqmx_grpc::BeginReadCtrTimeRequest::InterleavedEnumCase::kInterleavedRaw: { - interleaved = static_cast(request->interleaved_raw()); - break; - } - case nidaqmx_grpc::BeginReadCtrTimeRequest::InterleavedEnumCase::INTERLEAVED_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for interleaved was not specified or out of range"); - break; - } - } - - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->num_samps_per_chan = num_samps_per_chan; - data->timeout = timeout; - data->interleaved = interleaved; - data->array_size_in_samps = array_size_in_samps; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - data->response.mutable_read_array_high_time()->Reserve(request->array_size_in_samps()); - data->response.mutable_read_array_high_time()->Resize(request->array_size_in_samps(), 0); - data->response.mutable_read_array_low_time()->Reserve(request->array_size_in_samps()); - data->response.mutable_read_array_low_time()->Resize(request->array_size_in_samps(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCtrTime", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ReadCtrTimeScalar(::grpc::ServerContext* context, const ReadCtrTimeScalarRequest* request, ReadCtrTimeScalarResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - float64 timeout = request->timeout(); - auto reserved = nullptr; - float64 high_time{}; - float64 low_time{}; - auto status = library_->ReadCtrTimeScalar(task, timeout, &high_time, &low_time, reserved); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_high_time(high_time); - response->set_low_time(low_time); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginReadDigitalU8(::grpc::ServerContext* context, const BeginReadDigitalU8Request* request, BeginReadDigitalU8Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 fill_mode; + switch (request->fill_mode_enum_case()) { + case nidaqmx_grpc::BeginReadDigitalU8Request::FillModeEnumCase::kFillMode: { + fill_mode = static_cast(request->fill_mode()); + break; + } + case nidaqmx_grpc::BeginReadDigitalU8Request::FillModeEnumCase::kFillModeRaw: { + fill_mode = static_cast(request->fill_mode_raw()); + break; + } + case nidaqmx_grpc::BeginReadDigitalU8Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginReadCtrTimeScalar(::grpc::ServerContext* context, const BeginReadCtrTimeScalarRequest* request, BeginReadCtrTimeScalarResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - float64 timeout = request->timeout(); - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->timeout = timeout; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCtrTimeScalar", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->timeout = timeout; + data->fill_mode = fill_mode; + data->array_size_in_samps = array_size_in_samps; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + data->response.mutable_read_array()->reserve(request->array_size_in_samps()); + data->response.mutable_read_array()->resize(request->array_size_in_samps(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadDigitalU8", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ReadDigitalLines(::grpc::ServerContext* context, const ReadDigitalLinesRequest* request, ReadDigitalLinesResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - int32 fill_mode; - switch (request->fill_mode_enum_case()) { - case nidaqmx_grpc::ReadDigitalLinesRequest::FillModeEnumCase::kFillMode: { - fill_mode = static_cast(request->fill_mode()); - break; - } - case nidaqmx_grpc::ReadDigitalLinesRequest::FillModeEnumCase::kFillModeRaw: { - fill_mode = static_cast(request->fill_mode_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ReadPowerBinaryI16(::grpc::ServerContext* context, const ReadPowerBinaryI16Request* request, ReadPowerBinaryI16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 fill_mode; + switch (request->fill_mode_enum_case()) { + case nidaqmx_grpc::ReadPowerBinaryI16Request::FillModeEnumCase::kFillMode: { + fill_mode = static_cast(request->fill_mode()); + break; + } + case nidaqmx_grpc::ReadPowerBinaryI16Request::FillModeEnumCase::kFillModeRaw: { + fill_mode = static_cast(request->fill_mode_raw()); + break; + } + case nidaqmx_grpc::ReadPowerBinaryI16Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); + break; + } } - case nidaqmx_grpc::ReadDigitalLinesRequest::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); - break; + + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + std::vector read_array_voltage(array_size_in_samps); + std::vector read_array_current(array_size_in_samps); + int32 samps_per_chan_read {}; + auto status = library_->ReadPowerBinaryI16(task, num_samps_per_chan, timeout, fill_mode, read_array_voltage.data(), read_array_current.data(), array_size_in_samps, &samps_per_chan_read, reserved); + context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); + if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + response->mutable_read_array_voltage()->Clear(); + response->mutable_read_array_voltage()->Reserve(array_size_in_samps); + std::transform( + read_array_voltage.begin(), + read_array_voltage.begin() + array_size_in_samps, + google::protobuf::RepeatedFieldBackInserter(response->mutable_read_array_voltage()), + [&](auto x) { + return x; + }); + response->mutable_read_array_current()->Clear(); + response->mutable_read_array_current()->Reserve(array_size_in_samps); + std::transform( + read_array_current.begin(), + read_array_current.begin() + array_size_in_samps, + google::protobuf::RepeatedFieldBackInserter(response->mutable_read_array_current()), + [&](auto x) { + return x; + }); + response->set_samps_per_chan_read(samps_per_chan_read); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - - uInt32 array_size_in_bytes = request->array_size_in_bytes(); - auto reserved = nullptr; - std::string read_array(array_size_in_bytes, '\0'); - int32 samps_per_chan_read{}; - int32 num_bytes_per_samp{}; - auto status = library_->ReadDigitalLines(task, num_samps_per_chan, timeout, fill_mode, (uInt8*)read_array.data(), array_size_in_bytes, &samps_per_chan_read, &num_bytes_per_samp, reserved); - context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); - if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_read_array(read_array); - response->set_samps_per_chan_read(samps_per_chan_read); - response->set_num_bytes_per_samp(num_bytes_per_samp); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginReadDigitalLines(::grpc::ServerContext* context, const BeginReadDigitalLinesRequest* request, BeginReadDigitalLinesResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - int32 fill_mode; - switch (request->fill_mode_enum_case()) { - case nidaqmx_grpc::BeginReadDigitalLinesRequest::FillModeEnumCase::kFillMode: { - fill_mode = static_cast(request->fill_mode()); - break; - } - case nidaqmx_grpc::BeginReadDigitalLinesRequest::FillModeEnumCase::kFillModeRaw: { - fill_mode = static_cast(request->fill_mode_raw()); - break; - } - case nidaqmx_grpc::BeginReadDigitalLinesRequest::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); - break; - } - } - - uInt32 array_size_in_bytes = request->array_size_in_bytes(); - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->num_samps_per_chan = num_samps_per_chan; - data->timeout = timeout; - data->fill_mode = fill_mode; - data->array_size_in_bytes = array_size_in_bytes; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - data->response.mutable_read_array()->reserve(request->array_size_in_bytes()); - data->response.mutable_read_array()->resize(request->array_size_in_bytes(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadDigitalLines", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ReadDigitalScalarU32(::grpc::ServerContext* context, const ReadDigitalScalarU32Request* request, ReadDigitalScalarU32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - float64 timeout = request->timeout(); - auto reserved = nullptr; - uInt32 value{}; - auto status = library_->ReadDigitalScalarU32(task, timeout, &value, reserved); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginReadPowerBinaryI16(::grpc::ServerContext* context, const BeginReadPowerBinaryI16Request* request, BeginReadPowerBinaryI16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 fill_mode; + switch (request->fill_mode_enum_case()) { + case nidaqmx_grpc::BeginReadPowerBinaryI16Request::FillModeEnumCase::kFillMode: { + fill_mode = static_cast(request->fill_mode()); + break; + } + case nidaqmx_grpc::BeginReadPowerBinaryI16Request::FillModeEnumCase::kFillModeRaw: { + fill_mode = static_cast(request->fill_mode_raw()); + break; + } + case nidaqmx_grpc::BeginReadPowerBinaryI16Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginReadDigitalScalarU32(::grpc::ServerContext* context, const BeginReadDigitalScalarU32Request* request, BeginReadDigitalScalarU32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - float64 timeout = request->timeout(); - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->timeout = timeout; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadDigitalScalarU32", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->timeout = timeout; + data->fill_mode = fill_mode; + data->array_size_in_samps = array_size_in_samps; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + data->response.mutable_read_array_voltage()->Reserve(request->array_size_in_samps()); + data->response.mutable_read_array_voltage()->Resize(request->array_size_in_samps(), 0); + data->response.mutable_read_array_current()->Reserve(request->array_size_in_samps()); + data->response.mutable_read_array_current()->Resize(request->array_size_in_samps(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadPowerBinaryI16", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ReadDigitalU16(::grpc::ServerContext* context, const ReadDigitalU16Request* request, ReadDigitalU16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - int32 fill_mode; - switch (request->fill_mode_enum_case()) { - case nidaqmx_grpc::ReadDigitalU16Request::FillModeEnumCase::kFillMode: { - fill_mode = static_cast(request->fill_mode()); - break; - } - case nidaqmx_grpc::ReadDigitalU16Request::FillModeEnumCase::kFillModeRaw: { - fill_mode = static_cast(request->fill_mode_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ReadPowerF64(::grpc::ServerContext* context, const ReadPowerF64Request* request, ReadPowerF64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 fill_mode; + switch (request->fill_mode_enum_case()) { + case nidaqmx_grpc::ReadPowerF64Request::FillModeEnumCase::kFillMode: { + fill_mode = static_cast(request->fill_mode()); + break; + } + case nidaqmx_grpc::ReadPowerF64Request::FillModeEnumCase::kFillModeRaw: { + fill_mode = static_cast(request->fill_mode_raw()); + break; + } + case nidaqmx_grpc::ReadPowerF64Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); + break; + } } - case nidaqmx_grpc::ReadDigitalU16Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); - break; + + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + response->mutable_read_array_voltage()->Resize(array_size_in_samps, 0); + float64* read_array_voltage = response->mutable_read_array_voltage()->mutable_data(); + response->mutable_read_array_current()->Resize(array_size_in_samps, 0); + float64* read_array_current = response->mutable_read_array_current()->mutable_data(); + int32 samps_per_chan_read {}; + auto status = library_->ReadPowerF64(task, num_samps_per_chan, timeout, fill_mode, read_array_voltage, read_array_current, array_size_in_samps, &samps_per_chan_read, reserved); + context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); + if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + response->set_samps_per_chan_read(samps_per_chan_read); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - std::vector read_array(array_size_in_samps); - int32 samps_per_chan_read{}; - auto status = library_->ReadDigitalU16(task, num_samps_per_chan, timeout, fill_mode, read_array.data(), array_size_in_samps, &samps_per_chan_read, reserved); - context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); - if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->mutable_read_array()->Clear(); - response->mutable_read_array()->Reserve(array_size_in_samps); - std::transform( - read_array.begin(), - read_array.begin() + array_size_in_samps, - google::protobuf::RepeatedFieldBackInserter(response->mutable_read_array()), - [&](auto x) { - return x; - }); - response->set_samps_per_chan_read(samps_per_chan_read); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginReadDigitalU16(::grpc::ServerContext* context, const BeginReadDigitalU16Request* request, BeginReadDigitalU16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - int32 fill_mode; - switch (request->fill_mode_enum_case()) { - case nidaqmx_grpc::BeginReadDigitalU16Request::FillModeEnumCase::kFillMode: { - fill_mode = static_cast(request->fill_mode()); - break; - } - case nidaqmx_grpc::BeginReadDigitalU16Request::FillModeEnumCase::kFillModeRaw: { - fill_mode = static_cast(request->fill_mode_raw()); - break; - } - case nidaqmx_grpc::BeginReadDigitalU16Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); - break; - } - } - - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->num_samps_per_chan = num_samps_per_chan; - data->timeout = timeout; - data->fill_mode = fill_mode; - data->array_size_in_samps = array_size_in_samps; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - data->response.mutable_read_array()->Reserve(request->array_size_in_samps()); - data->response.mutable_read_array()->Resize(request->array_size_in_samps(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadDigitalU16", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ReadDigitalU32(::grpc::ServerContext* context, const ReadDigitalU32Request* request, ReadDigitalU32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - int32 fill_mode; - switch (request->fill_mode_enum_case()) { - case nidaqmx_grpc::ReadDigitalU32Request::FillModeEnumCase::kFillMode: { - fill_mode = static_cast(request->fill_mode()); - break; - } - case nidaqmx_grpc::ReadDigitalU32Request::FillModeEnumCase::kFillModeRaw: { - fill_mode = static_cast(request->fill_mode_raw()); - break; - } - case nidaqmx_grpc::ReadDigitalU32Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginReadPowerF64(::grpc::ServerContext* context, const BeginReadPowerF64Request* request, BeginReadPowerF64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 fill_mode; + switch (request->fill_mode_enum_case()) { + case nidaqmx_grpc::BeginReadPowerF64Request::FillModeEnumCase::kFillMode: { + fill_mode = static_cast(request->fill_mode()); + break; + } + case nidaqmx_grpc::BeginReadPowerF64Request::FillModeEnumCase::kFillModeRaw: { + fill_mode = static_cast(request->fill_mode_raw()); + break; + } + case nidaqmx_grpc::BeginReadPowerF64Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); + break; + } + } - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - response->mutable_read_array()->Resize(array_size_in_samps, 0); - uInt32* read_array = reinterpret_cast(response->mutable_read_array()->mutable_data()); - int32 samps_per_chan_read{}; - auto status = library_->ReadDigitalU32(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); - context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); - if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_samps_per_chan_read(samps_per_chan_read); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginReadDigitalU32(::grpc::ServerContext* context, const BeginReadDigitalU32Request* request, BeginReadDigitalU32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - int32 fill_mode; - switch (request->fill_mode_enum_case()) { - case nidaqmx_grpc::BeginReadDigitalU32Request::FillModeEnumCase::kFillMode: { - fill_mode = static_cast(request->fill_mode()); - break; - } - case nidaqmx_grpc::BeginReadDigitalU32Request::FillModeEnumCase::kFillModeRaw: { - fill_mode = static_cast(request->fill_mode_raw()); - break; - } - case nidaqmx_grpc::BeginReadDigitalU32Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); - break; - } - } - - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->num_samps_per_chan = num_samps_per_chan; - data->timeout = timeout; - data->fill_mode = fill_mode; - data->array_size_in_samps = array_size_in_samps; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - data->response.mutable_read_array()->Reserve(request->array_size_in_samps()); - data->response.mutable_read_array()->Resize(request->array_size_in_samps(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadDigitalU32", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->timeout = timeout; + data->fill_mode = fill_mode; + data->array_size_in_samps = array_size_in_samps; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + data->response.mutable_read_array_voltage()->Reserve(request->array_size_in_samps()); + data->response.mutable_read_array_voltage()->Resize(request->array_size_in_samps(), 0); + data->response.mutable_read_array_current()->Reserve(request->array_size_in_samps()); + data->response.mutable_read_array_current()->Resize(request->array_size_in_samps(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadPowerF64", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ReadDigitalU8(::grpc::ServerContext* context, const ReadDigitalU8Request* request, ReadDigitalU8Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - int32 fill_mode; - switch (request->fill_mode_enum_case()) { - case nidaqmx_grpc::ReadDigitalU8Request::FillModeEnumCase::kFillMode: { - fill_mode = static_cast(request->fill_mode()); - break; - } - case nidaqmx_grpc::ReadDigitalU8Request::FillModeEnumCase::kFillModeRaw: { - fill_mode = static_cast(request->fill_mode_raw()); - break; - } - case nidaqmx_grpc::ReadDigitalU8Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ReadPowerScalarF64(::grpc::ServerContext* context, const ReadPowerScalarF64Request* request, ReadPowerScalarF64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + float64 timeout = request->timeout(); + auto reserved = nullptr; + float64 voltage {}; + float64 current {}; + auto status = library_->ReadPowerScalarF64(task, timeout, &voltage, ¤t, reserved); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + response->set_voltage(voltage); + response->set_current(current); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - std::string read_array(array_size_in_samps, '\0'); - int32 samps_per_chan_read{}; - auto status = library_->ReadDigitalU8(task, num_samps_per_chan, timeout, fill_mode, (uInt8*)read_array.data(), array_size_in_samps, &samps_per_chan_read, reserved); - context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); - if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_read_array(read_array); - response->set_samps_per_chan_read(samps_per_chan_read); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginReadDigitalU8(::grpc::ServerContext* context, const BeginReadDigitalU8Request* request, BeginReadDigitalU8Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - int32 fill_mode; - switch (request->fill_mode_enum_case()) { - case nidaqmx_grpc::BeginReadDigitalU8Request::FillModeEnumCase::kFillMode: { - fill_mode = static_cast(request->fill_mode()); - break; - } - case nidaqmx_grpc::BeginReadDigitalU8Request::FillModeEnumCase::kFillModeRaw: { - fill_mode = static_cast(request->fill_mode_raw()); - break; - } - case nidaqmx_grpc::BeginReadDigitalU8Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); - break; - } - } - - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->num_samps_per_chan = num_samps_per_chan; - data->timeout = timeout; - data->fill_mode = fill_mode; - data->array_size_in_samps = array_size_in_samps; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - data->response.mutable_read_array()->reserve(request->array_size_in_samps()); - data->response.mutable_read_array()->resize(request->array_size_in_samps(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadDigitalU8", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ReadPowerBinaryI16(::grpc::ServerContext* context, const ReadPowerBinaryI16Request* request, ReadPowerBinaryI16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - int32 fill_mode; - switch (request->fill_mode_enum_case()) { - case nidaqmx_grpc::ReadPowerBinaryI16Request::FillModeEnumCase::kFillMode: { - fill_mode = static_cast(request->fill_mode()); - break; - } - case nidaqmx_grpc::ReadPowerBinaryI16Request::FillModeEnumCase::kFillModeRaw: { - fill_mode = static_cast(request->fill_mode_raw()); - break; - } - case nidaqmx_grpc::ReadPowerBinaryI16Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginReadPowerScalarF64(::grpc::ServerContext* context, const BeginReadPowerScalarF64Request* request, BeginReadPowerScalarF64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + float64 timeout = request->timeout(); + auto reserved = nullptr; - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - std::vector read_array_voltage(array_size_in_samps); - std::vector read_array_current(array_size_in_samps); - int32 samps_per_chan_read{}; - auto status = library_->ReadPowerBinaryI16(task, num_samps_per_chan, timeout, fill_mode, read_array_voltage.data(), read_array_current.data(), array_size_in_samps, &samps_per_chan_read, reserved); - context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); - if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->mutable_read_array_voltage()->Clear(); - response->mutable_read_array_voltage()->Reserve(array_size_in_samps); - std::transform( - read_array_voltage.begin(), - read_array_voltage.begin() + array_size_in_samps, - google::protobuf::RepeatedFieldBackInserter(response->mutable_read_array_voltage()), - [&](auto x) { - return x; - }); - response->mutable_read_array_current()->Clear(); - response->mutable_read_array_current()->Reserve(array_size_in_samps); - std::transform( - read_array_current.begin(), - read_array_current.begin() + array_size_in_samps, - google::protobuf::RepeatedFieldBackInserter(response->mutable_read_array_current()), - [&](auto x) { - return x; - }); - response->set_samps_per_chan_read(samps_per_chan_read); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginReadPowerBinaryI16(::grpc::ServerContext* context, const BeginReadPowerBinaryI16Request* request, BeginReadPowerBinaryI16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - int32 fill_mode; - switch (request->fill_mode_enum_case()) { - case nidaqmx_grpc::BeginReadPowerBinaryI16Request::FillModeEnumCase::kFillMode: { - fill_mode = static_cast(request->fill_mode()); - break; - } - case nidaqmx_grpc::BeginReadPowerBinaryI16Request::FillModeEnumCase::kFillModeRaw: { - fill_mode = static_cast(request->fill_mode_raw()); - break; - } - case nidaqmx_grpc::BeginReadPowerBinaryI16Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); - break; - } - } - - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->num_samps_per_chan = num_samps_per_chan; - data->timeout = timeout; - data->fill_mode = fill_mode; - data->array_size_in_samps = array_size_in_samps; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - data->response.mutable_read_array_voltage()->Reserve(request->array_size_in_samps()); - data->response.mutable_read_array_voltage()->Resize(request->array_size_in_samps(), 0); - data->response.mutable_read_array_current()->Reserve(request->array_size_in_samps()); - data->response.mutable_read_array_current()->Resize(request->array_size_in_samps(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadPowerBinaryI16", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + auto data = std::make_unique(); + data->task = task; + data->timeout = timeout; + data->reserved = reserved; + data->library = std::shared_ptr(library_); -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ReadPowerF64(::grpc::ServerContext* context, const ReadPowerF64Request* request, ReadPowerF64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - int32 fill_mode; - switch (request->fill_mode_enum_case()) { - case nidaqmx_grpc::ReadPowerF64Request::FillModeEnumCase::kFillMode: { - fill_mode = static_cast(request->fill_mode()); - break; - } - case nidaqmx_grpc::ReadPowerF64Request::FillModeEnumCase::kFillModeRaw: { - fill_mode = static_cast(request->fill_mode_raw()); - break; - } - case nidaqmx_grpc::ReadPowerF64Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); - break; + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadPowerScalarF64", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ReadRaw(::grpc::ServerContext* context, const ReadRawRequest* request, ReadRawResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + uInt32 array_size_in_bytes = request->array_size_in_bytes(); + auto reserved = nullptr; + std::string read_array(array_size_in_bytes, '\0'); + int32 samps_read {}; + int32 num_bytes_per_samp {}; + auto status = library_->ReadRaw(task, num_samps_per_chan, timeout, (uInt8*)read_array.data(), array_size_in_bytes, &samps_read, &num_bytes_per_samp, reserved); + context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_read)); + if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + response->set_read_array(read_array); + response->set_samps_read(samps_read); + response->set_num_bytes_per_samp(num_bytes_per_samp); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginReadRaw(::grpc::ServerContext* context, const BeginReadRawRequest* request, BeginReadRawResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + uInt32 array_size_in_bytes = request->array_size_in_bytes(); + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->timeout = timeout; + data->array_size_in_bytes = array_size_in_bytes; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + data->response.mutable_read_array()->reserve(request->array_size_in_bytes()); + data->response.mutable_read_array()->resize(request->array_size_in_bytes(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadRaw", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - response->mutable_read_array_voltage()->Resize(array_size_in_samps, 0); - float64* read_array_voltage = response->mutable_read_array_voltage()->mutable_data(); - response->mutable_read_array_current()->Resize(array_size_in_samps, 0); - float64* read_array_current = response->mutable_read_array_current()->mutable_data(); - int32 samps_per_chan_read{}; - auto status = library_->ReadPowerF64(task, num_samps_per_chan, timeout, fill_mode, read_array_voltage, read_array_current, array_size_in_samps, &samps_per_chan_read, reserved); - context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); - if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_samps_per_chan_read(samps_per_chan_read); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginReadPowerF64(::grpc::ServerContext* context, const BeginReadPowerF64Request* request, BeginReadPowerF64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - int32 fill_mode; - switch (request->fill_mode_enum_case()) { - case nidaqmx_grpc::BeginReadPowerF64Request::FillModeEnumCase::kFillMode: { - fill_mode = static_cast(request->fill_mode()); - break; - } - case nidaqmx_grpc::BeginReadPowerF64Request::FillModeEnumCase::kFillModeRaw: { - fill_mode = static_cast(request->fill_mode_raw()); - break; - } - case nidaqmx_grpc::BeginReadPowerF64Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); - break; - } - } - - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->num_samps_per_chan = num_samps_per_chan; - data->timeout = timeout; - data->fill_mode = fill_mode; - data->array_size_in_samps = array_size_in_samps; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - data->response.mutable_read_array_voltage()->Reserve(request->array_size_in_samps()); - data->response.mutable_read_array_voltage()->Resize(request->array_size_in_samps(), 0); - data->response.mutable_read_array_current()->Reserve(request->array_size_in_samps()); - data->response.mutable_read_array_current()->Resize(request->array_size_in_samps(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadPowerF64", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ReadPowerScalarF64(::grpc::ServerContext* context, const ReadPowerScalarF64Request* request, ReadPowerScalarF64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - float64 timeout = request->timeout(); - auto reserved = nullptr; - float64 voltage{}; - float64 current{}; - auto status = library_->ReadPowerScalarF64(task, timeout, &voltage, ¤t, reserved); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_voltage(voltage); - response->set_current(current); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginReadPowerScalarF64(::grpc::ServerContext* context, const BeginReadPowerScalarF64Request* request, BeginReadPowerScalarF64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - float64 timeout = request->timeout(); - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->timeout = timeout; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadPowerScalarF64", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ReadRaw(::grpc::ServerContext* context, const ReadRawRequest* request, ReadRawResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - uInt32 array_size_in_bytes = request->array_size_in_bytes(); - auto reserved = nullptr; - std::string read_array(array_size_in_bytes, '\0'); - int32 samps_read{}; - int32 num_bytes_per_samp{}; - auto status = library_->ReadRaw(task, num_samps_per_chan, timeout, (uInt8*)read_array.data(), array_size_in_bytes, &samps_read, &num_bytes_per_samp, reserved); - context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_read)); - if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_read_array(read_array); - response->set_samps_read(samps_read); - response->set_num_bytes_per_samp(num_bytes_per_samp); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginReadRaw(::grpc::ServerContext* context, const BeginReadRawRequest* request, BeginReadRawResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - uInt32 array_size_in_bytes = request->array_size_in_bytes(); - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->num_samps_per_chan = num_samps_per_chan; - data->timeout = timeout; - data->array_size_in_bytes = array_size_in_bytes; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - data->response.mutable_read_array()->reserve(request->array_size_in_bytes()); - data->response.mutable_read_array()->resize(request->array_size_in_bytes(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadRaw", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::ServerWriteReactor* -NiDAQmxService::RegisterDoneEvent(::grpc::CallbackServerContext* context, const RegisterDoneEventRequest* request) -{ - using CallbackRouter = nidevice_grpc::CallbackRouter; - class RegisterDoneEventReactor : public nidevice_grpc::ServerWriterReactor { - public: + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::ServerWriteReactor* + NiDAQmxService::RegisterDoneEvent(::grpc::CallbackServerContext* context, const RegisterDoneEventRequest* request) + { + using CallbackRouter = nidevice_grpc::CallbackRouter; + class RegisterDoneEventReactor : public nidevice_grpc::ServerWriterReactor { + public: RegisterDoneEventReactor(::grpc::CallbackServerContext* context, const RegisterDoneEventRequest* request, LibrarySharedPtr library, NiDAQmxService* service) { auto status = start(context, request, library, service); @@ -16963,13 +17099,13 @@ NiDAQmxService::RegisterDoneEvent(::grpc::CallbackServerContext* context, const { try { auto handler = CallbackRouter::register_handler( - [this](TaskHandle task, int32 status) { - RegisterDoneEventResponse callback_response; - auto response = &callback_response; - response->set_status(status); - queue_write(callback_response); - return 0; - }); + [this](TaskHandle task, int32 status) { + RegisterDoneEventResponse callback_response; + auto response = &callback_response; + response->set_status(status); + queue_write(callback_response); + return 0; + }); const auto& session_repository_ = service->session_repository_; auto task_grpc_session = request->task(); @@ -16987,24 +17123,24 @@ NiDAQmxService::RegisterDoneEvent(::grpc::CallbackServerContext* context, const this->set_producer(std::move(handler)); } catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + return ex.GetStatus(); } return ::grpc::Status::OK; } - }; + }; - return new RegisterDoneEventReactor(context, request, library_, this); -} + return new RegisterDoneEventReactor(context, request, library_, this); + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::ServerWriteReactor* -NiDAQmxService::RegisterEveryNSamplesEvent(::grpc::CallbackServerContext* context, const RegisterEveryNSamplesEventRequest* request) -{ - using CallbackRouter = nidevice_grpc::CallbackRouter; - class RegisterEveryNSamplesEventReactor : public nidevice_grpc::ServerWriterReactor { - public: + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::ServerWriteReactor* + NiDAQmxService::RegisterEveryNSamplesEvent(::grpc::CallbackServerContext* context, const RegisterEveryNSamplesEventRequest* request) + { + using CallbackRouter = nidevice_grpc::CallbackRouter; + class RegisterEveryNSamplesEventReactor : public nidevice_grpc::ServerWriterReactor { + public: RegisterEveryNSamplesEventReactor(::grpc::CallbackServerContext* context, const RegisterEveryNSamplesEventRequest* request, LibrarySharedPtr library, NiDAQmxService* service) { auto status = start(context, request, library, service); @@ -17017,15 +17153,15 @@ NiDAQmxService::RegisterEveryNSamplesEvent(::grpc::CallbackServerContext* contex { try { auto handler = CallbackRouter::register_handler( - [this](TaskHandle task, int32 every_n_samples_event_type, uInt32 n_samples) { - RegisterEveryNSamplesEventResponse callback_response; - auto response = &callback_response; - response->set_every_n_samples_event_type(static_cast(every_n_samples_event_type)); - response->set_every_n_samples_event_type_raw(every_n_samples_event_type); - response->set_n_samples(n_samples); - queue_write(callback_response); - return 0; - }); + [this](TaskHandle task, int32 every_n_samples_event_type, uInt32 n_samples) { + RegisterEveryNSamplesEventResponse callback_response; + auto response = &callback_response; + response->set_every_n_samples_event_type(static_cast(every_n_samples_event_type)); + response->set_every_n_samples_event_type_raw(every_n_samples_event_type); + response->set_n_samples(n_samples); + queue_write(callback_response); + return 0; + }); const auto& session_repository_ = service->session_repository_; auto task_grpc_session = request->task(); @@ -17045,7 +17181,7 @@ NiDAQmxService::RegisterEveryNSamplesEvent(::grpc::CallbackServerContext* contex break; } } - + uInt32 n_samples = request->n_samples(); auto options = 0U; @@ -17060,24 +17196,24 @@ NiDAQmxService::RegisterEveryNSamplesEvent(::grpc::CallbackServerContext* contex this->set_producer(std::move(handler)); } catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + return ex.GetStatus(); } return ::grpc::Status::OK; } - }; + }; - return new RegisterEveryNSamplesEventReactor(context, request, library_, this); -} + return new RegisterEveryNSamplesEventReactor(context, request, library_, this); + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::ServerWriteReactor* -NiDAQmxService::RegisterSignalEvent(::grpc::CallbackServerContext* context, const RegisterSignalEventRequest* request) -{ - using CallbackRouter = nidevice_grpc::CallbackRouter; - class RegisterSignalEventReactor : public nidevice_grpc::ServerWriterReactor { - public: + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::ServerWriteReactor* + NiDAQmxService::RegisterSignalEvent(::grpc::CallbackServerContext* context, const RegisterSignalEventRequest* request) + { + using CallbackRouter = nidevice_grpc::CallbackRouter; + class RegisterSignalEventReactor : public nidevice_grpc::ServerWriterReactor { + public: RegisterSignalEventReactor(::grpc::CallbackServerContext* context, const RegisterSignalEventRequest* request, LibrarySharedPtr library, NiDAQmxService* service) { auto status = start(context, request, library, service); @@ -17090,13 +17226,13 @@ NiDAQmxService::RegisterSignalEvent(::grpc::CallbackServerContext* context, cons { try { auto handler = CallbackRouter::register_handler( - [this](TaskHandle task, int32 signal_id) { - RegisterSignalEventResponse callback_response; - auto response = &callback_response; - response->set_signal_id(signal_id); - queue_write(callback_response); - return 0; - }); + [this](TaskHandle task, int32 signal_id) { + RegisterSignalEventResponse callback_response; + auto response = &callback_response; + response->set_signal_id(signal_id); + queue_write(callback_response); + return 0; + }); const auto& session_repository_ = service->session_repository_; auto task_grpc_session = request->task(); @@ -17116,7 +17252,7 @@ NiDAQmxService::RegisterSignalEvent(::grpc::CallbackServerContext* context, cons break; } } - + auto options = 0U; auto status = library->RegisterSignalEvent(task, signal_id, options, CallbackRouter::handle_callback, handler->token()); @@ -17130,5466 +17266,5470 @@ NiDAQmxService::RegisterSignalEvent(::grpc::CallbackServerContext* context, cons this->set_producer(std::move(handler)); } catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + return ex.GetStatus(); } return ::grpc::Status::OK; } - }; - - return new RegisterSignalEventReactor(context, request, library_, this); -} + }; -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::RemoveCDAQSyncConnection(::grpc::ServerContext* context, const RemoveCDAQSyncConnectionRequest* request, RemoveCDAQSyncConnectionResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; + return new RegisterSignalEventReactor(context, request, library_, this); } - try { - auto port_list_mbcs = convert_from_grpc(request->port_list()); - auto port_list = port_list_mbcs.c_str(); - auto status = library_->RemoveCDAQSyncConnection(port_list); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::RemoveCDAQSyncConnection(::grpc::ServerContext* context, const RemoveCDAQSyncConnectionRequest* request, RemoveCDAQSyncConnectionResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto port_list_mbcs = convert_from_grpc(request->port_list()); + auto port_list = port_list_mbcs.c_str(); + auto status = library_->RemoveCDAQSyncConnection(port_list); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ReserveNetworkDevice(::grpc::ServerContext* context, const ReserveNetworkDeviceRequest* request, ReserveNetworkDeviceResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - bool32 override_reservation = request->override_reservation(); - auto status = library_->ReserveNetworkDevice(device_name, override_reservation); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ReserveNetworkDevice(::grpc::ServerContext* context, const ReserveNetworkDeviceRequest* request, ReserveNetworkDeviceResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + bool32 override_reservation = request->override_reservation(); + auto status = library_->ReserveNetworkDevice(device_name, override_reservation); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ResetBufferAttribute(::grpc::ServerContext* context, const ResetBufferAttributeRequest* request, ResetBufferAttributeResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::ResetBufferAttributeRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::BufferResetAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::ResetBufferAttributeRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::BufferResetAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ResetBufferAttribute(::grpc::ServerContext* context, const ResetBufferAttributeRequest* request, ResetBufferAttributeResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::ResetBufferAttributeRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::BufferResetAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::ResetBufferAttributeRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::BufferResetAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::ResetBufferAttributeRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::ResetBufferAttributeRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + auto status = library_->ResetBufferAttribute(task, attribute); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ResetChanAttribute(::grpc::ServerContext* context, const ResetChanAttributeRequest* request, ResetChanAttributeResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto channel_mbcs = convert_from_grpc(request->channel()); + auto channel = channel_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::ResetChanAttributeRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ChannelResetAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::ResetChanAttributeRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ChannelResetAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::ResetChanAttributeRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } - auto status = library_->ResetBufferAttribute(task, attribute); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + auto status = library_->ResetChanAttribute(task, channel, attribute); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ResetChanAttribute(::grpc::ServerContext* context, const ResetChanAttributeRequest* request, ResetChanAttributeResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto channel_mbcs = convert_from_grpc(request->channel()); - auto channel = channel_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::ResetChanAttributeRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ChannelResetAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::ResetChanAttributeRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ChannelResetAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::ResetChanAttributeRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - auto status = library_->ResetChanAttribute(task, channel, attribute); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ResetDevice(::grpc::ServerContext* context, const ResetDeviceRequest* request, ResetDeviceResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + auto status = library_->ResetDevice(device_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ResetDevice(::grpc::ServerContext* context, const ResetDeviceRequest* request, ResetDeviceResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - auto status = library_->ResetDevice(device_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ResetExportedSignalAttribute(::grpc::ServerContext* context, const ResetExportedSignalAttributeRequest* request, ResetExportedSignalAttributeResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::ResetExportedSignalAttributeRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ExportSignalResetAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::ResetExportedSignalAttributeRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ExportSignalResetAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::ResetExportedSignalAttributeRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ResetExportedSignalAttribute(::grpc::ServerContext* context, const ResetExportedSignalAttributeRequest* request, ResetExportedSignalAttributeResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::ResetExportedSignalAttributeRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ExportSignalResetAttribute_IsValid(attribute) ? attribute : 0; - break; + auto status = library_->ResetExportedSignalAttribute(task, attribute); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - case nidaqmx_grpc::ResetExportedSignalAttributeRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ExportSignalResetAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ResetReadAttribute(::grpc::ServerContext* context, const ResetReadAttributeRequest* request, ResetReadAttributeResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::ResetReadAttributeRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ReadResetAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::ResetReadAttributeRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ReadResetAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::ResetReadAttributeRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::ResetExportedSignalAttributeRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + auto status = library_->ResetReadAttribute(task, attribute); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - auto status = library_->ResetExportedSignalAttribute(task, attribute); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ResetReadAttribute(::grpc::ServerContext* context, const ResetReadAttributeRequest* request, ResetReadAttributeResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::ResetReadAttributeRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ReadResetAttribute_IsValid(attribute) ? attribute : 0; - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ResetRealTimeAttribute(::grpc::ServerContext* context, const ResetRealTimeAttributeRequest* request, ResetRealTimeAttributeResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::ResetRealTimeAttributeRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::RealTimeResetAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::ResetRealTimeAttributeRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::RealTimeResetAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::ResetRealTimeAttributeRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } + + auto status = library_->ResetRealTimeAttribute(task, attribute); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - case nidaqmx_grpc::ResetReadAttributeRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ReadResetAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ResetTimingAttribute(::grpc::ServerContext* context, const ResetTimingAttributeRequest* request, ResetTimingAttributeResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::ResetTimingAttributeRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TimingResetAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::ResetTimingAttributeRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TimingResetAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::ResetTimingAttributeRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::ResetReadAttributeRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + auto status = library_->ResetTimingAttribute(task, attribute); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ResetTimingAttributeEx(::grpc::ServerContext* context, const ResetTimingAttributeExRequest* request, ResetTimingAttributeExResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto device_names_mbcs = convert_from_grpc(request->device_names()); + auto device_names = device_names_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::ResetTimingAttributeExRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TimingResetAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::ResetTimingAttributeExRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TimingResetAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::ResetTimingAttributeExRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } - auto status = library_->ResetReadAttribute(task, attribute); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + auto status = library_->ResetTimingAttributeEx(task, device_names, attribute); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ResetRealTimeAttribute(::grpc::ServerContext* context, const ResetRealTimeAttributeRequest* request, ResetRealTimeAttributeResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::ResetRealTimeAttributeRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::RealTimeResetAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::ResetRealTimeAttributeRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::RealTimeResetAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ResetTrigAttribute(::grpc::ServerContext* context, const ResetTrigAttributeRequest* request, ResetTrigAttributeResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::ResetTrigAttributeRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TriggerResetAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::ResetTrigAttributeRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TriggerResetAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::ResetTrigAttributeRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::ResetRealTimeAttributeRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + auto status = library_->ResetTrigAttribute(task, attribute); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ResetWatchdogAttribute(::grpc::ServerContext* context, const ResetWatchdogAttributeRequest* request, ResetWatchdogAttributeResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto lines_mbcs = convert_from_grpc(request->lines()); + auto lines = lines_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::ResetWatchdogAttributeRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::WatchdogResetAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::ResetWatchdogAttributeRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::WatchdogResetAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::ResetWatchdogAttributeRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } - auto status = library_->ResetRealTimeAttribute(task, attribute); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + auto status = library_->ResetWatchdogAttribute(task, lines, attribute); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ResetTimingAttribute(::grpc::ServerContext* context, const ResetTimingAttributeRequest* request, ResetTimingAttributeResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ResetWriteAttribute(::grpc::ServerContext* context, const ResetWriteAttributeRequest* request, ResetWriteAttributeResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::ResetWriteAttributeRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::WriteResetAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::ResetWriteAttributeRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::WriteResetAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::ResetWriteAttributeRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } + + auto status = library_->ResetWriteAttribute(task, attribute); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::ResetTimingAttributeRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TimingResetAttribute_IsValid(attribute) ? attribute : 0; - break; + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::RestoreLastExtCalConst(::grpc::ServerContext* context, const RestoreLastExtCalConstRequest* request, RestoreLastExtCalConstResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + auto status = library_->RestoreLastExtCalConst(device_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SaveGlobalChan(::grpc::ServerContext* context, const SaveGlobalChanRequest* request, SaveGlobalChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto channel_name_mbcs = convert_from_grpc(request->channel_name()); + auto channel_name = channel_name_mbcs.c_str(); + auto save_as_mbcs = convert_from_grpc(request->save_as()); + auto save_as = save_as_mbcs.c_str(); + auto author_mbcs = convert_from_grpc(request->author()); + auto author = author_mbcs.c_str(); + uInt32 options; + switch (request->options_enum_case()) { + case nidaqmx_grpc::SaveGlobalChanRequest::OptionsEnumCase::kOptions: { + options = static_cast(request->options()); + break; + } + case nidaqmx_grpc::SaveGlobalChanRequest::OptionsEnumCase::kOptionsRaw: { + options = static_cast(request->options_raw()); + break; + } + case nidaqmx_grpc::SaveGlobalChanRequest::OptionsEnumCase::OPTIONS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for options was not specified or out of range"); + break; + } } - case nidaqmx_grpc::ResetTimingAttributeRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TimingResetAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; + + auto status = library_->SaveGlobalChan(task, channel_name, save_as, author, options); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SaveScale(::grpc::ServerContext* context, const SaveScaleRequest* request, SaveScaleResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto scale_name_mbcs = convert_from_grpc(request->scale_name()); + auto scale_name = scale_name_mbcs.c_str(); + auto save_as_mbcs = convert_from_grpc(request->save_as()); + auto save_as = save_as_mbcs.c_str(); + auto author_mbcs = convert_from_grpc(request->author()); + auto author = author_mbcs.c_str(); + uInt32 options; + switch (request->options_enum_case()) { + case nidaqmx_grpc::SaveScaleRequest::OptionsEnumCase::kOptions: { + options = static_cast(request->options()); + break; + } + case nidaqmx_grpc::SaveScaleRequest::OptionsEnumCase::kOptionsRaw: { + options = static_cast(request->options_raw()); + break; + } + case nidaqmx_grpc::SaveScaleRequest::OptionsEnumCase::OPTIONS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for options was not specified or out of range"); + break; + } } - case nidaqmx_grpc::ResetTimingAttributeRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + auto status = library_->SaveScale(scale_name, save_as, author, options); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SaveTask(::grpc::ServerContext* context, const SaveTaskRequest* request, SaveTaskResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto save_as_mbcs = convert_from_grpc(request->save_as()); + auto save_as = save_as_mbcs.c_str(); + auto author_mbcs = convert_from_grpc(request->author()); + auto author = author_mbcs.c_str(); + uInt32 options; + switch (request->options_enum_case()) { + case nidaqmx_grpc::SaveTaskRequest::OptionsEnumCase::kOptions: { + options = static_cast(request->options()); + break; + } + case nidaqmx_grpc::SaveTaskRequest::OptionsEnumCase::kOptionsRaw: { + options = static_cast(request->options_raw()); + break; + } + case nidaqmx_grpc::SaveTaskRequest::OptionsEnumCase::OPTIONS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for options was not specified or out of range"); + break; + } + } - auto status = library_->ResetTimingAttribute(task, attribute); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + auto status = library_->SaveTask(task, save_as, author, options); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ResetTimingAttributeEx(::grpc::ServerContext* context, const ResetTimingAttributeExRequest* request, ResetTimingAttributeExResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto device_names_mbcs = convert_from_grpc(request->device_names()); - auto device_names = device_names_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::ResetTimingAttributeExRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TimingResetAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::ResetTimingAttributeExRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TimingResetAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::ResetTimingAttributeExRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - auto status = library_->ResetTimingAttributeEx(task, device_names, attribute); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SelfCal(::grpc::ServerContext* context, const SelfCalRequest* request, SelfCalResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + auto status = library_->SelfCal(device_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ResetTrigAttribute(::grpc::ServerContext* context, const ResetTrigAttributeRequest* request, ResetTrigAttributeResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::ResetTrigAttributeRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TriggerResetAttribute_IsValid(attribute) ? attribute : 0; - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SelfTestDevice(::grpc::ServerContext* context, const SelfTestDeviceRequest* request, SelfTestDeviceResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + auto status = library_->SelfTestDevice(device_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } - case nidaqmx_grpc::ResetTrigAttributeRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TriggerResetAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetAIChanCalCalDate(::grpc::ServerContext* context, const SetAIChanCalCalDateRequest* request, SetAIChanCalCalDateResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto channel_name_mbcs = convert_from_grpc(request->channel_name()); + auto channel_name = channel_name_mbcs.c_str(); + uInt32 year = request->year(); + uInt32 month = request->month(); + uInt32 day = request->day(); + uInt32 hour = request->hour(); + uInt32 minute = request->minute(); + auto status = library_->SetAIChanCalCalDate(task, channel_name, year, month, day, hour, minute); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - case nidaqmx_grpc::ResetTrigAttributeRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetAIChanCalExpDate(::grpc::ServerContext* context, const SetAIChanCalExpDateRequest* request, SetAIChanCalExpDateResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto channel_name_mbcs = convert_from_grpc(request->channel_name()); + auto channel_name = channel_name_mbcs.c_str(); + uInt32 year = request->year(); + uInt32 month = request->month(); + uInt32 day = request->day(); + uInt32 hour = request->hour(); + uInt32 minute = request->minute(); + auto status = library_->SetAIChanCalExpDate(task, channel_name, year, month, day, hour, minute); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - auto status = library_->ResetTrigAttribute(task, attribute); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ResetWatchdogAttribute(::grpc::ServerContext* context, const ResetWatchdogAttributeRequest* request, ResetWatchdogAttributeResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto lines_mbcs = convert_from_grpc(request->lines()); - auto lines = lines_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::ResetWatchdogAttributeRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::WatchdogResetAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::ResetWatchdogAttributeRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::WatchdogResetAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::ResetWatchdogAttributeRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - auto status = library_->ResetWatchdogAttribute(task, lines, attribute); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ResetWriteAttribute(::grpc::ServerContext* context, const ResetWriteAttributeRequest* request, ResetWriteAttributeResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::ResetWriteAttributeRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::WriteResetAttribute_IsValid(attribute) ? attribute : 0; - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetAnalogPowerUpStates(::grpc::ServerContext* context, const SetAnalogPowerUpStatesRequest* request, SetAnalogPowerUpStatesResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + auto get_channelNames_if = [](const google::protobuf::RepeatedPtrField& vector, int n) -> const char* { + if (vector.size() > n) { + return vector[n].channel_names().c_str(); + } + return nullptr; + }; + auto get_state_if = [](const google::protobuf::RepeatedPtrField& vector, int n) -> float64 { + if (vector.size() > n) { + return vector[n].state(); + } + return 0; + }; + auto get_channelType_if = [](const google::protobuf::RepeatedPtrField& vector, int n) -> int32 { + if (vector.size() > n) { + return vector[n].channel_type(); + } + return 0; + }; + auto power_up_states = request->power_up_states(); + if (power_up_states.size() == 0) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "No values for powerUpStates were specified"); } - case nidaqmx_grpc::ResetWriteAttributeRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::WriteResetAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; + if (power_up_states.size() > 96) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "More than 96 values for powerUpStates were specified"); } - case nidaqmx_grpc::ResetWriteAttributeRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + auto status = std::static_pointer_cast(library_)->SetAnalogPowerUpStates(device_name, get_channelNames_if(power_up_states, 0), get_state_if(power_up_states, 0), get_channelType_if(power_up_states, 0), get_channelNames_if(power_up_states, 1), get_state_if(power_up_states, 1), get_channelType_if(power_up_states, 1), get_channelNames_if(power_up_states, 2), get_state_if(power_up_states, 2), get_channelType_if(power_up_states, 2), get_channelNames_if(power_up_states, 3), get_state_if(power_up_states, 3), get_channelType_if(power_up_states, 3), get_channelNames_if(power_up_states, 4), get_state_if(power_up_states, 4), get_channelType_if(power_up_states, 4), get_channelNames_if(power_up_states, 5), get_state_if(power_up_states, 5), get_channelType_if(power_up_states, 5), get_channelNames_if(power_up_states, 6), get_state_if(power_up_states, 6), get_channelType_if(power_up_states, 6), get_channelNames_if(power_up_states, 7), get_state_if(power_up_states, 7), get_channelType_if(power_up_states, 7), get_channelNames_if(power_up_states, 8), get_state_if(power_up_states, 8), get_channelType_if(power_up_states, 8), get_channelNames_if(power_up_states, 9), get_state_if(power_up_states, 9), get_channelType_if(power_up_states, 9), get_channelNames_if(power_up_states, 10), get_state_if(power_up_states, 10), get_channelType_if(power_up_states, 10), get_channelNames_if(power_up_states, 11), get_state_if(power_up_states, 11), get_channelType_if(power_up_states, 11), get_channelNames_if(power_up_states, 12), get_state_if(power_up_states, 12), get_channelType_if(power_up_states, 12), get_channelNames_if(power_up_states, 13), get_state_if(power_up_states, 13), get_channelType_if(power_up_states, 13), get_channelNames_if(power_up_states, 14), get_state_if(power_up_states, 14), get_channelType_if(power_up_states, 14), get_channelNames_if(power_up_states, 15), get_state_if(power_up_states, 15), get_channelType_if(power_up_states, 15), get_channelNames_if(power_up_states, 16), get_state_if(power_up_states, 16), get_channelType_if(power_up_states, 16), get_channelNames_if(power_up_states, 17), get_state_if(power_up_states, 17), get_channelType_if(power_up_states, 17), get_channelNames_if(power_up_states, 18), get_state_if(power_up_states, 18), get_channelType_if(power_up_states, 18), get_channelNames_if(power_up_states, 19), get_state_if(power_up_states, 19), get_channelType_if(power_up_states, 19), get_channelNames_if(power_up_states, 20), get_state_if(power_up_states, 20), get_channelType_if(power_up_states, 20), get_channelNames_if(power_up_states, 21), get_state_if(power_up_states, 21), get_channelType_if(power_up_states, 21), get_channelNames_if(power_up_states, 22), get_state_if(power_up_states, 22), get_channelType_if(power_up_states, 22), get_channelNames_if(power_up_states, 23), get_state_if(power_up_states, 23), get_channelType_if(power_up_states, 23), get_channelNames_if(power_up_states, 24), get_state_if(power_up_states, 24), get_channelType_if(power_up_states, 24), get_channelNames_if(power_up_states, 25), get_state_if(power_up_states, 25), get_channelType_if(power_up_states, 25), get_channelNames_if(power_up_states, 26), get_state_if(power_up_states, 26), get_channelType_if(power_up_states, 26), get_channelNames_if(power_up_states, 27), get_state_if(power_up_states, 27), get_channelType_if(power_up_states, 27), get_channelNames_if(power_up_states, 28), get_state_if(power_up_states, 28), get_channelType_if(power_up_states, 28), get_channelNames_if(power_up_states, 29), get_state_if(power_up_states, 29), get_channelType_if(power_up_states, 29), get_channelNames_if(power_up_states, 30), get_state_if(power_up_states, 30), get_channelType_if(power_up_states, 30), get_channelNames_if(power_up_states, 31), get_state_if(power_up_states, 31), get_channelType_if(power_up_states, 31), get_channelNames_if(power_up_states, 32), get_state_if(power_up_states, 32), get_channelType_if(power_up_states, 32), get_channelNames_if(power_up_states, 33), get_state_if(power_up_states, 33), get_channelType_if(power_up_states, 33), get_channelNames_if(power_up_states, 34), get_state_if(power_up_states, 34), get_channelType_if(power_up_states, 34), get_channelNames_if(power_up_states, 35), get_state_if(power_up_states, 35), get_channelType_if(power_up_states, 35), get_channelNames_if(power_up_states, 36), get_state_if(power_up_states, 36), get_channelType_if(power_up_states, 36), get_channelNames_if(power_up_states, 37), get_state_if(power_up_states, 37), get_channelType_if(power_up_states, 37), get_channelNames_if(power_up_states, 38), get_state_if(power_up_states, 38), get_channelType_if(power_up_states, 38), get_channelNames_if(power_up_states, 39), get_state_if(power_up_states, 39), get_channelType_if(power_up_states, 39), get_channelNames_if(power_up_states, 40), get_state_if(power_up_states, 40), get_channelType_if(power_up_states, 40), get_channelNames_if(power_up_states, 41), get_state_if(power_up_states, 41), get_channelType_if(power_up_states, 41), get_channelNames_if(power_up_states, 42), get_state_if(power_up_states, 42), get_channelType_if(power_up_states, 42), get_channelNames_if(power_up_states, 43), get_state_if(power_up_states, 43), get_channelType_if(power_up_states, 43), get_channelNames_if(power_up_states, 44), get_state_if(power_up_states, 44), get_channelType_if(power_up_states, 44), get_channelNames_if(power_up_states, 45), get_state_if(power_up_states, 45), get_channelType_if(power_up_states, 45), get_channelNames_if(power_up_states, 46), get_state_if(power_up_states, 46), get_channelType_if(power_up_states, 46), get_channelNames_if(power_up_states, 47), get_state_if(power_up_states, 47), get_channelType_if(power_up_states, 47), get_channelNames_if(power_up_states, 48), get_state_if(power_up_states, 48), get_channelType_if(power_up_states, 48), get_channelNames_if(power_up_states, 49), get_state_if(power_up_states, 49), get_channelType_if(power_up_states, 49), get_channelNames_if(power_up_states, 50), get_state_if(power_up_states, 50), get_channelType_if(power_up_states, 50), get_channelNames_if(power_up_states, 51), get_state_if(power_up_states, 51), get_channelType_if(power_up_states, 51), get_channelNames_if(power_up_states, 52), get_state_if(power_up_states, 52), get_channelType_if(power_up_states, 52), get_channelNames_if(power_up_states, 53), get_state_if(power_up_states, 53), get_channelType_if(power_up_states, 53), get_channelNames_if(power_up_states, 54), get_state_if(power_up_states, 54), get_channelType_if(power_up_states, 54), get_channelNames_if(power_up_states, 55), get_state_if(power_up_states, 55), get_channelType_if(power_up_states, 55), get_channelNames_if(power_up_states, 56), get_state_if(power_up_states, 56), get_channelType_if(power_up_states, 56), get_channelNames_if(power_up_states, 57), get_state_if(power_up_states, 57), get_channelType_if(power_up_states, 57), get_channelNames_if(power_up_states, 58), get_state_if(power_up_states, 58), get_channelType_if(power_up_states, 58), get_channelNames_if(power_up_states, 59), get_state_if(power_up_states, 59), get_channelType_if(power_up_states, 59), get_channelNames_if(power_up_states, 60), get_state_if(power_up_states, 60), get_channelType_if(power_up_states, 60), get_channelNames_if(power_up_states, 61), get_state_if(power_up_states, 61), get_channelType_if(power_up_states, 61), get_channelNames_if(power_up_states, 62), get_state_if(power_up_states, 62), get_channelType_if(power_up_states, 62), get_channelNames_if(power_up_states, 63), get_state_if(power_up_states, 63), get_channelType_if(power_up_states, 63), get_channelNames_if(power_up_states, 64), get_state_if(power_up_states, 64), get_channelType_if(power_up_states, 64), get_channelNames_if(power_up_states, 65), get_state_if(power_up_states, 65), get_channelType_if(power_up_states, 65), get_channelNames_if(power_up_states, 66), get_state_if(power_up_states, 66), get_channelType_if(power_up_states, 66), get_channelNames_if(power_up_states, 67), get_state_if(power_up_states, 67), get_channelType_if(power_up_states, 67), get_channelNames_if(power_up_states, 68), get_state_if(power_up_states, 68), get_channelType_if(power_up_states, 68), get_channelNames_if(power_up_states, 69), get_state_if(power_up_states, 69), get_channelType_if(power_up_states, 69), get_channelNames_if(power_up_states, 70), get_state_if(power_up_states, 70), get_channelType_if(power_up_states, 70), get_channelNames_if(power_up_states, 71), get_state_if(power_up_states, 71), get_channelType_if(power_up_states, 71), get_channelNames_if(power_up_states, 72), get_state_if(power_up_states, 72), get_channelType_if(power_up_states, 72), get_channelNames_if(power_up_states, 73), get_state_if(power_up_states, 73), get_channelType_if(power_up_states, 73), get_channelNames_if(power_up_states, 74), get_state_if(power_up_states, 74), get_channelType_if(power_up_states, 74), get_channelNames_if(power_up_states, 75), get_state_if(power_up_states, 75), get_channelType_if(power_up_states, 75), get_channelNames_if(power_up_states, 76), get_state_if(power_up_states, 76), get_channelType_if(power_up_states, 76), get_channelNames_if(power_up_states, 77), get_state_if(power_up_states, 77), get_channelType_if(power_up_states, 77), get_channelNames_if(power_up_states, 78), get_state_if(power_up_states, 78), get_channelType_if(power_up_states, 78), get_channelNames_if(power_up_states, 79), get_state_if(power_up_states, 79), get_channelType_if(power_up_states, 79), get_channelNames_if(power_up_states, 80), get_state_if(power_up_states, 80), get_channelType_if(power_up_states, 80), get_channelNames_if(power_up_states, 81), get_state_if(power_up_states, 81), get_channelType_if(power_up_states, 81), get_channelNames_if(power_up_states, 82), get_state_if(power_up_states, 82), get_channelType_if(power_up_states, 82), get_channelNames_if(power_up_states, 83), get_state_if(power_up_states, 83), get_channelType_if(power_up_states, 83), get_channelNames_if(power_up_states, 84), get_state_if(power_up_states, 84), get_channelType_if(power_up_states, 84), get_channelNames_if(power_up_states, 85), get_state_if(power_up_states, 85), get_channelType_if(power_up_states, 85), get_channelNames_if(power_up_states, 86), get_state_if(power_up_states, 86), get_channelType_if(power_up_states, 86), get_channelNames_if(power_up_states, 87), get_state_if(power_up_states, 87), get_channelType_if(power_up_states, 87), get_channelNames_if(power_up_states, 88), get_state_if(power_up_states, 88), get_channelType_if(power_up_states, 88), get_channelNames_if(power_up_states, 89), get_state_if(power_up_states, 89), get_channelType_if(power_up_states, 89), get_channelNames_if(power_up_states, 90), get_state_if(power_up_states, 90), get_channelType_if(power_up_states, 90), get_channelNames_if(power_up_states, 91), get_state_if(power_up_states, 91), get_channelType_if(power_up_states, 91), get_channelNames_if(power_up_states, 92), get_state_if(power_up_states, 92), get_channelType_if(power_up_states, 92), get_channelNames_if(power_up_states, 93), get_state_if(power_up_states, 93), get_channelType_if(power_up_states, 93), get_channelNames_if(power_up_states, 94), get_state_if(power_up_states, 94), get_channelType_if(power_up_states, 94), get_channelNames_if(power_up_states, 95), get_state_if(power_up_states, 95), get_channelType_if(power_up_states, 95), get_channelNames_if(power_up_states, 96), get_state_if(power_up_states, 96), get_channelType_if(power_up_states, 96)); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } + response->set_status(status); + return ::grpc::Status::OK; } - - auto status = library_->ResetWriteAttribute(task, attribute); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::RestoreLastExtCalConst(::grpc::ServerContext* context, const RestoreLastExtCalConstRequest* request, RestoreLastExtCalConstResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - auto status = library_->RestoreLastExtCalConst(device_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetAnalogPowerUpStatesWithOutputType(::grpc::ServerContext* context, const SetAnalogPowerUpStatesWithOutputTypeRequest* request, SetAnalogPowerUpStatesWithOutputTypeResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + try { + auto channel_names_mbcs = convert_from_grpc(request->channel_names()); + auto channel_names = channel_names_mbcs.c_str(); + auto state_array = const_cast(request->state_array().data()); + auto channel_type_array_vector = std::vector(); + channel_type_array_vector.reserve(request->channel_type_array().size()); + std::transform( + request->channel_type_array().begin(), + request->channel_type_array().end(), + std::back_inserter(channel_type_array_vector), + [](auto x) { return x; }); + auto channel_type_array = channel_type_array_vector.data(); -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SaveGlobalChan(::grpc::ServerContext* context, const SaveGlobalChanRequest* request, SaveGlobalChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto channel_name_mbcs = convert_from_grpc(request->channel_name()); - auto channel_name = channel_name_mbcs.c_str(); - auto save_as_mbcs = convert_from_grpc(request->save_as()); - auto save_as = save_as_mbcs.c_str(); - auto author_mbcs = convert_from_grpc(request->author()); - auto author = author_mbcs.c_str(); - uInt32 options; - switch (request->options_enum_case()) { - case nidaqmx_grpc::SaveGlobalChanRequest::OptionsEnumCase::kOptions: { - options = static_cast(request->options()); - break; - } - case nidaqmx_grpc::SaveGlobalChanRequest::OptionsEnumCase::kOptionsRaw: { - options = static_cast(request->options_raw()); - break; - } - case nidaqmx_grpc::SaveGlobalChanRequest::OptionsEnumCase::OPTIONS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for options was not specified or out of range"); - break; - } - } - - auto status = library_->SaveGlobalChan(task, channel_name, save_as, author, options); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + auto array_size_determine_from_sizes = std::array + { + request->state_array_size(), + request->channel_type_array_size() + }; + const auto array_size_size_calculation = calculate_linked_array_size(array_size_determine_from_sizes, false); -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SaveScale(::grpc::ServerContext* context, const SaveScaleRequest* request, SaveScaleResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto scale_name_mbcs = convert_from_grpc(request->scale_name()); - auto scale_name = scale_name_mbcs.c_str(); - auto save_as_mbcs = convert_from_grpc(request->save_as()); - auto save_as = save_as_mbcs.c_str(); - auto author_mbcs = convert_from_grpc(request->author()); - auto author = author_mbcs.c_str(); - uInt32 options; - switch (request->options_enum_case()) { - case nidaqmx_grpc::SaveScaleRequest::OptionsEnumCase::kOptions: { - options = static_cast(request->options()); - break; + if (array_size_size_calculation.match_state == MatchState::MISMATCH) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The sizes of linked repeated fields [state_array, channel_type_array] do not match"); } - case nidaqmx_grpc::SaveScaleRequest::OptionsEnumCase::kOptionsRaw: { - options = static_cast(request->options_raw()); - break; - } - case nidaqmx_grpc::SaveScaleRequest::OptionsEnumCase::OPTIONS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for options was not specified or out of range"); - break; + auto array_size = array_size_size_calculation.size; + + auto status = library_->SetAnalogPowerUpStatesWithOutputType(channel_names, state_array, channel_type_array, array_size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } + response->set_status(status); + return ::grpc::Status::OK; } - - auto status = library_->SaveScale(scale_name, save_as, author, options); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SaveTask(::grpc::ServerContext* context, const SaveTaskRequest* request, SaveTaskResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto save_as_mbcs = convert_from_grpc(request->save_as()); - auto save_as = save_as_mbcs.c_str(); - auto author_mbcs = convert_from_grpc(request->author()); - auto author = author_mbcs.c_str(); - uInt32 options; - switch (request->options_enum_case()) { - case nidaqmx_grpc::SaveTaskRequest::OptionsEnumCase::kOptions: { - options = static_cast(request->options()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetArmStartTrigTrigWhen(::grpc::ServerContext* context, const SetArmStartTrigTrigWhenRequest* request, SetArmStartTrigTrigWhenResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto data = convert_from_grpc(request->data()); + auto status = library_->SetArmStartTrigTrigWhen(task, data); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - case nidaqmx_grpc::SaveTaskRequest::OptionsEnumCase::kOptionsRaw: { - options = static_cast(request->options_raw()); - break; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetBufferAttributeUInt32(::grpc::ServerContext* context, const SetBufferAttributeUInt32Request* request, SetBufferAttributeUInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetBufferAttributeUInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::BufferUInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetBufferAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::BufferUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetBufferAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::SaveTaskRequest::OptionsEnumCase::OPTIONS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for options was not specified or out of range"); - break; + + uInt32 value = request->value(); + auto status = library_->SetBufferAttributeUInt32(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - auto status = library_->SaveTask(task, save_as, author, options); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SelfCal(::grpc::ServerContext* context, const SelfCalRequest* request, SelfCalResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - auto status = library_->SelfCal(device_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetCalInfoAttributeBool(::grpc::ServerContext* context, const SetCalInfoAttributeBoolRequest* request, SetCalInfoAttributeBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetCalInfoAttributeBoolRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::CalibrationInfoBoolAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetCalInfoAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::CalibrationInfoBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetCalInfoAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SelfTestDevice(::grpc::ServerContext* context, const SelfTestDeviceRequest* request, SelfTestDeviceResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - auto status = library_->SelfTestDevice(device_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + bool32 value = request->value(); + auto status = library_->SetCalInfoAttributeBool(device_name, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetAIChanCalCalDate(::grpc::ServerContext* context, const SetAIChanCalCalDateRequest* request, SetAIChanCalCalDateResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto channel_name_mbcs = convert_from_grpc(request->channel_name()); - auto channel_name = channel_name_mbcs.c_str(); - uInt32 year = request->year(); - uInt32 month = request->month(); - uInt32 day = request->day(); - uInt32 hour = request->hour(); - uInt32 minute = request->minute(); - auto status = library_->SetAIChanCalCalDate(task, channel_name, year, month, day, hour, minute); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetCalInfoAttributeDouble(::grpc::ServerContext* context, const SetCalInfoAttributeDoubleRequest* request, SetCalInfoAttributeDoubleResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetCalInfoAttributeDoubleRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::CalibrationInfoDoubleAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetCalInfoAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::CalibrationInfoDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetCalInfoAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetAIChanCalExpDate(::grpc::ServerContext* context, const SetAIChanCalExpDateRequest* request, SetAIChanCalExpDateResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto channel_name_mbcs = convert_from_grpc(request->channel_name()); - auto channel_name = channel_name_mbcs.c_str(); - uInt32 year = request->year(); - uInt32 month = request->month(); - uInt32 day = request->day(); - uInt32 hour = request->hour(); - uInt32 minute = request->minute(); - auto status = library_->SetAIChanCalExpDate(task, channel_name, year, month, day, hour, minute); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + float64 value = request->value(); + auto status = library_->SetCalInfoAttributeDouble(device_name, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetAnalogPowerUpStates(::grpc::ServerContext* context, const SetAnalogPowerUpStatesRequest* request, SetAnalogPowerUpStatesResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - auto get_channelNames_if = [](const google::protobuf::RepeatedPtrField& vector, int n) -> const char* { - if (vector.size() > n) { - return vector[n].channel_names().c_str(); - } - return nullptr; - }; - auto get_state_if = [](const google::protobuf::RepeatedPtrField& vector, int n) -> float64 { - if (vector.size() > n) { - return vector[n].state(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetCalInfoAttributeString(::grpc::ServerContext* context, const SetCalInfoAttributeStringRequest* request, SetCalInfoAttributeStringResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetCalInfoAttributeStringRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::CalibrationInfoStringAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetCalInfoAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::CalibrationInfoStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetCalInfoAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - return 0; - }; - auto get_channelType_if = [](const google::protobuf::RepeatedPtrField& vector, int n) -> int32 { - if (vector.size() > n) { - return vector[n].channel_type(); + + auto value_mbcs = convert_from_grpc(request->value()); + auto value = value_mbcs.c_str(); + auto status = library_->SetCalInfoAttributeString(device_name, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } - return 0; - }; - auto power_up_states = request->power_up_states(); - if (power_up_states.size() == 0) { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "No values for powerUpStates were specified"); + response->set_status(status); + return ::grpc::Status::OK; } - if (power_up_states.size() > 96) { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "More than 96 values for powerUpStates were specified"); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } + } - auto status = std::static_pointer_cast(library_)->SetAnalogPowerUpStates(device_name, get_channelNames_if(power_up_states, 0), get_state_if(power_up_states, 0), get_channelType_if(power_up_states, 0), get_channelNames_if(power_up_states, 1), get_state_if(power_up_states, 1), get_channelType_if(power_up_states, 1), get_channelNames_if(power_up_states, 2), get_state_if(power_up_states, 2), get_channelType_if(power_up_states, 2), get_channelNames_if(power_up_states, 3), get_state_if(power_up_states, 3), get_channelType_if(power_up_states, 3), get_channelNames_if(power_up_states, 4), get_state_if(power_up_states, 4), get_channelType_if(power_up_states, 4), get_channelNames_if(power_up_states, 5), get_state_if(power_up_states, 5), get_channelType_if(power_up_states, 5), get_channelNames_if(power_up_states, 6), get_state_if(power_up_states, 6), get_channelType_if(power_up_states, 6), get_channelNames_if(power_up_states, 7), get_state_if(power_up_states, 7), get_channelType_if(power_up_states, 7), get_channelNames_if(power_up_states, 8), get_state_if(power_up_states, 8), get_channelType_if(power_up_states, 8), get_channelNames_if(power_up_states, 9), get_state_if(power_up_states, 9), get_channelType_if(power_up_states, 9), get_channelNames_if(power_up_states, 10), get_state_if(power_up_states, 10), get_channelType_if(power_up_states, 10), get_channelNames_if(power_up_states, 11), get_state_if(power_up_states, 11), get_channelType_if(power_up_states, 11), get_channelNames_if(power_up_states, 12), get_state_if(power_up_states, 12), get_channelType_if(power_up_states, 12), get_channelNames_if(power_up_states, 13), get_state_if(power_up_states, 13), get_channelType_if(power_up_states, 13), get_channelNames_if(power_up_states, 14), get_state_if(power_up_states, 14), get_channelType_if(power_up_states, 14), get_channelNames_if(power_up_states, 15), get_state_if(power_up_states, 15), get_channelType_if(power_up_states, 15), get_channelNames_if(power_up_states, 16), get_state_if(power_up_states, 16), get_channelType_if(power_up_states, 16), get_channelNames_if(power_up_states, 17), get_state_if(power_up_states, 17), get_channelType_if(power_up_states, 17), get_channelNames_if(power_up_states, 18), get_state_if(power_up_states, 18), get_channelType_if(power_up_states, 18), get_channelNames_if(power_up_states, 19), get_state_if(power_up_states, 19), get_channelType_if(power_up_states, 19), get_channelNames_if(power_up_states, 20), get_state_if(power_up_states, 20), get_channelType_if(power_up_states, 20), get_channelNames_if(power_up_states, 21), get_state_if(power_up_states, 21), get_channelType_if(power_up_states, 21), get_channelNames_if(power_up_states, 22), get_state_if(power_up_states, 22), get_channelType_if(power_up_states, 22), get_channelNames_if(power_up_states, 23), get_state_if(power_up_states, 23), get_channelType_if(power_up_states, 23), get_channelNames_if(power_up_states, 24), get_state_if(power_up_states, 24), get_channelType_if(power_up_states, 24), get_channelNames_if(power_up_states, 25), get_state_if(power_up_states, 25), get_channelType_if(power_up_states, 25), get_channelNames_if(power_up_states, 26), get_state_if(power_up_states, 26), get_channelType_if(power_up_states, 26), get_channelNames_if(power_up_states, 27), get_state_if(power_up_states, 27), get_channelType_if(power_up_states, 27), get_channelNames_if(power_up_states, 28), get_state_if(power_up_states, 28), get_channelType_if(power_up_states, 28), get_channelNames_if(power_up_states, 29), get_state_if(power_up_states, 29), get_channelType_if(power_up_states, 29), get_channelNames_if(power_up_states, 30), get_state_if(power_up_states, 30), get_channelType_if(power_up_states, 30), get_channelNames_if(power_up_states, 31), get_state_if(power_up_states, 31), get_channelType_if(power_up_states, 31), get_channelNames_if(power_up_states, 32), get_state_if(power_up_states, 32), get_channelType_if(power_up_states, 32), get_channelNames_if(power_up_states, 33), get_state_if(power_up_states, 33), get_channelType_if(power_up_states, 33), get_channelNames_if(power_up_states, 34), get_state_if(power_up_states, 34), get_channelType_if(power_up_states, 34), get_channelNames_if(power_up_states, 35), get_state_if(power_up_states, 35), get_channelType_if(power_up_states, 35), get_channelNames_if(power_up_states, 36), get_state_if(power_up_states, 36), get_channelType_if(power_up_states, 36), get_channelNames_if(power_up_states, 37), get_state_if(power_up_states, 37), get_channelType_if(power_up_states, 37), get_channelNames_if(power_up_states, 38), get_state_if(power_up_states, 38), get_channelType_if(power_up_states, 38), get_channelNames_if(power_up_states, 39), get_state_if(power_up_states, 39), get_channelType_if(power_up_states, 39), get_channelNames_if(power_up_states, 40), get_state_if(power_up_states, 40), get_channelType_if(power_up_states, 40), get_channelNames_if(power_up_states, 41), get_state_if(power_up_states, 41), get_channelType_if(power_up_states, 41), get_channelNames_if(power_up_states, 42), get_state_if(power_up_states, 42), get_channelType_if(power_up_states, 42), get_channelNames_if(power_up_states, 43), get_state_if(power_up_states, 43), get_channelType_if(power_up_states, 43), get_channelNames_if(power_up_states, 44), get_state_if(power_up_states, 44), get_channelType_if(power_up_states, 44), get_channelNames_if(power_up_states, 45), get_state_if(power_up_states, 45), get_channelType_if(power_up_states, 45), get_channelNames_if(power_up_states, 46), get_state_if(power_up_states, 46), get_channelType_if(power_up_states, 46), get_channelNames_if(power_up_states, 47), get_state_if(power_up_states, 47), get_channelType_if(power_up_states, 47), get_channelNames_if(power_up_states, 48), get_state_if(power_up_states, 48), get_channelType_if(power_up_states, 48), get_channelNames_if(power_up_states, 49), get_state_if(power_up_states, 49), get_channelType_if(power_up_states, 49), get_channelNames_if(power_up_states, 50), get_state_if(power_up_states, 50), get_channelType_if(power_up_states, 50), get_channelNames_if(power_up_states, 51), get_state_if(power_up_states, 51), get_channelType_if(power_up_states, 51), get_channelNames_if(power_up_states, 52), get_state_if(power_up_states, 52), get_channelType_if(power_up_states, 52), get_channelNames_if(power_up_states, 53), get_state_if(power_up_states, 53), get_channelType_if(power_up_states, 53), get_channelNames_if(power_up_states, 54), get_state_if(power_up_states, 54), get_channelType_if(power_up_states, 54), get_channelNames_if(power_up_states, 55), get_state_if(power_up_states, 55), get_channelType_if(power_up_states, 55), get_channelNames_if(power_up_states, 56), get_state_if(power_up_states, 56), get_channelType_if(power_up_states, 56), get_channelNames_if(power_up_states, 57), get_state_if(power_up_states, 57), get_channelType_if(power_up_states, 57), get_channelNames_if(power_up_states, 58), get_state_if(power_up_states, 58), get_channelType_if(power_up_states, 58), get_channelNames_if(power_up_states, 59), get_state_if(power_up_states, 59), get_channelType_if(power_up_states, 59), get_channelNames_if(power_up_states, 60), get_state_if(power_up_states, 60), get_channelType_if(power_up_states, 60), get_channelNames_if(power_up_states, 61), get_state_if(power_up_states, 61), get_channelType_if(power_up_states, 61), get_channelNames_if(power_up_states, 62), get_state_if(power_up_states, 62), get_channelType_if(power_up_states, 62), get_channelNames_if(power_up_states, 63), get_state_if(power_up_states, 63), get_channelType_if(power_up_states, 63), get_channelNames_if(power_up_states, 64), get_state_if(power_up_states, 64), get_channelType_if(power_up_states, 64), get_channelNames_if(power_up_states, 65), get_state_if(power_up_states, 65), get_channelType_if(power_up_states, 65), get_channelNames_if(power_up_states, 66), get_state_if(power_up_states, 66), get_channelType_if(power_up_states, 66), get_channelNames_if(power_up_states, 67), get_state_if(power_up_states, 67), get_channelType_if(power_up_states, 67), get_channelNames_if(power_up_states, 68), get_state_if(power_up_states, 68), get_channelType_if(power_up_states, 68), get_channelNames_if(power_up_states, 69), get_state_if(power_up_states, 69), get_channelType_if(power_up_states, 69), get_channelNames_if(power_up_states, 70), get_state_if(power_up_states, 70), get_channelType_if(power_up_states, 70), get_channelNames_if(power_up_states, 71), get_state_if(power_up_states, 71), get_channelType_if(power_up_states, 71), get_channelNames_if(power_up_states, 72), get_state_if(power_up_states, 72), get_channelType_if(power_up_states, 72), get_channelNames_if(power_up_states, 73), get_state_if(power_up_states, 73), get_channelType_if(power_up_states, 73), get_channelNames_if(power_up_states, 74), get_state_if(power_up_states, 74), get_channelType_if(power_up_states, 74), get_channelNames_if(power_up_states, 75), get_state_if(power_up_states, 75), get_channelType_if(power_up_states, 75), get_channelNames_if(power_up_states, 76), get_state_if(power_up_states, 76), get_channelType_if(power_up_states, 76), get_channelNames_if(power_up_states, 77), get_state_if(power_up_states, 77), get_channelType_if(power_up_states, 77), get_channelNames_if(power_up_states, 78), get_state_if(power_up_states, 78), get_channelType_if(power_up_states, 78), get_channelNames_if(power_up_states, 79), get_state_if(power_up_states, 79), get_channelType_if(power_up_states, 79), get_channelNames_if(power_up_states, 80), get_state_if(power_up_states, 80), get_channelType_if(power_up_states, 80), get_channelNames_if(power_up_states, 81), get_state_if(power_up_states, 81), get_channelType_if(power_up_states, 81), get_channelNames_if(power_up_states, 82), get_state_if(power_up_states, 82), get_channelType_if(power_up_states, 82), get_channelNames_if(power_up_states, 83), get_state_if(power_up_states, 83), get_channelType_if(power_up_states, 83), get_channelNames_if(power_up_states, 84), get_state_if(power_up_states, 84), get_channelType_if(power_up_states, 84), get_channelNames_if(power_up_states, 85), get_state_if(power_up_states, 85), get_channelType_if(power_up_states, 85), get_channelNames_if(power_up_states, 86), get_state_if(power_up_states, 86), get_channelType_if(power_up_states, 86), get_channelNames_if(power_up_states, 87), get_state_if(power_up_states, 87), get_channelType_if(power_up_states, 87), get_channelNames_if(power_up_states, 88), get_state_if(power_up_states, 88), get_channelType_if(power_up_states, 88), get_channelNames_if(power_up_states, 89), get_state_if(power_up_states, 89), get_channelType_if(power_up_states, 89), get_channelNames_if(power_up_states, 90), get_state_if(power_up_states, 90), get_channelType_if(power_up_states, 90), get_channelNames_if(power_up_states, 91), get_state_if(power_up_states, 91), get_channelType_if(power_up_states, 91), get_channelNames_if(power_up_states, 92), get_state_if(power_up_states, 92), get_channelType_if(power_up_states, 92), get_channelNames_if(power_up_states, 93), get_state_if(power_up_states, 93), get_channelType_if(power_up_states, 93), get_channelNames_if(power_up_states, 94), get_state_if(power_up_states, 94), get_channelType_if(power_up_states, 94), get_channelNames_if(power_up_states, 95), get_state_if(power_up_states, 95), get_channelType_if(power_up_states, 95), get_channelNames_if(power_up_states, 96), get_state_if(power_up_states, 96), get_channelType_if(power_up_states, 96)); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetCalInfoAttributeUInt32(::grpc::ServerContext* context, const SetCalInfoAttributeUInt32Request* request, SetCalInfoAttributeUInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetCalInfoAttributeUInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::CalibrationInfoUInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetCalInfoAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::CalibrationInfoUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetCalInfoAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetAnalogPowerUpStatesWithOutputType(::grpc::ServerContext* context, const SetAnalogPowerUpStatesWithOutputTypeRequest* request, SetAnalogPowerUpStatesWithOutputTypeResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto channel_names_mbcs = convert_from_grpc(request->channel_names()); - auto channel_names = channel_names_mbcs.c_str(); - auto state_array = const_cast(request->state_array().data()); - auto channel_type_array_vector = std::vector(); - channel_type_array_vector.reserve(request->channel_type_array().size()); - std::transform( - request->channel_type_array().begin(), - request->channel_type_array().end(), - std::back_inserter(channel_type_array_vector), - [](auto x) { return x; }); - auto channel_type_array = channel_type_array_vector.data(); + uInt32 value = request->value(); + auto status = library_->SetCalInfoAttributeUInt32(device_name, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetChanAttributeBool(::grpc::ServerContext* context, const SetChanAttributeBoolRequest* request, SetChanAttributeBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto channel_mbcs = convert_from_grpc(request->channel()); + auto channel = channel_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetChanAttributeBoolRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ChannelBoolAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetChanAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ChannelBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetChanAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } - auto array_size_determine_from_sizes = std::array{ - request->state_array_size(), - request->channel_type_array_size()}; - const auto array_size_size_calculation = calculate_linked_array_size(array_size_determine_from_sizes, false); + bool32 value = request->value(); + auto status = library_->SetChanAttributeBool(task, channel, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetChanAttributeDouble(::grpc::ServerContext* context, const SetChanAttributeDoubleRequest* request, SetChanAttributeDoubleResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto channel_mbcs = convert_from_grpc(request->channel()); + auto channel = channel_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetChanAttributeDoubleRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ChannelDoubleAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetChanAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ChannelDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetChanAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } - if (array_size_size_calculation.match_state == MatchState::MISMATCH) { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The sizes of linked repeated fields [state_array, channel_type_array] do not match"); + float64 value = request->value(); + auto status = library_->SetChanAttributeDouble(task, channel, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; } - auto array_size = array_size_size_calculation.size; + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetChanAttributeDoubleArray(::grpc::ServerContext* context, const SetChanAttributeDoubleArrayRequest* request, SetChanAttributeDoubleArrayResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto channel_mbcs = convert_from_grpc(request->channel()); + auto channel = channel_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetChanAttributeDoubleArrayRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ChannelDoubleArrayAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetChanAttributeDoubleArrayRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ChannelDoubleArrayAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetChanAttributeDoubleArrayRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } - auto status = library_->SetAnalogPowerUpStatesWithOutputType(channel_names, state_array, channel_type_array, array_size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + auto value = const_cast(request->value().data()); + uInt32 size = static_cast(request->value().size()); + auto status = library_->SetChanAttributeDoubleArray(task, channel, attribute, value, size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetChanAttributeInt32(::grpc::ServerContext* context, const SetChanAttributeInt32Request* request, SetChanAttributeInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto channel_mbcs = convert_from_grpc(request->channel()); + auto channel = channel_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetChanAttributeInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ChannelInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetChanAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ChannelInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetChanAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetArmStartTrigTrigWhen(::grpc::ServerContext* context, const SetArmStartTrigTrigWhenRequest* request, SetArmStartTrigTrigWhenResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto data = convert_from_grpc(request->data()); - auto status = library_->SetArmStartTrigTrigWhen(task, data); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + int32 value; + switch (request->value_enum_case()) { + case nidaqmx_grpc::SetChanAttributeInt32Request::ValueEnumCase::kValue: { + value = static_cast(request->value()); + break; + } + case nidaqmx_grpc::SetChanAttributeInt32Request::ValueEnumCase::kValueRaw: { + value = static_cast(request->value_raw()); + break; + } + case nidaqmx_grpc::SetChanAttributeInt32Request::ValueEnumCase::VALUE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for value was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetBufferAttributeUInt32(::grpc::ServerContext* context, const SetBufferAttributeUInt32Request* request, SetBufferAttributeUInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetBufferAttributeUInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::BufferUInt32Attribute_IsValid(attribute) ? attribute : 0; - break; + auto status = library_->SetChanAttributeInt32(task, channel, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - case nidaqmx_grpc::SetBufferAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::BufferUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetChanAttributeString(::grpc::ServerContext* context, const SetChanAttributeStringRequest* request, SetChanAttributeStringResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto channel_mbcs = convert_from_grpc(request->channel()); + auto channel = channel_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetChanAttributeStringRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ChannelStringAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetChanAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ChannelStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetChanAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::SetBufferAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + auto value_mbcs = convert_from_grpc(request->value()); + auto value = value_mbcs.c_str(); + auto status = library_->SetChanAttributeString(task, channel, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetChanAttributeUInt32(::grpc::ServerContext* context, const SetChanAttributeUInt32Request* request, SetChanAttributeUInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto channel_mbcs = convert_from_grpc(request->channel()); + auto channel = channel_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetChanAttributeUInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ChannelUInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetChanAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ChannelUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetChanAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } - uInt32 value = request->value(); - auto status = library_->SetBufferAttributeUInt32(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + uInt32 value = request->value(); + auto status = library_->SetChanAttributeUInt32(task, channel, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetCalInfoAttributeBool(::grpc::ServerContext* context, const SetCalInfoAttributeBoolRequest* request, SetCalInfoAttributeBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetCalInfoAttributeBoolRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::CalibrationInfoBoolAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetCalInfoAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::CalibrationInfoBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetDigitalLogicFamilyPowerUpState(::grpc::ServerContext* context, const SetDigitalLogicFamilyPowerUpStateRequest* request, SetDigitalLogicFamilyPowerUpStateResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + int32 logic_family; + switch (request->logic_family_enum_case()) { + case nidaqmx_grpc::SetDigitalLogicFamilyPowerUpStateRequest::LogicFamilyEnumCase::kLogicFamily: { + logic_family = static_cast(request->logic_family()); + break; + } + case nidaqmx_grpc::SetDigitalLogicFamilyPowerUpStateRequest::LogicFamilyEnumCase::kLogicFamilyRaw: { + logic_family = static_cast(request->logic_family_raw()); + break; + } + case nidaqmx_grpc::SetDigitalLogicFamilyPowerUpStateRequest::LogicFamilyEnumCase::LOGIC_FAMILY_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for logic_family was not specified or out of range"); + break; + } } - case nidaqmx_grpc::SetCalInfoAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + auto status = library_->SetDigitalLogicFamilyPowerUpState(device_name, logic_family); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } + response->set_status(status); + return ::grpc::Status::OK; } - - bool32 value = request->value(); - auto status = library_->SetCalInfoAttributeBool(device_name, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetCalInfoAttributeDouble(::grpc::ServerContext* context, const SetCalInfoAttributeDoubleRequest* request, SetCalInfoAttributeDoubleResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetCalInfoAttributeDoubleRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::CalibrationInfoDoubleAttribute_IsValid(attribute) ? attribute : 0; - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetDigitalPowerUpStates(::grpc::ServerContext* context, const SetDigitalPowerUpStatesRequest* request, SetDigitalPowerUpStatesResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + auto get_channelNames_if = [](const google::protobuf::RepeatedPtrField& vector, int n) -> const char* { + if (vector.size() > n) { + return vector[n].channel_names().c_str(); + } + return nullptr; + }; + auto get_state_if = [](const google::protobuf::RepeatedPtrField& vector, int n) -> int32 { + if (vector.size() > n) { + return vector[n].state(); + } + return 0; + }; + auto power_up_states = request->power_up_states(); + if (power_up_states.size() == 0) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "No values for powerUpStates were specified"); } - case nidaqmx_grpc::SetCalInfoAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::CalibrationInfoDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; + if (power_up_states.size() > 96) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "More than 96 values for powerUpStates were specified"); } - case nidaqmx_grpc::SetCalInfoAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + auto status = std::static_pointer_cast(library_)->SetDigitalPowerUpStates(device_name, get_channelNames_if(power_up_states, 0), get_state_if(power_up_states, 0), get_channelNames_if(power_up_states, 1), get_state_if(power_up_states, 1), get_channelNames_if(power_up_states, 2), get_state_if(power_up_states, 2), get_channelNames_if(power_up_states, 3), get_state_if(power_up_states, 3), get_channelNames_if(power_up_states, 4), get_state_if(power_up_states, 4), get_channelNames_if(power_up_states, 5), get_state_if(power_up_states, 5), get_channelNames_if(power_up_states, 6), get_state_if(power_up_states, 6), get_channelNames_if(power_up_states, 7), get_state_if(power_up_states, 7), get_channelNames_if(power_up_states, 8), get_state_if(power_up_states, 8), get_channelNames_if(power_up_states, 9), get_state_if(power_up_states, 9), get_channelNames_if(power_up_states, 10), get_state_if(power_up_states, 10), get_channelNames_if(power_up_states, 11), get_state_if(power_up_states, 11), get_channelNames_if(power_up_states, 12), get_state_if(power_up_states, 12), get_channelNames_if(power_up_states, 13), get_state_if(power_up_states, 13), get_channelNames_if(power_up_states, 14), get_state_if(power_up_states, 14), get_channelNames_if(power_up_states, 15), get_state_if(power_up_states, 15), get_channelNames_if(power_up_states, 16), get_state_if(power_up_states, 16), get_channelNames_if(power_up_states, 17), get_state_if(power_up_states, 17), get_channelNames_if(power_up_states, 18), get_state_if(power_up_states, 18), get_channelNames_if(power_up_states, 19), get_state_if(power_up_states, 19), get_channelNames_if(power_up_states, 20), get_state_if(power_up_states, 20), get_channelNames_if(power_up_states, 21), get_state_if(power_up_states, 21), get_channelNames_if(power_up_states, 22), get_state_if(power_up_states, 22), get_channelNames_if(power_up_states, 23), get_state_if(power_up_states, 23), get_channelNames_if(power_up_states, 24), get_state_if(power_up_states, 24), get_channelNames_if(power_up_states, 25), get_state_if(power_up_states, 25), get_channelNames_if(power_up_states, 26), get_state_if(power_up_states, 26), get_channelNames_if(power_up_states, 27), get_state_if(power_up_states, 27), get_channelNames_if(power_up_states, 28), get_state_if(power_up_states, 28), get_channelNames_if(power_up_states, 29), get_state_if(power_up_states, 29), get_channelNames_if(power_up_states, 30), get_state_if(power_up_states, 30), get_channelNames_if(power_up_states, 31), get_state_if(power_up_states, 31), get_channelNames_if(power_up_states, 32), get_state_if(power_up_states, 32), get_channelNames_if(power_up_states, 33), get_state_if(power_up_states, 33), get_channelNames_if(power_up_states, 34), get_state_if(power_up_states, 34), get_channelNames_if(power_up_states, 35), get_state_if(power_up_states, 35), get_channelNames_if(power_up_states, 36), get_state_if(power_up_states, 36), get_channelNames_if(power_up_states, 37), get_state_if(power_up_states, 37), get_channelNames_if(power_up_states, 38), get_state_if(power_up_states, 38), get_channelNames_if(power_up_states, 39), get_state_if(power_up_states, 39), get_channelNames_if(power_up_states, 40), get_state_if(power_up_states, 40), get_channelNames_if(power_up_states, 41), get_state_if(power_up_states, 41), get_channelNames_if(power_up_states, 42), get_state_if(power_up_states, 42), get_channelNames_if(power_up_states, 43), get_state_if(power_up_states, 43), get_channelNames_if(power_up_states, 44), get_state_if(power_up_states, 44), get_channelNames_if(power_up_states, 45), get_state_if(power_up_states, 45), get_channelNames_if(power_up_states, 46), get_state_if(power_up_states, 46), get_channelNames_if(power_up_states, 47), get_state_if(power_up_states, 47), get_channelNames_if(power_up_states, 48), get_state_if(power_up_states, 48), get_channelNames_if(power_up_states, 49), get_state_if(power_up_states, 49), get_channelNames_if(power_up_states, 50), get_state_if(power_up_states, 50), get_channelNames_if(power_up_states, 51), get_state_if(power_up_states, 51), get_channelNames_if(power_up_states, 52), get_state_if(power_up_states, 52), get_channelNames_if(power_up_states, 53), get_state_if(power_up_states, 53), get_channelNames_if(power_up_states, 54), get_state_if(power_up_states, 54), get_channelNames_if(power_up_states, 55), get_state_if(power_up_states, 55), get_channelNames_if(power_up_states, 56), get_state_if(power_up_states, 56), get_channelNames_if(power_up_states, 57), get_state_if(power_up_states, 57), get_channelNames_if(power_up_states, 58), get_state_if(power_up_states, 58), get_channelNames_if(power_up_states, 59), get_state_if(power_up_states, 59), get_channelNames_if(power_up_states, 60), get_state_if(power_up_states, 60), get_channelNames_if(power_up_states, 61), get_state_if(power_up_states, 61), get_channelNames_if(power_up_states, 62), get_state_if(power_up_states, 62), get_channelNames_if(power_up_states, 63), get_state_if(power_up_states, 63), get_channelNames_if(power_up_states, 64), get_state_if(power_up_states, 64), get_channelNames_if(power_up_states, 65), get_state_if(power_up_states, 65), get_channelNames_if(power_up_states, 66), get_state_if(power_up_states, 66), get_channelNames_if(power_up_states, 67), get_state_if(power_up_states, 67), get_channelNames_if(power_up_states, 68), get_state_if(power_up_states, 68), get_channelNames_if(power_up_states, 69), get_state_if(power_up_states, 69), get_channelNames_if(power_up_states, 70), get_state_if(power_up_states, 70), get_channelNames_if(power_up_states, 71), get_state_if(power_up_states, 71), get_channelNames_if(power_up_states, 72), get_state_if(power_up_states, 72), get_channelNames_if(power_up_states, 73), get_state_if(power_up_states, 73), get_channelNames_if(power_up_states, 74), get_state_if(power_up_states, 74), get_channelNames_if(power_up_states, 75), get_state_if(power_up_states, 75), get_channelNames_if(power_up_states, 76), get_state_if(power_up_states, 76), get_channelNames_if(power_up_states, 77), get_state_if(power_up_states, 77), get_channelNames_if(power_up_states, 78), get_state_if(power_up_states, 78), get_channelNames_if(power_up_states, 79), get_state_if(power_up_states, 79), get_channelNames_if(power_up_states, 80), get_state_if(power_up_states, 80), get_channelNames_if(power_up_states, 81), get_state_if(power_up_states, 81), get_channelNames_if(power_up_states, 82), get_state_if(power_up_states, 82), get_channelNames_if(power_up_states, 83), get_state_if(power_up_states, 83), get_channelNames_if(power_up_states, 84), get_state_if(power_up_states, 84), get_channelNames_if(power_up_states, 85), get_state_if(power_up_states, 85), get_channelNames_if(power_up_states, 86), get_state_if(power_up_states, 86), get_channelNames_if(power_up_states, 87), get_state_if(power_up_states, 87), get_channelNames_if(power_up_states, 88), get_state_if(power_up_states, 88), get_channelNames_if(power_up_states, 89), get_state_if(power_up_states, 89), get_channelNames_if(power_up_states, 90), get_state_if(power_up_states, 90), get_channelNames_if(power_up_states, 91), get_state_if(power_up_states, 91), get_channelNames_if(power_up_states, 92), get_state_if(power_up_states, 92), get_channelNames_if(power_up_states, 93), get_state_if(power_up_states, 93), get_channelNames_if(power_up_states, 94), get_state_if(power_up_states, 94), get_channelNames_if(power_up_states, 95), get_state_if(power_up_states, 95), get_channelNames_if(power_up_states, 96), get_state_if(power_up_states, 96)); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } + response->set_status(status); + return ::grpc::Status::OK; } - - float64 value = request->value(); - auto status = library_->SetCalInfoAttributeDouble(device_name, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetCalInfoAttributeString(::grpc::ServerContext* context, const SetCalInfoAttributeStringRequest* request, SetCalInfoAttributeStringResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetCalInfoAttributeStringRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::CalibrationInfoStringAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetCalInfoAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::CalibrationInfoStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetCalInfoAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - auto value_mbcs = convert_from_grpc(request->value()); - auto value = value_mbcs.c_str(); - auto status = library_->SetCalInfoAttributeString(device_name, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetCalInfoAttributeUInt32(::grpc::ServerContext* context, const SetCalInfoAttributeUInt32Request* request, SetCalInfoAttributeUInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetCalInfoAttributeUInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::CalibrationInfoUInt32Attribute_IsValid(attribute) ? attribute : 0; - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetDigitalPullUpPullDownStates(::grpc::ServerContext* context, const SetDigitalPullUpPullDownStatesRequest* request, SetDigitalPullUpPullDownStatesResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + auto get_channelNames_if = [](const google::protobuf::RepeatedPtrField& vector, int n) -> const char* { + if (vector.size() > n) { + return vector[n].channel_names().c_str(); + } + return nullptr; + }; + auto get_state_if = [](const google::protobuf::RepeatedPtrField& vector, int n) -> int32 { + if (vector.size() > n) { + return vector[n].state(); + } + return 0; + }; + auto pull_up_pull_down_states = request->pull_up_pull_down_states(); + if (pull_up_pull_down_states.size() == 0) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "No values for pullUpPullDownStates were specified"); } - case nidaqmx_grpc::SetCalInfoAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::CalibrationInfoUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; + if (pull_up_pull_down_states.size() > 96) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "More than 96 values for pullUpPullDownStates were specified"); } - case nidaqmx_grpc::SetCalInfoAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + auto status = std::static_pointer_cast(library_)->SetDigitalPullUpPullDownStates(device_name, get_channelNames_if(pull_up_pull_down_states, 0), get_state_if(pull_up_pull_down_states, 0), get_channelNames_if(pull_up_pull_down_states, 1), get_state_if(pull_up_pull_down_states, 1), get_channelNames_if(pull_up_pull_down_states, 2), get_state_if(pull_up_pull_down_states, 2), get_channelNames_if(pull_up_pull_down_states, 3), get_state_if(pull_up_pull_down_states, 3), get_channelNames_if(pull_up_pull_down_states, 4), get_state_if(pull_up_pull_down_states, 4), get_channelNames_if(pull_up_pull_down_states, 5), get_state_if(pull_up_pull_down_states, 5), get_channelNames_if(pull_up_pull_down_states, 6), get_state_if(pull_up_pull_down_states, 6), get_channelNames_if(pull_up_pull_down_states, 7), get_state_if(pull_up_pull_down_states, 7), get_channelNames_if(pull_up_pull_down_states, 8), get_state_if(pull_up_pull_down_states, 8), get_channelNames_if(pull_up_pull_down_states, 9), get_state_if(pull_up_pull_down_states, 9), get_channelNames_if(pull_up_pull_down_states, 10), get_state_if(pull_up_pull_down_states, 10), get_channelNames_if(pull_up_pull_down_states, 11), get_state_if(pull_up_pull_down_states, 11), get_channelNames_if(pull_up_pull_down_states, 12), get_state_if(pull_up_pull_down_states, 12), get_channelNames_if(pull_up_pull_down_states, 13), get_state_if(pull_up_pull_down_states, 13), get_channelNames_if(pull_up_pull_down_states, 14), get_state_if(pull_up_pull_down_states, 14), get_channelNames_if(pull_up_pull_down_states, 15), get_state_if(pull_up_pull_down_states, 15), get_channelNames_if(pull_up_pull_down_states, 16), get_state_if(pull_up_pull_down_states, 16), get_channelNames_if(pull_up_pull_down_states, 17), get_state_if(pull_up_pull_down_states, 17), get_channelNames_if(pull_up_pull_down_states, 18), get_state_if(pull_up_pull_down_states, 18), get_channelNames_if(pull_up_pull_down_states, 19), get_state_if(pull_up_pull_down_states, 19), get_channelNames_if(pull_up_pull_down_states, 20), get_state_if(pull_up_pull_down_states, 20), get_channelNames_if(pull_up_pull_down_states, 21), get_state_if(pull_up_pull_down_states, 21), get_channelNames_if(pull_up_pull_down_states, 22), get_state_if(pull_up_pull_down_states, 22), get_channelNames_if(pull_up_pull_down_states, 23), get_state_if(pull_up_pull_down_states, 23), get_channelNames_if(pull_up_pull_down_states, 24), get_state_if(pull_up_pull_down_states, 24), get_channelNames_if(pull_up_pull_down_states, 25), get_state_if(pull_up_pull_down_states, 25), get_channelNames_if(pull_up_pull_down_states, 26), get_state_if(pull_up_pull_down_states, 26), get_channelNames_if(pull_up_pull_down_states, 27), get_state_if(pull_up_pull_down_states, 27), get_channelNames_if(pull_up_pull_down_states, 28), get_state_if(pull_up_pull_down_states, 28), get_channelNames_if(pull_up_pull_down_states, 29), get_state_if(pull_up_pull_down_states, 29), get_channelNames_if(pull_up_pull_down_states, 30), get_state_if(pull_up_pull_down_states, 30), get_channelNames_if(pull_up_pull_down_states, 31), get_state_if(pull_up_pull_down_states, 31), get_channelNames_if(pull_up_pull_down_states, 32), get_state_if(pull_up_pull_down_states, 32), get_channelNames_if(pull_up_pull_down_states, 33), get_state_if(pull_up_pull_down_states, 33), get_channelNames_if(pull_up_pull_down_states, 34), get_state_if(pull_up_pull_down_states, 34), get_channelNames_if(pull_up_pull_down_states, 35), get_state_if(pull_up_pull_down_states, 35), get_channelNames_if(pull_up_pull_down_states, 36), get_state_if(pull_up_pull_down_states, 36), get_channelNames_if(pull_up_pull_down_states, 37), get_state_if(pull_up_pull_down_states, 37), get_channelNames_if(pull_up_pull_down_states, 38), get_state_if(pull_up_pull_down_states, 38), get_channelNames_if(pull_up_pull_down_states, 39), get_state_if(pull_up_pull_down_states, 39), get_channelNames_if(pull_up_pull_down_states, 40), get_state_if(pull_up_pull_down_states, 40), get_channelNames_if(pull_up_pull_down_states, 41), get_state_if(pull_up_pull_down_states, 41), get_channelNames_if(pull_up_pull_down_states, 42), get_state_if(pull_up_pull_down_states, 42), get_channelNames_if(pull_up_pull_down_states, 43), get_state_if(pull_up_pull_down_states, 43), get_channelNames_if(pull_up_pull_down_states, 44), get_state_if(pull_up_pull_down_states, 44), get_channelNames_if(pull_up_pull_down_states, 45), get_state_if(pull_up_pull_down_states, 45), get_channelNames_if(pull_up_pull_down_states, 46), get_state_if(pull_up_pull_down_states, 46), get_channelNames_if(pull_up_pull_down_states, 47), get_state_if(pull_up_pull_down_states, 47), get_channelNames_if(pull_up_pull_down_states, 48), get_state_if(pull_up_pull_down_states, 48), get_channelNames_if(pull_up_pull_down_states, 49), get_state_if(pull_up_pull_down_states, 49), get_channelNames_if(pull_up_pull_down_states, 50), get_state_if(pull_up_pull_down_states, 50), get_channelNames_if(pull_up_pull_down_states, 51), get_state_if(pull_up_pull_down_states, 51), get_channelNames_if(pull_up_pull_down_states, 52), get_state_if(pull_up_pull_down_states, 52), get_channelNames_if(pull_up_pull_down_states, 53), get_state_if(pull_up_pull_down_states, 53), get_channelNames_if(pull_up_pull_down_states, 54), get_state_if(pull_up_pull_down_states, 54), get_channelNames_if(pull_up_pull_down_states, 55), get_state_if(pull_up_pull_down_states, 55), get_channelNames_if(pull_up_pull_down_states, 56), get_state_if(pull_up_pull_down_states, 56), get_channelNames_if(pull_up_pull_down_states, 57), get_state_if(pull_up_pull_down_states, 57), get_channelNames_if(pull_up_pull_down_states, 58), get_state_if(pull_up_pull_down_states, 58), get_channelNames_if(pull_up_pull_down_states, 59), get_state_if(pull_up_pull_down_states, 59), get_channelNames_if(pull_up_pull_down_states, 60), get_state_if(pull_up_pull_down_states, 60), get_channelNames_if(pull_up_pull_down_states, 61), get_state_if(pull_up_pull_down_states, 61), get_channelNames_if(pull_up_pull_down_states, 62), get_state_if(pull_up_pull_down_states, 62), get_channelNames_if(pull_up_pull_down_states, 63), get_state_if(pull_up_pull_down_states, 63), get_channelNames_if(pull_up_pull_down_states, 64), get_state_if(pull_up_pull_down_states, 64), get_channelNames_if(pull_up_pull_down_states, 65), get_state_if(pull_up_pull_down_states, 65), get_channelNames_if(pull_up_pull_down_states, 66), get_state_if(pull_up_pull_down_states, 66), get_channelNames_if(pull_up_pull_down_states, 67), get_state_if(pull_up_pull_down_states, 67), get_channelNames_if(pull_up_pull_down_states, 68), get_state_if(pull_up_pull_down_states, 68), get_channelNames_if(pull_up_pull_down_states, 69), get_state_if(pull_up_pull_down_states, 69), get_channelNames_if(pull_up_pull_down_states, 70), get_state_if(pull_up_pull_down_states, 70), get_channelNames_if(pull_up_pull_down_states, 71), get_state_if(pull_up_pull_down_states, 71), get_channelNames_if(pull_up_pull_down_states, 72), get_state_if(pull_up_pull_down_states, 72), get_channelNames_if(pull_up_pull_down_states, 73), get_state_if(pull_up_pull_down_states, 73), get_channelNames_if(pull_up_pull_down_states, 74), get_state_if(pull_up_pull_down_states, 74), get_channelNames_if(pull_up_pull_down_states, 75), get_state_if(pull_up_pull_down_states, 75), get_channelNames_if(pull_up_pull_down_states, 76), get_state_if(pull_up_pull_down_states, 76), get_channelNames_if(pull_up_pull_down_states, 77), get_state_if(pull_up_pull_down_states, 77), get_channelNames_if(pull_up_pull_down_states, 78), get_state_if(pull_up_pull_down_states, 78), get_channelNames_if(pull_up_pull_down_states, 79), get_state_if(pull_up_pull_down_states, 79), get_channelNames_if(pull_up_pull_down_states, 80), get_state_if(pull_up_pull_down_states, 80), get_channelNames_if(pull_up_pull_down_states, 81), get_state_if(pull_up_pull_down_states, 81), get_channelNames_if(pull_up_pull_down_states, 82), get_state_if(pull_up_pull_down_states, 82), get_channelNames_if(pull_up_pull_down_states, 83), get_state_if(pull_up_pull_down_states, 83), get_channelNames_if(pull_up_pull_down_states, 84), get_state_if(pull_up_pull_down_states, 84), get_channelNames_if(pull_up_pull_down_states, 85), get_state_if(pull_up_pull_down_states, 85), get_channelNames_if(pull_up_pull_down_states, 86), get_state_if(pull_up_pull_down_states, 86), get_channelNames_if(pull_up_pull_down_states, 87), get_state_if(pull_up_pull_down_states, 87), get_channelNames_if(pull_up_pull_down_states, 88), get_state_if(pull_up_pull_down_states, 88), get_channelNames_if(pull_up_pull_down_states, 89), get_state_if(pull_up_pull_down_states, 89), get_channelNames_if(pull_up_pull_down_states, 90), get_state_if(pull_up_pull_down_states, 90), get_channelNames_if(pull_up_pull_down_states, 91), get_state_if(pull_up_pull_down_states, 91), get_channelNames_if(pull_up_pull_down_states, 92), get_state_if(pull_up_pull_down_states, 92), get_channelNames_if(pull_up_pull_down_states, 93), get_state_if(pull_up_pull_down_states, 93), get_channelNames_if(pull_up_pull_down_states, 94), get_state_if(pull_up_pull_down_states, 94), get_channelNames_if(pull_up_pull_down_states, 95), get_state_if(pull_up_pull_down_states, 95), get_channelNames_if(pull_up_pull_down_states, 96), get_state_if(pull_up_pull_down_states, 96)); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } + response->set_status(status); + return ::grpc::Status::OK; } - - uInt32 value = request->value(); - auto status = library_->SetCalInfoAttributeUInt32(device_name, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetChanAttributeBool(::grpc::ServerContext* context, const SetChanAttributeBoolRequest* request, SetChanAttributeBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto channel_mbcs = convert_from_grpc(request->channel()); - auto channel = channel_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetChanAttributeBoolRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ChannelBoolAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetChanAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ChannelBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetChanAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - bool32 value = request->value(); - auto status = library_->SetChanAttributeBool(task, channel, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetChanAttributeDouble(::grpc::ServerContext* context, const SetChanAttributeDoubleRequest* request, SetChanAttributeDoubleResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto channel_mbcs = convert_from_grpc(request->channel()); - auto channel = channel_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetChanAttributeDoubleRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ChannelDoubleAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetChanAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ChannelDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetChanAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - float64 value = request->value(); - auto status = library_->SetChanAttributeDouble(task, channel, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetChanAttributeDoubleArray(::grpc::ServerContext* context, const SetChanAttributeDoubleArrayRequest* request, SetChanAttributeDoubleArrayResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto channel_mbcs = convert_from_grpc(request->channel()); - auto channel = channel_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetChanAttributeDoubleArrayRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ChannelDoubleArrayAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetChanAttributeDoubleArrayRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ChannelDoubleArrayAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetChanAttributeDoubleArrayRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - auto value = const_cast(request->value().data()); - uInt32 size = static_cast(request->value().size()); - auto status = library_->SetChanAttributeDoubleArray(task, channel, attribute, value, size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetChanAttributeInt32(::grpc::ServerContext* context, const SetChanAttributeInt32Request* request, SetChanAttributeInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto channel_mbcs = convert_from_grpc(request->channel()); - auto channel = channel_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetChanAttributeInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ChannelInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetChanAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ChannelInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetChanAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetExportedSignalAttributeBool(::grpc::ServerContext* context, const SetExportedSignalAttributeBoolRequest* request, SetExportedSignalAttributeBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - - int32 value; - switch (request->value_enum_case()) { - case nidaqmx_grpc::SetChanAttributeInt32Request::ValueEnumCase::kValue: { - value = static_cast(request->value()); - break; - } - case nidaqmx_grpc::SetChanAttributeInt32Request::ValueEnumCase::kValueRaw: { - value = static_cast(request->value_raw()); - break; + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetExportedSignalAttributeBoolRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ExportSignalBoolAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetExportedSignalAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ExportSignalBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetExportedSignalAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::SetChanAttributeInt32Request::ValueEnumCase::VALUE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for value was not specified or out of range"); - break; + + bool32 value = request->value(); + auto status = library_->SetExportedSignalAttributeBool(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - auto status = library_->SetChanAttributeInt32(task, channel, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetChanAttributeString(::grpc::ServerContext* context, const SetChanAttributeStringRequest* request, SetChanAttributeStringResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto channel_mbcs = convert_from_grpc(request->channel()); - auto channel = channel_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetChanAttributeStringRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ChannelStringAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetChanAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ChannelStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetChanAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - auto value_mbcs = convert_from_grpc(request->value()); - auto value = value_mbcs.c_str(); - auto status = library_->SetChanAttributeString(task, channel, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetExportedSignalAttributeDouble(::grpc::ServerContext* context, const SetExportedSignalAttributeDoubleRequest* request, SetExportedSignalAttributeDoubleResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetExportedSignalAttributeDoubleRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ExportSignalDoubleAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetExportedSignalAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ExportSignalDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetExportedSignalAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetChanAttributeUInt32(::grpc::ServerContext* context, const SetChanAttributeUInt32Request* request, SetChanAttributeUInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto channel_mbcs = convert_from_grpc(request->channel()); - auto channel = channel_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetChanAttributeUInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ChannelUInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetChanAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ChannelUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetChanAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - uInt32 value = request->value(); - auto status = library_->SetChanAttributeUInt32(task, channel, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + float64 value = request->value(); + auto status = library_->SetExportedSignalAttributeDouble(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetDigitalLogicFamilyPowerUpState(::grpc::ServerContext* context, const SetDigitalLogicFamilyPowerUpStateRequest* request, SetDigitalLogicFamilyPowerUpStateResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - int32 logic_family; - switch (request->logic_family_enum_case()) { - case nidaqmx_grpc::SetDigitalLogicFamilyPowerUpStateRequest::LogicFamilyEnumCase::kLogicFamily: { - logic_family = static_cast(request->logic_family()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetExportedSignalAttributeInt32(::grpc::ServerContext* context, const SetExportedSignalAttributeInt32Request* request, SetExportedSignalAttributeInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetExportedSignalAttributeInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ExportSignalInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetExportedSignalAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ExportSignalInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetExportedSignalAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::SetDigitalLogicFamilyPowerUpStateRequest::LogicFamilyEnumCase::kLogicFamilyRaw: { - logic_family = static_cast(request->logic_family_raw()); - break; + + int32 value; + switch (request->value_enum_case()) { + case nidaqmx_grpc::SetExportedSignalAttributeInt32Request::ValueEnumCase::kValue: { + value = static_cast(request->value()); + break; + } + case nidaqmx_grpc::SetExportedSignalAttributeInt32Request::ValueEnumCase::kValueRaw: { + value = static_cast(request->value_raw()); + break; + } + case nidaqmx_grpc::SetExportedSignalAttributeInt32Request::ValueEnumCase::VALUE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for value was not specified or out of range"); + break; + } } - case nidaqmx_grpc::SetDigitalLogicFamilyPowerUpStateRequest::LogicFamilyEnumCase::LOGIC_FAMILY_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for logic_family was not specified or out of range"); - break; + + auto status = library_->SetExportedSignalAttributeInt32(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - auto status = library_->SetDigitalLogicFamilyPowerUpState(device_name, logic_family); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetDigitalPowerUpStates(::grpc::ServerContext* context, const SetDigitalPowerUpStatesRequest* request, SetDigitalPowerUpStatesResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - auto get_channelNames_if = [](const google::protobuf::RepeatedPtrField& vector, int n) -> const char* { - if (vector.size() > n) { - return vector[n].channel_names().c_str(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetExportedSignalAttributeString(::grpc::ServerContext* context, const SetExportedSignalAttributeStringRequest* request, SetExportedSignalAttributeStringResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetExportedSignalAttributeStringRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ExportSignalStringAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetExportedSignalAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ExportSignalStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetExportedSignalAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - return nullptr; - }; - auto get_state_if = [](const google::protobuf::RepeatedPtrField& vector, int n) -> int32 { - if (vector.size() > n) { - return vector[n].state(); + + auto value_mbcs = convert_from_grpc(request->value()); + auto value = value_mbcs.c_str(); + auto status = library_->SetExportedSignalAttributeString(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - return 0; - }; - auto power_up_states = request->power_up_states(); - if (power_up_states.size() == 0) { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "No values for powerUpStates were specified"); - } - if (power_up_states.size() > 96) { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "More than 96 values for powerUpStates were specified"); + response->set_status(status); + return ::grpc::Status::OK; } - - auto status = std::static_pointer_cast(library_)->SetDigitalPowerUpStates(device_name, get_channelNames_if(power_up_states, 0), get_state_if(power_up_states, 0), get_channelNames_if(power_up_states, 1), get_state_if(power_up_states, 1), get_channelNames_if(power_up_states, 2), get_state_if(power_up_states, 2), get_channelNames_if(power_up_states, 3), get_state_if(power_up_states, 3), get_channelNames_if(power_up_states, 4), get_state_if(power_up_states, 4), get_channelNames_if(power_up_states, 5), get_state_if(power_up_states, 5), get_channelNames_if(power_up_states, 6), get_state_if(power_up_states, 6), get_channelNames_if(power_up_states, 7), get_state_if(power_up_states, 7), get_channelNames_if(power_up_states, 8), get_state_if(power_up_states, 8), get_channelNames_if(power_up_states, 9), get_state_if(power_up_states, 9), get_channelNames_if(power_up_states, 10), get_state_if(power_up_states, 10), get_channelNames_if(power_up_states, 11), get_state_if(power_up_states, 11), get_channelNames_if(power_up_states, 12), get_state_if(power_up_states, 12), get_channelNames_if(power_up_states, 13), get_state_if(power_up_states, 13), get_channelNames_if(power_up_states, 14), get_state_if(power_up_states, 14), get_channelNames_if(power_up_states, 15), get_state_if(power_up_states, 15), get_channelNames_if(power_up_states, 16), get_state_if(power_up_states, 16), get_channelNames_if(power_up_states, 17), get_state_if(power_up_states, 17), get_channelNames_if(power_up_states, 18), get_state_if(power_up_states, 18), get_channelNames_if(power_up_states, 19), get_state_if(power_up_states, 19), get_channelNames_if(power_up_states, 20), get_state_if(power_up_states, 20), get_channelNames_if(power_up_states, 21), get_state_if(power_up_states, 21), get_channelNames_if(power_up_states, 22), get_state_if(power_up_states, 22), get_channelNames_if(power_up_states, 23), get_state_if(power_up_states, 23), get_channelNames_if(power_up_states, 24), get_state_if(power_up_states, 24), get_channelNames_if(power_up_states, 25), get_state_if(power_up_states, 25), get_channelNames_if(power_up_states, 26), get_state_if(power_up_states, 26), get_channelNames_if(power_up_states, 27), get_state_if(power_up_states, 27), get_channelNames_if(power_up_states, 28), get_state_if(power_up_states, 28), get_channelNames_if(power_up_states, 29), get_state_if(power_up_states, 29), get_channelNames_if(power_up_states, 30), get_state_if(power_up_states, 30), get_channelNames_if(power_up_states, 31), get_state_if(power_up_states, 31), get_channelNames_if(power_up_states, 32), get_state_if(power_up_states, 32), get_channelNames_if(power_up_states, 33), get_state_if(power_up_states, 33), get_channelNames_if(power_up_states, 34), get_state_if(power_up_states, 34), get_channelNames_if(power_up_states, 35), get_state_if(power_up_states, 35), get_channelNames_if(power_up_states, 36), get_state_if(power_up_states, 36), get_channelNames_if(power_up_states, 37), get_state_if(power_up_states, 37), get_channelNames_if(power_up_states, 38), get_state_if(power_up_states, 38), get_channelNames_if(power_up_states, 39), get_state_if(power_up_states, 39), get_channelNames_if(power_up_states, 40), get_state_if(power_up_states, 40), get_channelNames_if(power_up_states, 41), get_state_if(power_up_states, 41), get_channelNames_if(power_up_states, 42), get_state_if(power_up_states, 42), get_channelNames_if(power_up_states, 43), get_state_if(power_up_states, 43), get_channelNames_if(power_up_states, 44), get_state_if(power_up_states, 44), get_channelNames_if(power_up_states, 45), get_state_if(power_up_states, 45), get_channelNames_if(power_up_states, 46), get_state_if(power_up_states, 46), get_channelNames_if(power_up_states, 47), get_state_if(power_up_states, 47), get_channelNames_if(power_up_states, 48), get_state_if(power_up_states, 48), get_channelNames_if(power_up_states, 49), get_state_if(power_up_states, 49), get_channelNames_if(power_up_states, 50), get_state_if(power_up_states, 50), get_channelNames_if(power_up_states, 51), get_state_if(power_up_states, 51), get_channelNames_if(power_up_states, 52), get_state_if(power_up_states, 52), get_channelNames_if(power_up_states, 53), get_state_if(power_up_states, 53), get_channelNames_if(power_up_states, 54), get_state_if(power_up_states, 54), get_channelNames_if(power_up_states, 55), get_state_if(power_up_states, 55), get_channelNames_if(power_up_states, 56), get_state_if(power_up_states, 56), get_channelNames_if(power_up_states, 57), get_state_if(power_up_states, 57), get_channelNames_if(power_up_states, 58), get_state_if(power_up_states, 58), get_channelNames_if(power_up_states, 59), get_state_if(power_up_states, 59), get_channelNames_if(power_up_states, 60), get_state_if(power_up_states, 60), get_channelNames_if(power_up_states, 61), get_state_if(power_up_states, 61), get_channelNames_if(power_up_states, 62), get_state_if(power_up_states, 62), get_channelNames_if(power_up_states, 63), get_state_if(power_up_states, 63), get_channelNames_if(power_up_states, 64), get_state_if(power_up_states, 64), get_channelNames_if(power_up_states, 65), get_state_if(power_up_states, 65), get_channelNames_if(power_up_states, 66), get_state_if(power_up_states, 66), get_channelNames_if(power_up_states, 67), get_state_if(power_up_states, 67), get_channelNames_if(power_up_states, 68), get_state_if(power_up_states, 68), get_channelNames_if(power_up_states, 69), get_state_if(power_up_states, 69), get_channelNames_if(power_up_states, 70), get_state_if(power_up_states, 70), get_channelNames_if(power_up_states, 71), get_state_if(power_up_states, 71), get_channelNames_if(power_up_states, 72), get_state_if(power_up_states, 72), get_channelNames_if(power_up_states, 73), get_state_if(power_up_states, 73), get_channelNames_if(power_up_states, 74), get_state_if(power_up_states, 74), get_channelNames_if(power_up_states, 75), get_state_if(power_up_states, 75), get_channelNames_if(power_up_states, 76), get_state_if(power_up_states, 76), get_channelNames_if(power_up_states, 77), get_state_if(power_up_states, 77), get_channelNames_if(power_up_states, 78), get_state_if(power_up_states, 78), get_channelNames_if(power_up_states, 79), get_state_if(power_up_states, 79), get_channelNames_if(power_up_states, 80), get_state_if(power_up_states, 80), get_channelNames_if(power_up_states, 81), get_state_if(power_up_states, 81), get_channelNames_if(power_up_states, 82), get_state_if(power_up_states, 82), get_channelNames_if(power_up_states, 83), get_state_if(power_up_states, 83), get_channelNames_if(power_up_states, 84), get_state_if(power_up_states, 84), get_channelNames_if(power_up_states, 85), get_state_if(power_up_states, 85), get_channelNames_if(power_up_states, 86), get_state_if(power_up_states, 86), get_channelNames_if(power_up_states, 87), get_state_if(power_up_states, 87), get_channelNames_if(power_up_states, 88), get_state_if(power_up_states, 88), get_channelNames_if(power_up_states, 89), get_state_if(power_up_states, 89), get_channelNames_if(power_up_states, 90), get_state_if(power_up_states, 90), get_channelNames_if(power_up_states, 91), get_state_if(power_up_states, 91), get_channelNames_if(power_up_states, 92), get_state_if(power_up_states, 92), get_channelNames_if(power_up_states, 93), get_state_if(power_up_states, 93), get_channelNames_if(power_up_states, 94), get_state_if(power_up_states, 94), get_channelNames_if(power_up_states, 95), get_state_if(power_up_states, 95), get_channelNames_if(power_up_states, 96), get_state_if(power_up_states, 96)); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetDigitalPullUpPullDownStates(::grpc::ServerContext* context, const SetDigitalPullUpPullDownStatesRequest* request, SetDigitalPullUpPullDownStatesResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - auto get_channelNames_if = [](const google::protobuf::RepeatedPtrField& vector, int n) -> const char* { - if (vector.size() > n) { - return vector[n].channel_names().c_str(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetExportedSignalAttributeUInt32(::grpc::ServerContext* context, const SetExportedSignalAttributeUInt32Request* request, SetExportedSignalAttributeUInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetExportedSignalAttributeUInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ExportSignalUInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetExportedSignalAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ExportSignalUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetExportedSignalAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - return nullptr; - }; - auto get_state_if = [](const google::protobuf::RepeatedPtrField& vector, int n) -> int32 { - if (vector.size() > n) { - return vector[n].state(); + + uInt32 value = request->value(); + auto status = library_->SetExportedSignalAttributeUInt32(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - return 0; - }; - auto pull_up_pull_down_states = request->pull_up_pull_down_states(); - if (pull_up_pull_down_states.size() == 0) { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "No values for pullUpPullDownStates were specified"); - } - if (pull_up_pull_down_states.size() > 96) { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "More than 96 values for pullUpPullDownStates were specified"); + response->set_status(status); + return ::grpc::Status::OK; } - - auto status = std::static_pointer_cast(library_)->SetDigitalPullUpPullDownStates(device_name, get_channelNames_if(pull_up_pull_down_states, 0), get_state_if(pull_up_pull_down_states, 0), get_channelNames_if(pull_up_pull_down_states, 1), get_state_if(pull_up_pull_down_states, 1), get_channelNames_if(pull_up_pull_down_states, 2), get_state_if(pull_up_pull_down_states, 2), get_channelNames_if(pull_up_pull_down_states, 3), get_state_if(pull_up_pull_down_states, 3), get_channelNames_if(pull_up_pull_down_states, 4), get_state_if(pull_up_pull_down_states, 4), get_channelNames_if(pull_up_pull_down_states, 5), get_state_if(pull_up_pull_down_states, 5), get_channelNames_if(pull_up_pull_down_states, 6), get_state_if(pull_up_pull_down_states, 6), get_channelNames_if(pull_up_pull_down_states, 7), get_state_if(pull_up_pull_down_states, 7), get_channelNames_if(pull_up_pull_down_states, 8), get_state_if(pull_up_pull_down_states, 8), get_channelNames_if(pull_up_pull_down_states, 9), get_state_if(pull_up_pull_down_states, 9), get_channelNames_if(pull_up_pull_down_states, 10), get_state_if(pull_up_pull_down_states, 10), get_channelNames_if(pull_up_pull_down_states, 11), get_state_if(pull_up_pull_down_states, 11), get_channelNames_if(pull_up_pull_down_states, 12), get_state_if(pull_up_pull_down_states, 12), get_channelNames_if(pull_up_pull_down_states, 13), get_state_if(pull_up_pull_down_states, 13), get_channelNames_if(pull_up_pull_down_states, 14), get_state_if(pull_up_pull_down_states, 14), get_channelNames_if(pull_up_pull_down_states, 15), get_state_if(pull_up_pull_down_states, 15), get_channelNames_if(pull_up_pull_down_states, 16), get_state_if(pull_up_pull_down_states, 16), get_channelNames_if(pull_up_pull_down_states, 17), get_state_if(pull_up_pull_down_states, 17), get_channelNames_if(pull_up_pull_down_states, 18), get_state_if(pull_up_pull_down_states, 18), get_channelNames_if(pull_up_pull_down_states, 19), get_state_if(pull_up_pull_down_states, 19), get_channelNames_if(pull_up_pull_down_states, 20), get_state_if(pull_up_pull_down_states, 20), get_channelNames_if(pull_up_pull_down_states, 21), get_state_if(pull_up_pull_down_states, 21), get_channelNames_if(pull_up_pull_down_states, 22), get_state_if(pull_up_pull_down_states, 22), get_channelNames_if(pull_up_pull_down_states, 23), get_state_if(pull_up_pull_down_states, 23), get_channelNames_if(pull_up_pull_down_states, 24), get_state_if(pull_up_pull_down_states, 24), get_channelNames_if(pull_up_pull_down_states, 25), get_state_if(pull_up_pull_down_states, 25), get_channelNames_if(pull_up_pull_down_states, 26), get_state_if(pull_up_pull_down_states, 26), get_channelNames_if(pull_up_pull_down_states, 27), get_state_if(pull_up_pull_down_states, 27), get_channelNames_if(pull_up_pull_down_states, 28), get_state_if(pull_up_pull_down_states, 28), get_channelNames_if(pull_up_pull_down_states, 29), get_state_if(pull_up_pull_down_states, 29), get_channelNames_if(pull_up_pull_down_states, 30), get_state_if(pull_up_pull_down_states, 30), get_channelNames_if(pull_up_pull_down_states, 31), get_state_if(pull_up_pull_down_states, 31), get_channelNames_if(pull_up_pull_down_states, 32), get_state_if(pull_up_pull_down_states, 32), get_channelNames_if(pull_up_pull_down_states, 33), get_state_if(pull_up_pull_down_states, 33), get_channelNames_if(pull_up_pull_down_states, 34), get_state_if(pull_up_pull_down_states, 34), get_channelNames_if(pull_up_pull_down_states, 35), get_state_if(pull_up_pull_down_states, 35), get_channelNames_if(pull_up_pull_down_states, 36), get_state_if(pull_up_pull_down_states, 36), get_channelNames_if(pull_up_pull_down_states, 37), get_state_if(pull_up_pull_down_states, 37), get_channelNames_if(pull_up_pull_down_states, 38), get_state_if(pull_up_pull_down_states, 38), get_channelNames_if(pull_up_pull_down_states, 39), get_state_if(pull_up_pull_down_states, 39), get_channelNames_if(pull_up_pull_down_states, 40), get_state_if(pull_up_pull_down_states, 40), get_channelNames_if(pull_up_pull_down_states, 41), get_state_if(pull_up_pull_down_states, 41), get_channelNames_if(pull_up_pull_down_states, 42), get_state_if(pull_up_pull_down_states, 42), get_channelNames_if(pull_up_pull_down_states, 43), get_state_if(pull_up_pull_down_states, 43), get_channelNames_if(pull_up_pull_down_states, 44), get_state_if(pull_up_pull_down_states, 44), get_channelNames_if(pull_up_pull_down_states, 45), get_state_if(pull_up_pull_down_states, 45), get_channelNames_if(pull_up_pull_down_states, 46), get_state_if(pull_up_pull_down_states, 46), get_channelNames_if(pull_up_pull_down_states, 47), get_state_if(pull_up_pull_down_states, 47), get_channelNames_if(pull_up_pull_down_states, 48), get_state_if(pull_up_pull_down_states, 48), get_channelNames_if(pull_up_pull_down_states, 49), get_state_if(pull_up_pull_down_states, 49), get_channelNames_if(pull_up_pull_down_states, 50), get_state_if(pull_up_pull_down_states, 50), get_channelNames_if(pull_up_pull_down_states, 51), get_state_if(pull_up_pull_down_states, 51), get_channelNames_if(pull_up_pull_down_states, 52), get_state_if(pull_up_pull_down_states, 52), get_channelNames_if(pull_up_pull_down_states, 53), get_state_if(pull_up_pull_down_states, 53), get_channelNames_if(pull_up_pull_down_states, 54), get_state_if(pull_up_pull_down_states, 54), get_channelNames_if(pull_up_pull_down_states, 55), get_state_if(pull_up_pull_down_states, 55), get_channelNames_if(pull_up_pull_down_states, 56), get_state_if(pull_up_pull_down_states, 56), get_channelNames_if(pull_up_pull_down_states, 57), get_state_if(pull_up_pull_down_states, 57), get_channelNames_if(pull_up_pull_down_states, 58), get_state_if(pull_up_pull_down_states, 58), get_channelNames_if(pull_up_pull_down_states, 59), get_state_if(pull_up_pull_down_states, 59), get_channelNames_if(pull_up_pull_down_states, 60), get_state_if(pull_up_pull_down_states, 60), get_channelNames_if(pull_up_pull_down_states, 61), get_state_if(pull_up_pull_down_states, 61), get_channelNames_if(pull_up_pull_down_states, 62), get_state_if(pull_up_pull_down_states, 62), get_channelNames_if(pull_up_pull_down_states, 63), get_state_if(pull_up_pull_down_states, 63), get_channelNames_if(pull_up_pull_down_states, 64), get_state_if(pull_up_pull_down_states, 64), get_channelNames_if(pull_up_pull_down_states, 65), get_state_if(pull_up_pull_down_states, 65), get_channelNames_if(pull_up_pull_down_states, 66), get_state_if(pull_up_pull_down_states, 66), get_channelNames_if(pull_up_pull_down_states, 67), get_state_if(pull_up_pull_down_states, 67), get_channelNames_if(pull_up_pull_down_states, 68), get_state_if(pull_up_pull_down_states, 68), get_channelNames_if(pull_up_pull_down_states, 69), get_state_if(pull_up_pull_down_states, 69), get_channelNames_if(pull_up_pull_down_states, 70), get_state_if(pull_up_pull_down_states, 70), get_channelNames_if(pull_up_pull_down_states, 71), get_state_if(pull_up_pull_down_states, 71), get_channelNames_if(pull_up_pull_down_states, 72), get_state_if(pull_up_pull_down_states, 72), get_channelNames_if(pull_up_pull_down_states, 73), get_state_if(pull_up_pull_down_states, 73), get_channelNames_if(pull_up_pull_down_states, 74), get_state_if(pull_up_pull_down_states, 74), get_channelNames_if(pull_up_pull_down_states, 75), get_state_if(pull_up_pull_down_states, 75), get_channelNames_if(pull_up_pull_down_states, 76), get_state_if(pull_up_pull_down_states, 76), get_channelNames_if(pull_up_pull_down_states, 77), get_state_if(pull_up_pull_down_states, 77), get_channelNames_if(pull_up_pull_down_states, 78), get_state_if(pull_up_pull_down_states, 78), get_channelNames_if(pull_up_pull_down_states, 79), get_state_if(pull_up_pull_down_states, 79), get_channelNames_if(pull_up_pull_down_states, 80), get_state_if(pull_up_pull_down_states, 80), get_channelNames_if(pull_up_pull_down_states, 81), get_state_if(pull_up_pull_down_states, 81), get_channelNames_if(pull_up_pull_down_states, 82), get_state_if(pull_up_pull_down_states, 82), get_channelNames_if(pull_up_pull_down_states, 83), get_state_if(pull_up_pull_down_states, 83), get_channelNames_if(pull_up_pull_down_states, 84), get_state_if(pull_up_pull_down_states, 84), get_channelNames_if(pull_up_pull_down_states, 85), get_state_if(pull_up_pull_down_states, 85), get_channelNames_if(pull_up_pull_down_states, 86), get_state_if(pull_up_pull_down_states, 86), get_channelNames_if(pull_up_pull_down_states, 87), get_state_if(pull_up_pull_down_states, 87), get_channelNames_if(pull_up_pull_down_states, 88), get_state_if(pull_up_pull_down_states, 88), get_channelNames_if(pull_up_pull_down_states, 89), get_state_if(pull_up_pull_down_states, 89), get_channelNames_if(pull_up_pull_down_states, 90), get_state_if(pull_up_pull_down_states, 90), get_channelNames_if(pull_up_pull_down_states, 91), get_state_if(pull_up_pull_down_states, 91), get_channelNames_if(pull_up_pull_down_states, 92), get_state_if(pull_up_pull_down_states, 92), get_channelNames_if(pull_up_pull_down_states, 93), get_state_if(pull_up_pull_down_states, 93), get_channelNames_if(pull_up_pull_down_states, 94), get_state_if(pull_up_pull_down_states, 94), get_channelNames_if(pull_up_pull_down_states, 95), get_state_if(pull_up_pull_down_states, 95), get_channelNames_if(pull_up_pull_down_states, 96), get_state_if(pull_up_pull_down_states, 96)); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetExportedSignalAttributeBool(::grpc::ServerContext* context, const SetExportedSignalAttributeBoolRequest* request, SetExportedSignalAttributeBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetExportedSignalAttributeBoolRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ExportSignalBoolAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetExportedSignalAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ExportSignalBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetExportedSignalAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetFirstSampClkWhen(::grpc::ServerContext* context, const SetFirstSampClkWhenRequest* request, SetFirstSampClkWhenResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto data = convert_from_grpc(request->data()); + auto status = library_->SetFirstSampClkWhen(task, data); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - bool32 value = request->value(); - auto status = library_->SetExportedSignalAttributeBool(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetExportedSignalAttributeDouble(::grpc::ServerContext* context, const SetExportedSignalAttributeDoubleRequest* request, SetExportedSignalAttributeDoubleResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetExportedSignalAttributeDoubleRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ExportSignalDoubleAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetExportedSignalAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ExportSignalDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetReadAttributeBool(::grpc::ServerContext* context, const SetReadAttributeBoolRequest* request, SetReadAttributeBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetReadAttributeBoolRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ReadBoolAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetReadAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ReadBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetReadAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::SetExportedSignalAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + bool32 value = request->value(); + auto status = library_->SetReadAttributeBool(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - float64 value = request->value(); - auto status = library_->SetExportedSignalAttributeDouble(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetExportedSignalAttributeInt32(::grpc::ServerContext* context, const SetExportedSignalAttributeInt32Request* request, SetExportedSignalAttributeInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetExportedSignalAttributeInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ExportSignalInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetExportedSignalAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ExportSignalInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetExportedSignalAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetReadAttributeDouble(::grpc::ServerContext* context, const SetReadAttributeDoubleRequest* request, SetReadAttributeDoubleResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetReadAttributeDoubleRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ReadDoubleAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetReadAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ReadDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetReadAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - } - int32 value; - switch (request->value_enum_case()) { - case nidaqmx_grpc::SetExportedSignalAttributeInt32Request::ValueEnumCase::kValue: { - value = static_cast(request->value()); - break; - } - case nidaqmx_grpc::SetExportedSignalAttributeInt32Request::ValueEnumCase::kValueRaw: { - value = static_cast(request->value_raw()); - break; - } - case nidaqmx_grpc::SetExportedSignalAttributeInt32Request::ValueEnumCase::VALUE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for value was not specified or out of range"); - break; + float64 value = request->value(); + auto status = library_->SetReadAttributeDouble(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - auto status = library_->SetExportedSignalAttributeInt32(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetExportedSignalAttributeString(::grpc::ServerContext* context, const SetExportedSignalAttributeStringRequest* request, SetExportedSignalAttributeStringResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetExportedSignalAttributeStringRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ExportSignalStringAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetExportedSignalAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ExportSignalStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetExportedSignalAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - auto value_mbcs = convert_from_grpc(request->value()); - auto value = value_mbcs.c_str(); - auto status = library_->SetExportedSignalAttributeString(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetExportedSignalAttributeUInt32(::grpc::ServerContext* context, const SetExportedSignalAttributeUInt32Request* request, SetExportedSignalAttributeUInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetExportedSignalAttributeUInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ExportSignalUInt32Attribute_IsValid(attribute) ? attribute : 0; - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetReadAttributeInt32(::grpc::ServerContext* context, const SetReadAttributeInt32Request* request, SetReadAttributeInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetReadAttributeInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ReadInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetReadAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ReadInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetReadAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::SetExportedSignalAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ExportSignalUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; + + int32 value; + switch (request->value_enum_case()) { + case nidaqmx_grpc::SetReadAttributeInt32Request::ValueEnumCase::kValue: { + value = static_cast(request->value()); + break; + } + case nidaqmx_grpc::SetReadAttributeInt32Request::ValueEnumCase::kValueRaw: { + value = static_cast(request->value_raw()); + break; + } + case nidaqmx_grpc::SetReadAttributeInt32Request::ValueEnumCase::VALUE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for value was not specified or out of range"); + break; + } } - case nidaqmx_grpc::SetExportedSignalAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + auto status = library_->SetReadAttributeInt32(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - uInt32 value = request->value(); - auto status = library_->SetExportedSignalAttributeUInt32(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetFirstSampClkWhen(::grpc::ServerContext* context, const SetFirstSampClkWhenRequest* request, SetFirstSampClkWhenResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto data = convert_from_grpc(request->data()); - auto status = library_->SetFirstSampClkWhen(task, data); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetReadAttributeBool(::grpc::ServerContext* context, const SetReadAttributeBoolRequest* request, SetReadAttributeBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetReadAttributeBoolRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ReadBoolAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetReadAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ReadBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetReadAttributeString(::grpc::ServerContext* context, const SetReadAttributeStringRequest* request, SetReadAttributeStringResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetReadAttributeStringRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ReadStringAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetReadAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ReadStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetReadAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::SetReadAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + auto value_mbcs = convert_from_grpc(request->value()); + auto value = value_mbcs.c_str(); + auto status = library_->SetReadAttributeString(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - bool32 value = request->value(); - auto status = library_->SetReadAttributeBool(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetReadAttributeDouble(::grpc::ServerContext* context, const SetReadAttributeDoubleRequest* request, SetReadAttributeDoubleResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetReadAttributeDoubleRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ReadDoubleAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetReadAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ReadDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetReadAttributeUInt32(::grpc::ServerContext* context, const SetReadAttributeUInt32Request* request, SetReadAttributeUInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetReadAttributeUInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ReadUInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetReadAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ReadUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetReadAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::SetReadAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + uInt32 value = request->value(); + auto status = library_->SetReadAttributeUInt32(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - float64 value = request->value(); - auto status = library_->SetReadAttributeDouble(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetReadAttributeInt32(::grpc::ServerContext* context, const SetReadAttributeInt32Request* request, SetReadAttributeInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetReadAttributeInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ReadInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetReadAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ReadInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetReadAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetReadAttributeUInt64(::grpc::ServerContext* context, const SetReadAttributeUInt64Request* request, SetReadAttributeUInt64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - - int32 value; - switch (request->value_enum_case()) { - case nidaqmx_grpc::SetReadAttributeInt32Request::ValueEnumCase::kValue: { - value = static_cast(request->value()); - break; - } - case nidaqmx_grpc::SetReadAttributeInt32Request::ValueEnumCase::kValueRaw: { - value = static_cast(request->value_raw()); - break; + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetReadAttributeUInt64Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ReadUInt64Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetReadAttributeUInt64Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ReadUInt64Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetReadAttributeUInt64Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::SetReadAttributeInt32Request::ValueEnumCase::VALUE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for value was not specified or out of range"); - break; + + uInt64 value = request->value(); + auto status = library_->SetReadAttributeUInt64(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - auto status = library_->SetReadAttributeInt32(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetReadAttributeString(::grpc::ServerContext* context, const SetReadAttributeStringRequest* request, SetReadAttributeStringResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetReadAttributeStringRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ReadStringAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetReadAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ReadStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetReadAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - auto value_mbcs = convert_from_grpc(request->value()); - auto value = value_mbcs.c_str(); - auto status = library_->SetReadAttributeString(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetReadAttributeUInt32(::grpc::ServerContext* context, const SetReadAttributeUInt32Request* request, SetReadAttributeUInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetReadAttributeUInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ReadUInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetReadAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ReadUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetRealTimeAttributeBool(::grpc::ServerContext* context, const SetRealTimeAttributeBoolRequest* request, SetRealTimeAttributeBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetRealTimeAttributeBoolRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::RealTimeBoolAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetRealTimeAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::RealTimeBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetRealTimeAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::SetReadAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + bool32 value = request->value(); + auto status = library_->SetRealTimeAttributeBool(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - uInt32 value = request->value(); - auto status = library_->SetReadAttributeUInt32(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetReadAttributeUInt64(::grpc::ServerContext* context, const SetReadAttributeUInt64Request* request, SetReadAttributeUInt64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetReadAttributeUInt64Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ReadUInt64Attribute_IsValid(attribute) ? attribute : 0; - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetRealTimeAttributeInt32(::grpc::ServerContext* context, const SetRealTimeAttributeInt32Request* request, SetRealTimeAttributeInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetRealTimeAttributeInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::RealTimeInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetRealTimeAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::RealTimeInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetRealTimeAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::SetReadAttributeUInt64Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ReadUInt64Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; + + int32 value; + switch (request->value_enum_case()) { + case nidaqmx_grpc::SetRealTimeAttributeInt32Request::ValueEnumCase::kValue: { + value = static_cast(request->value()); + break; + } + case nidaqmx_grpc::SetRealTimeAttributeInt32Request::ValueEnumCase::kValueRaw: { + value = static_cast(request->value_raw()); + break; + } + case nidaqmx_grpc::SetRealTimeAttributeInt32Request::ValueEnumCase::VALUE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for value was not specified or out of range"); + break; + } } - case nidaqmx_grpc::SetReadAttributeUInt64Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + auto status = library_->SetRealTimeAttributeInt32(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - uInt64 value = request->value(); - auto status = library_->SetReadAttributeUInt64(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetRealTimeAttributeBool(::grpc::ServerContext* context, const SetRealTimeAttributeBoolRequest* request, SetRealTimeAttributeBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetRealTimeAttributeBoolRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::RealTimeBoolAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetRealTimeAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::RealTimeBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetRealTimeAttributeUInt32(::grpc::ServerContext* context, const SetRealTimeAttributeUInt32Request* request, SetRealTimeAttributeUInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetRealTimeAttributeUInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::RealTimeUInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetRealTimeAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::RealTimeUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetRealTimeAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::SetRealTimeAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + uInt32 value = request->value(); + auto status = library_->SetRealTimeAttributeUInt32(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - bool32 value = request->value(); - auto status = library_->SetRealTimeAttributeBool(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetRealTimeAttributeInt32(::grpc::ServerContext* context, const SetRealTimeAttributeInt32Request* request, SetRealTimeAttributeInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetRealTimeAttributeInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::RealTimeInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetRealTimeAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::RealTimeInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetScaleAttributeDouble(::grpc::ServerContext* context, const SetScaleAttributeDoubleRequest* request, SetScaleAttributeDoubleResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto scale_name_mbcs = convert_from_grpc(request->scale_name()); + auto scale_name = scale_name_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetScaleAttributeDoubleRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ScaleDoubleAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetScaleAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ScaleDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetScaleAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::SetRealTimeAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + float64 value = request->value(); + auto status = library_->SetScaleAttributeDouble(scale_name, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } - int32 value; - switch (request->value_enum_case()) { - case nidaqmx_grpc::SetRealTimeAttributeInt32Request::ValueEnumCase::kValue: { - value = static_cast(request->value()); - break; - } - case nidaqmx_grpc::SetRealTimeAttributeInt32Request::ValueEnumCase::kValueRaw: { - value = static_cast(request->value_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetScaleAttributeDoubleArray(::grpc::ServerContext* context, const SetScaleAttributeDoubleArrayRequest* request, SetScaleAttributeDoubleArrayResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto scale_name_mbcs = convert_from_grpc(request->scale_name()); + auto scale_name = scale_name_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetScaleAttributeDoubleArrayRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ScaleDoubleArrayAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetScaleAttributeDoubleArrayRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ScaleDoubleArrayAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetScaleAttributeDoubleArrayRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::SetRealTimeAttributeInt32Request::ValueEnumCase::VALUE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for value was not specified or out of range"); - break; + + auto value = const_cast(request->value().data()); + uInt32 size = static_cast(request->value().size()); + auto status = library_->SetScaleAttributeDoubleArray(scale_name, attribute, value, size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } + response->set_status(status); + return ::grpc::Status::OK; } - - auto status = library_->SetRealTimeAttributeInt32(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetRealTimeAttributeUInt32(::grpc::ServerContext* context, const SetRealTimeAttributeUInt32Request* request, SetRealTimeAttributeUInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetRealTimeAttributeUInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::RealTimeUInt32Attribute_IsValid(attribute) ? attribute : 0; - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetScaleAttributeInt32(::grpc::ServerContext* context, const SetScaleAttributeInt32Request* request, SetScaleAttributeInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto scale_name_mbcs = convert_from_grpc(request->scale_name()); + auto scale_name = scale_name_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetScaleAttributeInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ScaleInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetScaleAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ScaleInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetScaleAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::SetRealTimeAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::RealTimeUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; + + int32 value; + switch (request->value_enum_case()) { + case nidaqmx_grpc::SetScaleAttributeInt32Request::ValueEnumCase::kValue: { + value = static_cast(request->value()); + break; + } + case nidaqmx_grpc::SetScaleAttributeInt32Request::ValueEnumCase::kValueRaw: { + value = static_cast(request->value_raw()); + break; + } + case nidaqmx_grpc::SetScaleAttributeInt32Request::ValueEnumCase::VALUE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for value was not specified or out of range"); + break; + } } - case nidaqmx_grpc::SetRealTimeAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + auto status = library_->SetScaleAttributeInt32(scale_name, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } + response->set_status(status); + return ::grpc::Status::OK; } - - uInt32 value = request->value(); - auto status = library_->SetRealTimeAttributeUInt32(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetScaleAttributeDouble(::grpc::ServerContext* context, const SetScaleAttributeDoubleRequest* request, SetScaleAttributeDoubleResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto scale_name_mbcs = convert_from_grpc(request->scale_name()); - auto scale_name = scale_name_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetScaleAttributeDoubleRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ScaleDoubleAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetScaleAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ScaleDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetScaleAttributeString(::grpc::ServerContext* context, const SetScaleAttributeStringRequest* request, SetScaleAttributeStringResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto scale_name_mbcs = convert_from_grpc(request->scale_name()); + auto scale_name = scale_name_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetScaleAttributeStringRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ScaleStringAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetScaleAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ScaleStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetScaleAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::SetScaleAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + auto value_mbcs = convert_from_grpc(request->value()); + auto value = value_mbcs.c_str(); + auto status = library_->SetScaleAttributeString(scale_name, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } + response->set_status(status); + return ::grpc::Status::OK; } - - float64 value = request->value(); - auto status = library_->SetScaleAttributeDouble(scale_name, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetScaleAttributeDoubleArray(::grpc::ServerContext* context, const SetScaleAttributeDoubleArrayRequest* request, SetScaleAttributeDoubleArrayResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto scale_name_mbcs = convert_from_grpc(request->scale_name()); - auto scale_name = scale_name_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetScaleAttributeDoubleArrayRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ScaleDoubleArrayAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetScaleAttributeDoubleArrayRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ScaleDoubleArrayAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetScaleAttributeDoubleArrayRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - auto value = const_cast(request->value().data()); - uInt32 size = static_cast(request->value().size()); - auto status = library_->SetScaleAttributeDoubleArray(scale_name, attribute, value, size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetScaleAttributeInt32(::grpc::ServerContext* context, const SetScaleAttributeInt32Request* request, SetScaleAttributeInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto scale_name_mbcs = convert_from_grpc(request->scale_name()); - auto scale_name = scale_name_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetScaleAttributeInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ScaleInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetScaleAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ScaleInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetScaleAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetStartTrigTrigWhen(::grpc::ServerContext* context, const SetStartTrigTrigWhenRequest* request, SetStartTrigTrigWhenResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto data = convert_from_grpc(request->data()); + auto status = library_->SetStartTrigTrigWhen(task, data); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } - int32 value; - switch (request->value_enum_case()) { - case nidaqmx_grpc::SetScaleAttributeInt32Request::ValueEnumCase::kValue: { - value = static_cast(request->value()); - break; - } - case nidaqmx_grpc::SetScaleAttributeInt32Request::ValueEnumCase::kValueRaw: { - value = static_cast(request->value_raw()); - break; - } - case nidaqmx_grpc::SetScaleAttributeInt32Request::ValueEnumCase::VALUE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for value was not specified or out of range"); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetSyncPulseTimeWhen(::grpc::ServerContext* context, const SetSyncPulseTimeWhenRequest* request, SetSyncPulseTimeWhenResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto data = convert_from_grpc(request->data()); + auto status = library_->SetSyncPulseTimeWhen(task, data); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - auto status = library_->SetScaleAttributeInt32(scale_name, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetScaleAttributeString(::grpc::ServerContext* context, const SetScaleAttributeStringRequest* request, SetScaleAttributeStringResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto scale_name_mbcs = convert_from_grpc(request->scale_name()); - auto scale_name = scale_name_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetScaleAttributeStringRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ScaleStringAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetScaleAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ScaleStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetScaleAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - auto value_mbcs = convert_from_grpc(request->value()); - auto value = value_mbcs.c_str(); - auto status = library_->SetScaleAttributeString(scale_name, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetStartTrigTrigWhen(::grpc::ServerContext* context, const SetStartTrigTrigWhenRequest* request, SetStartTrigTrigWhenResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto data = convert_from_grpc(request->data()); - auto status = library_->SetStartTrigTrigWhen(task, data); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetSyncPulseTimeWhen(::grpc::ServerContext* context, const SetSyncPulseTimeWhenRequest* request, SetSyncPulseTimeWhenResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto data = convert_from_grpc(request->data()); - auto status = library_->SetSyncPulseTimeWhen(task, data); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetTimingAttributeBool(::grpc::ServerContext* context, const SetTimingAttributeBoolRequest* request, SetTimingAttributeBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetTimingAttributeBoolRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TimingBoolAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTimingAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TimingBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetTimingAttributeBool(::grpc::ServerContext* context, const SetTimingAttributeBoolRequest* request, SetTimingAttributeBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetTimingAttributeBoolRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TimingBoolAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTimingAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TimingBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTimingAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::SetTimingAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + bool32 value = request->value(); + auto status = library_->SetTimingAttributeBool(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - bool32 value = request->value(); - auto status = library_->SetTimingAttributeBool(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetTimingAttributeDouble(::grpc::ServerContext* context, const SetTimingAttributeDoubleRequest* request, SetTimingAttributeDoubleResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetTimingAttributeDoubleRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TimingDoubleAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTimingAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TimingDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetTimingAttributeDouble(::grpc::ServerContext* context, const SetTimingAttributeDoubleRequest* request, SetTimingAttributeDoubleResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetTimingAttributeDoubleRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TimingDoubleAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTimingAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TimingDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTimingAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::SetTimingAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + float64 value = request->value(); + auto status = library_->SetTimingAttributeDouble(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetTimingAttributeExBool(::grpc::ServerContext* context, const SetTimingAttributeExBoolRequest* request, SetTimingAttributeExBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto device_names_mbcs = convert_from_grpc(request->device_names()); + auto device_names = device_names_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetTimingAttributeExBoolRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TimingBoolAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTimingAttributeExBoolRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TimingBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTimingAttributeExBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } - float64 value = request->value(); - auto status = library_->SetTimingAttributeDouble(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + bool32 value = request->value(); + auto status = library_->SetTimingAttributeExBool(task, device_names, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetTimingAttributeExDouble(::grpc::ServerContext* context, const SetTimingAttributeExDoubleRequest* request, SetTimingAttributeExDoubleResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto device_names_mbcs = convert_from_grpc(request->device_names()); + auto device_names = device_names_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetTimingAttributeExDoubleRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TimingDoubleAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTimingAttributeExDoubleRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TimingDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTimingAttributeExDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetTimingAttributeExBool(::grpc::ServerContext* context, const SetTimingAttributeExBoolRequest* request, SetTimingAttributeExBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto device_names_mbcs = convert_from_grpc(request->device_names()); - auto device_names = device_names_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetTimingAttributeExBoolRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TimingBoolAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTimingAttributeExBoolRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TimingBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTimingAttributeExBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - bool32 value = request->value(); - auto status = library_->SetTimingAttributeExBool(task, device_names, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + float64 value = request->value(); + auto status = library_->SetTimingAttributeExDouble(task, device_names, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetTimingAttributeExInt32(::grpc::ServerContext* context, const SetTimingAttributeExInt32Request* request, SetTimingAttributeExInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto device_names_mbcs = convert_from_grpc(request->device_names()); + auto device_names = device_names_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetTimingAttributeExInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TimingInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTimingAttributeExInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TimingInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTimingAttributeExInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetTimingAttributeExDouble(::grpc::ServerContext* context, const SetTimingAttributeExDoubleRequest* request, SetTimingAttributeExDoubleResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto device_names_mbcs = convert_from_grpc(request->device_names()); - auto device_names = device_names_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetTimingAttributeExDoubleRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TimingDoubleAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTimingAttributeExDoubleRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TimingDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTimingAttributeExDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - float64 value = request->value(); - auto status = library_->SetTimingAttributeExDouble(task, device_names, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + int32 value; + switch (request->value_enum_case()) { + case nidaqmx_grpc::SetTimingAttributeExInt32Request::ValueEnumCase::kValue: { + value = static_cast(request->value()); + break; + } + case nidaqmx_grpc::SetTimingAttributeExInt32Request::ValueEnumCase::kValueRaw: { + value = static_cast(request->value_raw()); + break; + } + case nidaqmx_grpc::SetTimingAttributeExInt32Request::ValueEnumCase::VALUE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for value was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetTimingAttributeExInt32(::grpc::ServerContext* context, const SetTimingAttributeExInt32Request* request, SetTimingAttributeExInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto device_names_mbcs = convert_from_grpc(request->device_names()); - auto device_names = device_names_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetTimingAttributeExInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TimingInt32Attribute_IsValid(attribute) ? attribute : 0; - break; + auto status = library_->SetTimingAttributeExInt32(task, device_names, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - case nidaqmx_grpc::SetTimingAttributeExInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TimingInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetTimingAttributeExString(::grpc::ServerContext* context, const SetTimingAttributeExStringRequest* request, SetTimingAttributeExStringResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto device_names_mbcs = convert_from_grpc(request->device_names()); + auto device_names = device_names_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetTimingAttributeExStringRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TimingStringAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTimingAttributeExStringRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TimingStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTimingAttributeExStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::SetTimingAttributeExInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + auto value_mbcs = convert_from_grpc(request->value()); + auto value = value_mbcs.c_str(); + auto status = library_->SetTimingAttributeExString(task, device_names, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetTimingAttributeExTimestamp(::grpc::ServerContext* context, const SetTimingAttributeExTimestampRequest* request, SetTimingAttributeExTimestampResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto device_names_mbcs = convert_from_grpc(request->device_names()); + auto device_names = device_names_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetTimingAttributeExTimestampRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TimingTimestampAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTimingAttributeExTimestampRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TimingTimestampAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTimingAttributeExTimestampRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } - int32 value; - switch (request->value_enum_case()) { - case nidaqmx_grpc::SetTimingAttributeExInt32Request::ValueEnumCase::kValue: { - value = static_cast(request->value()); - break; + auto value = convert_from_grpc(request->value()); + auto status = library_->SetTimingAttributeExTimestamp(task, device_names, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - case nidaqmx_grpc::SetTimingAttributeExInt32Request::ValueEnumCase::kValueRaw: { - value = static_cast(request->value_raw()); - break; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetTimingAttributeExUInt32(::grpc::ServerContext* context, const SetTimingAttributeExUInt32Request* request, SetTimingAttributeExUInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto device_names_mbcs = convert_from_grpc(request->device_names()); + auto device_names = device_names_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetTimingAttributeExUInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TimingUInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTimingAttributeExUInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TimingUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTimingAttributeExUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::SetTimingAttributeExInt32Request::ValueEnumCase::VALUE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for value was not specified or out of range"); - break; + + uInt32 value = request->value(); + auto status = library_->SetTimingAttributeExUInt32(task, device_names, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetTimingAttributeExUInt64(::grpc::ServerContext* context, const SetTimingAttributeExUInt64Request* request, SetTimingAttributeExUInt64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto device_names_mbcs = convert_from_grpc(request->device_names()); + auto device_names = device_names_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetTimingAttributeExUInt64Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TimingUInt64Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTimingAttributeExUInt64Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TimingUInt64Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTimingAttributeExUInt64Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } - auto status = library_->SetTimingAttributeExInt32(task, device_names, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + uInt64 value = request->value(); + auto status = library_->SetTimingAttributeExUInt64(task, device_names, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetTimingAttributeExString(::grpc::ServerContext* context, const SetTimingAttributeExStringRequest* request, SetTimingAttributeExStringResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto device_names_mbcs = convert_from_grpc(request->device_names()); - auto device_names = device_names_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetTimingAttributeExStringRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TimingStringAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTimingAttributeExStringRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TimingStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTimingAttributeExStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - auto value_mbcs = convert_from_grpc(request->value()); - auto value = value_mbcs.c_str(); - auto status = library_->SetTimingAttributeExString(task, device_names, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetTimingAttributeExTimestamp(::grpc::ServerContext* context, const SetTimingAttributeExTimestampRequest* request, SetTimingAttributeExTimestampResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto device_names_mbcs = convert_from_grpc(request->device_names()); - auto device_names = device_names_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetTimingAttributeExTimestampRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TimingTimestampAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTimingAttributeExTimestampRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TimingTimestampAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTimingAttributeExTimestampRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - auto value = convert_from_grpc(request->value()); - auto status = library_->SetTimingAttributeExTimestamp(task, device_names, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetTimingAttributeInt32(::grpc::ServerContext* context, const SetTimingAttributeInt32Request* request, SetTimingAttributeInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetTimingAttributeInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TimingInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTimingAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TimingInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTimingAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetTimingAttributeExUInt32(::grpc::ServerContext* context, const SetTimingAttributeExUInt32Request* request, SetTimingAttributeExUInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto device_names_mbcs = convert_from_grpc(request->device_names()); - auto device_names = device_names_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetTimingAttributeExUInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TimingUInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTimingAttributeExUInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TimingUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTimingAttributeExUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - uInt32 value = request->value(); - auto status = library_->SetTimingAttributeExUInt32(task, device_names, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + int32 value; + switch (request->value_enum_case()) { + case nidaqmx_grpc::SetTimingAttributeInt32Request::ValueEnumCase::kValue: { + value = static_cast(request->value()); + break; + } + case nidaqmx_grpc::SetTimingAttributeInt32Request::ValueEnumCase::kValueRaw: { + value = static_cast(request->value_raw()); + break; + } + case nidaqmx_grpc::SetTimingAttributeInt32Request::ValueEnumCase::VALUE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for value was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetTimingAttributeExUInt64(::grpc::ServerContext* context, const SetTimingAttributeExUInt64Request* request, SetTimingAttributeExUInt64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto device_names_mbcs = convert_from_grpc(request->device_names()); - auto device_names = device_names_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetTimingAttributeExUInt64Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TimingUInt64Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTimingAttributeExUInt64Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TimingUInt64Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTimingAttributeExUInt64Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - uInt64 value = request->value(); - auto status = library_->SetTimingAttributeExUInt64(task, device_names, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + auto status = library_->SetTimingAttributeInt32(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetTimingAttributeInt32(::grpc::ServerContext* context, const SetTimingAttributeInt32Request* request, SetTimingAttributeInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetTimingAttributeInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TimingInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTimingAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TimingInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetTimingAttributeString(::grpc::ServerContext* context, const SetTimingAttributeStringRequest* request, SetTimingAttributeStringResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetTimingAttributeStringRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TimingStringAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTimingAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TimingStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTimingAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::SetTimingAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + auto value_mbcs = convert_from_grpc(request->value()); + auto value = value_mbcs.c_str(); + auto status = library_->SetTimingAttributeString(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } + } - int32 value; - switch (request->value_enum_case()) { - case nidaqmx_grpc::SetTimingAttributeInt32Request::ValueEnumCase::kValue: { - value = static_cast(request->value()); - break; - } - case nidaqmx_grpc::SetTimingAttributeInt32Request::ValueEnumCase::kValueRaw: { - value = static_cast(request->value_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetTimingAttributeTimestamp(::grpc::ServerContext* context, const SetTimingAttributeTimestampRequest* request, SetTimingAttributeTimestampResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetTimingAttributeTimestampRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TimingTimestampAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTimingAttributeTimestampRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TimingTimestampAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTimingAttributeTimestampRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::SetTimingAttributeInt32Request::ValueEnumCase::VALUE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for value was not specified or out of range"); - break; + + auto value = convert_from_grpc(request->value()); + auto status = library_->SetTimingAttributeTimestamp(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - auto status = library_->SetTimingAttributeInt32(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetTimingAttributeString(::grpc::ServerContext* context, const SetTimingAttributeStringRequest* request, SetTimingAttributeStringResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetTimingAttributeStringRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TimingStringAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTimingAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TimingStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTimingAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - auto value_mbcs = convert_from_grpc(request->value()); - auto value = value_mbcs.c_str(); - auto status = library_->SetTimingAttributeString(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetTimingAttributeTimestamp(::grpc::ServerContext* context, const SetTimingAttributeTimestampRequest* request, SetTimingAttributeTimestampResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetTimingAttributeTimestampRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TimingTimestampAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTimingAttributeTimestampRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TimingTimestampAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetTimingAttributeUInt32(::grpc::ServerContext* context, const SetTimingAttributeUInt32Request* request, SetTimingAttributeUInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetTimingAttributeUInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TimingUInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTimingAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TimingUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTimingAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::SetTimingAttributeTimestampRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + uInt32 value = request->value(); + auto status = library_->SetTimingAttributeUInt32(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - auto value = convert_from_grpc(request->value()); - auto status = library_->SetTimingAttributeTimestamp(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetTimingAttributeUInt32(::grpc::ServerContext* context, const SetTimingAttributeUInt32Request* request, SetTimingAttributeUInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetTimingAttributeUInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TimingUInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTimingAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TimingUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetTimingAttributeUInt64(::grpc::ServerContext* context, const SetTimingAttributeUInt64Request* request, SetTimingAttributeUInt64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetTimingAttributeUInt64Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TimingUInt64Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTimingAttributeUInt64Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TimingUInt64Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTimingAttributeUInt64Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::SetTimingAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + uInt64 value = request->value(); + auto status = library_->SetTimingAttributeUInt64(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - uInt32 value = request->value(); - auto status = library_->SetTimingAttributeUInt32(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetTimingAttributeUInt64(::grpc::ServerContext* context, const SetTimingAttributeUInt64Request* request, SetTimingAttributeUInt64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetTimingAttributeUInt64Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TimingUInt64Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTimingAttributeUInt64Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TimingUInt64Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetTrigAttributeBool(::grpc::ServerContext* context, const SetTrigAttributeBoolRequest* request, SetTrigAttributeBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetTrigAttributeBoolRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TriggerBoolAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTrigAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TriggerBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTrigAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::SetTimingAttributeUInt64Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + bool32 value = request->value(); + auto status = library_->SetTrigAttributeBool(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - uInt64 value = request->value(); - auto status = library_->SetTimingAttributeUInt64(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetTrigAttributeBool(::grpc::ServerContext* context, const SetTrigAttributeBoolRequest* request, SetTrigAttributeBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetTrigAttributeBoolRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TriggerBoolAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTrigAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TriggerBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetTrigAttributeDouble(::grpc::ServerContext* context, const SetTrigAttributeDoubleRequest* request, SetTrigAttributeDoubleResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetTrigAttributeDoubleRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TriggerDoubleAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTrigAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TriggerDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTrigAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::SetTrigAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + float64 value = request->value(); + auto status = library_->SetTrigAttributeDouble(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - bool32 value = request->value(); - auto status = library_->SetTrigAttributeBool(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetTrigAttributeDouble(::grpc::ServerContext* context, const SetTrigAttributeDoubleRequest* request, SetTrigAttributeDoubleResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetTrigAttributeDoubleRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TriggerDoubleAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTrigAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TriggerDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetTrigAttributeDoubleArray(::grpc::ServerContext* context, const SetTrigAttributeDoubleArrayRequest* request, SetTrigAttributeDoubleArrayResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetTrigAttributeDoubleArrayRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TriggerDoubleArrayAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTrigAttributeDoubleArrayRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TriggerDoubleArrayAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTrigAttributeDoubleArrayRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::SetTrigAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + auto value = const_cast(request->value().data()); + uInt32 size = static_cast(request->value().size()); + auto status = library_->SetTrigAttributeDoubleArray(task, attribute, value, size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - float64 value = request->value(); - auto status = library_->SetTrigAttributeDouble(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetTrigAttributeDoubleArray(::grpc::ServerContext* context, const SetTrigAttributeDoubleArrayRequest* request, SetTrigAttributeDoubleArrayResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetTrigAttributeDoubleArrayRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TriggerDoubleArrayAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTrigAttributeDoubleArrayRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TriggerDoubleArrayAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTrigAttributeDoubleArrayRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - auto value = const_cast(request->value().data()); - uInt32 size = static_cast(request->value().size()); - auto status = library_->SetTrigAttributeDoubleArray(task, attribute, value, size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetTrigAttributeInt32(::grpc::ServerContext* context, const SetTrigAttributeInt32Request* request, SetTrigAttributeInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetTrigAttributeInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TriggerInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTrigAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TriggerInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTrigAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetTrigAttributeInt32(::grpc::ServerContext* context, const SetTrigAttributeInt32Request* request, SetTrigAttributeInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - - int32 value; - switch (request->value_enum_case()) { - case nidaqmx_grpc::SetTrigAttributeInt32Request::ValueEnumCase::kValue: { - value = static_cast(request->value()); - break; + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetTrigAttributeInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TriggerInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTrigAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TriggerInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTrigAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::SetTrigAttributeInt32Request::ValueEnumCase::kValueRaw: { - value = static_cast(request->value_raw()); - break; + + int32 value; + switch (request->value_enum_case()) { + case nidaqmx_grpc::SetTrigAttributeInt32Request::ValueEnumCase::kValue: { + value = static_cast(request->value()); + break; + } + case nidaqmx_grpc::SetTrigAttributeInt32Request::ValueEnumCase::kValueRaw: { + value = static_cast(request->value_raw()); + break; + } + case nidaqmx_grpc::SetTrigAttributeInt32Request::ValueEnumCase::VALUE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for value was not specified or out of range"); + break; + } } - case nidaqmx_grpc::SetTrigAttributeInt32Request::ValueEnumCase::VALUE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for value was not specified or out of range"); - break; + + auto status = library_->SetTrigAttributeInt32(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - auto status = library_->SetTrigAttributeInt32(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetTrigAttributeInt32Array(::grpc::ServerContext* context, const SetTrigAttributeInt32ArrayRequest* request, SetTrigAttributeInt32ArrayResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetTrigAttributeInt32ArrayRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TriggerInt32ArrayAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTrigAttributeInt32ArrayRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TriggerInt32ArrayAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTrigAttributeInt32ArrayRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - auto value = reinterpret_cast(request->value().data()); - uInt32 size = static_cast(request->value().size()); - auto status = library_->SetTrigAttributeInt32Array(task, attribute, value, size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetTrigAttributeInt32Array(::grpc::ServerContext* context, const SetTrigAttributeInt32ArrayRequest* request, SetTrigAttributeInt32ArrayResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetTrigAttributeInt32ArrayRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TriggerInt32ArrayAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTrigAttributeInt32ArrayRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TriggerInt32ArrayAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTrigAttributeInt32ArrayRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetTrigAttributeString(::grpc::ServerContext* context, const SetTrigAttributeStringRequest* request, SetTrigAttributeStringResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetTrigAttributeStringRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TriggerStringAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTrigAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TriggerStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTrigAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - auto value_mbcs = convert_from_grpc(request->value()); - auto value = value_mbcs.c_str(); - auto status = library_->SetTrigAttributeString(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + auto value = reinterpret_cast(request->value().data()); + uInt32 size = static_cast(request->value().size()); + auto status = library_->SetTrigAttributeInt32Array(task, attribute, value, size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetTrigAttributeTimestamp(::grpc::ServerContext* context, const SetTrigAttributeTimestampRequest* request, SetTrigAttributeTimestampResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetTrigAttributeTimestampRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TriggerTimestampAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTrigAttributeTimestampRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TriggerTimestampAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetTrigAttributeString(::grpc::ServerContext* context, const SetTrigAttributeStringRequest* request, SetTrigAttributeStringResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetTrigAttributeStringRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TriggerStringAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTrigAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TriggerStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTrigAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::SetTrigAttributeTimestampRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + auto value_mbcs = convert_from_grpc(request->value()); + auto value = value_mbcs.c_str(); + auto status = library_->SetTrigAttributeString(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - auto value = convert_from_grpc(request->value()); - auto status = library_->SetTrigAttributeTimestamp(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetTrigAttributeUInt32(::grpc::ServerContext* context, const SetTrigAttributeUInt32Request* request, SetTrigAttributeUInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetTrigAttributeUInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TriggerUInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTrigAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TriggerUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetTrigAttributeTimestamp(::grpc::ServerContext* context, const SetTrigAttributeTimestampRequest* request, SetTrigAttributeTimestampResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetTrigAttributeTimestampRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TriggerTimestampAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTrigAttributeTimestampRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TriggerTimestampAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTrigAttributeTimestampRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::SetTrigAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + auto value = convert_from_grpc(request->value()); + auto status = library_->SetTrigAttributeTimestamp(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - uInt32 value = request->value(); - auto status = library_->SetTrigAttributeUInt32(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetWatchdogAttributeBool(::grpc::ServerContext* context, const SetWatchdogAttributeBoolRequest* request, SetWatchdogAttributeBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto lines_mbcs = convert_from_grpc(request->lines()); - auto lines = lines_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetWatchdogAttributeBoolRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::WatchdogBoolAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetWatchdogAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::WatchdogBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetWatchdogAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - bool32 value = request->value(); - auto status = library_->SetWatchdogAttributeBool(task, lines, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetWatchdogAttributeDouble(::grpc::ServerContext* context, const SetWatchdogAttributeDoubleRequest* request, SetWatchdogAttributeDoubleResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto lines_mbcs = convert_from_grpc(request->lines()); - auto lines = lines_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetWatchdogAttributeDoubleRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::WatchdogDoubleAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetWatchdogAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::WatchdogDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetWatchdogAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - float64 value = request->value(); - auto status = library_->SetWatchdogAttributeDouble(task, lines, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetTrigAttributeUInt32(::grpc::ServerContext* context, const SetTrigAttributeUInt32Request* request, SetTrigAttributeUInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetTrigAttributeUInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TriggerUInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTrigAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TriggerUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTrigAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetWatchdogAttributeInt32(::grpc::ServerContext* context, const SetWatchdogAttributeInt32Request* request, SetWatchdogAttributeInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto lines_mbcs = convert_from_grpc(request->lines()); - auto lines = lines_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetWatchdogAttributeInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::WatchdogInt32Attribute_IsValid(attribute) ? attribute : 0; - break; + uInt32 value = request->value(); + auto status = library_->SetTrigAttributeUInt32(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - case nidaqmx_grpc::SetWatchdogAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::WatchdogInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetWatchdogAttributeBool(::grpc::ServerContext* context, const SetWatchdogAttributeBoolRequest* request, SetWatchdogAttributeBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto lines_mbcs = convert_from_grpc(request->lines()); + auto lines = lines_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetWatchdogAttributeBoolRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::WatchdogBoolAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetWatchdogAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::WatchdogBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetWatchdogAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::SetWatchdogAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + bool32 value = request->value(); + auto status = library_->SetWatchdogAttributeBool(task, lines, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetWatchdogAttributeDouble(::grpc::ServerContext* context, const SetWatchdogAttributeDoubleRequest* request, SetWatchdogAttributeDoubleResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto lines_mbcs = convert_from_grpc(request->lines()); + auto lines = lines_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetWatchdogAttributeDoubleRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::WatchdogDoubleAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetWatchdogAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::WatchdogDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetWatchdogAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } - int32 value; - switch (request->value_enum_case()) { - case nidaqmx_grpc::SetWatchdogAttributeInt32Request::ValueEnumCase::kValue: { - value = static_cast(request->value()); - break; + float64 value = request->value(); + auto status = library_->SetWatchdogAttributeDouble(task, lines, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetWatchdogAttributeInt32(::grpc::ServerContext* context, const SetWatchdogAttributeInt32Request* request, SetWatchdogAttributeInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto lines_mbcs = convert_from_grpc(request->lines()); + auto lines = lines_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetWatchdogAttributeInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::WatchdogInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetWatchdogAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::WatchdogInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetWatchdogAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::SetWatchdogAttributeInt32Request::ValueEnumCase::kValueRaw: { - value = static_cast(request->value_raw()); - break; + + int32 value; + switch (request->value_enum_case()) { + case nidaqmx_grpc::SetWatchdogAttributeInt32Request::ValueEnumCase::kValue: { + value = static_cast(request->value()); + break; + } + case nidaqmx_grpc::SetWatchdogAttributeInt32Request::ValueEnumCase::kValueRaw: { + value = static_cast(request->value_raw()); + break; + } + case nidaqmx_grpc::SetWatchdogAttributeInt32Request::ValueEnumCase::VALUE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for value was not specified or out of range"); + break; + } } - case nidaqmx_grpc::SetWatchdogAttributeInt32Request::ValueEnumCase::VALUE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for value was not specified or out of range"); - break; + + auto status = library_->SetWatchdogAttributeInt32(task, lines, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetWatchdogAttributeString(::grpc::ServerContext* context, const SetWatchdogAttributeStringRequest* request, SetWatchdogAttributeStringResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto lines_mbcs = convert_from_grpc(request->lines()); + auto lines = lines_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetWatchdogAttributeStringRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::WatchdogStringAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetWatchdogAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::WatchdogStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetWatchdogAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } - auto status = library_->SetWatchdogAttributeInt32(task, lines, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + auto value_mbcs = convert_from_grpc(request->value()); + auto value = value_mbcs.c_str(); + auto status = library_->SetWatchdogAttributeString(task, lines, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetWatchdogAttributeString(::grpc::ServerContext* context, const SetWatchdogAttributeStringRequest* request, SetWatchdogAttributeStringResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto lines_mbcs = convert_from_grpc(request->lines()); - auto lines = lines_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetWatchdogAttributeStringRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::WatchdogStringAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetWatchdogAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::WatchdogStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetWatchdogAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - auto value_mbcs = convert_from_grpc(request->value()); - auto value = value_mbcs.c_str(); - auto status = library_->SetWatchdogAttributeString(task, lines, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetWriteAttributeBool(::grpc::ServerContext* context, const SetWriteAttributeBoolRequest* request, SetWriteAttributeBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetWriteAttributeBoolRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::WriteBoolAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetWriteAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::WriteBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetWriteAttributeBool(::grpc::ServerContext* context, const SetWriteAttributeBoolRequest* request, SetWriteAttributeBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetWriteAttributeBoolRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::WriteBoolAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetWriteAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::WriteBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetWriteAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::SetWriteAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + bool32 value = request->value(); + auto status = library_->SetWriteAttributeBool(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - bool32 value = request->value(); - auto status = library_->SetWriteAttributeBool(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetWriteAttributeDouble(::grpc::ServerContext* context, const SetWriteAttributeDoubleRequest* request, SetWriteAttributeDoubleResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetWriteAttributeDoubleRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::WriteDoubleAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetWriteAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::WriteDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetWriteAttributeDouble(::grpc::ServerContext* context, const SetWriteAttributeDoubleRequest* request, SetWriteAttributeDoubleResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetWriteAttributeDoubleRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::WriteDoubleAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetWriteAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::WriteDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetWriteAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::SetWriteAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + float64 value = request->value(); + auto status = library_->SetWriteAttributeDouble(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - float64 value = request->value(); - auto status = library_->SetWriteAttributeDouble(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetWriteAttributeInt32(::grpc::ServerContext* context, const SetWriteAttributeInt32Request* request, SetWriteAttributeInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetWriteAttributeInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::WriteInt32Attribute_IsValid(attribute) ? attribute : 0; - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetWriteAttributeInt32(::grpc::ServerContext* context, const SetWriteAttributeInt32Request* request, SetWriteAttributeInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetWriteAttributeInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::WriteInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetWriteAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::WriteInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetWriteAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::SetWriteAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::WriteInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; + + int32 value; + switch (request->value_enum_case()) { + case nidaqmx_grpc::SetWriteAttributeInt32Request::ValueEnumCase::kValue: { + value = static_cast(request->value()); + break; + } + case nidaqmx_grpc::SetWriteAttributeInt32Request::ValueEnumCase::kValueRaw: { + value = static_cast(request->value_raw()); + break; + } + case nidaqmx_grpc::SetWriteAttributeInt32Request::ValueEnumCase::VALUE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for value was not specified or out of range"); + break; + } } - case nidaqmx_grpc::SetWriteAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + auto status = library_->SetWriteAttributeInt32(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } + } - int32 value; - switch (request->value_enum_case()) { - case nidaqmx_grpc::SetWriteAttributeInt32Request::ValueEnumCase::kValue: { - value = static_cast(request->value()); - break; - } - case nidaqmx_grpc::SetWriteAttributeInt32Request::ValueEnumCase::kValueRaw: { - value = static_cast(request->value_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetWriteAttributeString(::grpc::ServerContext* context, const SetWriteAttributeStringRequest* request, SetWriteAttributeStringResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetWriteAttributeStringRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::WriteStringAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetWriteAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::WriteStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetWriteAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::SetWriteAttributeInt32Request::ValueEnumCase::VALUE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for value was not specified or out of range"); - break; + + auto value_mbcs = convert_from_grpc(request->value()); + auto value = value_mbcs.c_str(); + auto status = library_->SetWriteAttributeString(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - auto status = library_->SetWriteAttributeInt32(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetWriteAttributeString(::grpc::ServerContext* context, const SetWriteAttributeStringRequest* request, SetWriteAttributeStringResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetWriteAttributeStringRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::WriteStringAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetWriteAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::WriteStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetWriteAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - auto value_mbcs = convert_from_grpc(request->value()); - auto value = value_mbcs.c_str(); - auto status = library_->SetWriteAttributeString(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetWriteAttributeUInt32(::grpc::ServerContext* context, const SetWriteAttributeUInt32Request* request, SetWriteAttributeUInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetWriteAttributeUInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::WriteUInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetWriteAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::WriteUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetWriteAttributeUInt32(::grpc::ServerContext* context, const SetWriteAttributeUInt32Request* request, SetWriteAttributeUInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetWriteAttributeUInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::WriteUInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetWriteAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::WriteUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetWriteAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::SetWriteAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + uInt32 value = request->value(); + auto status = library_->SetWriteAttributeUInt32(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - uInt32 value = request->value(); - auto status = library_->SetWriteAttributeUInt32(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetWriteAttributeUInt64(::grpc::ServerContext* context, const SetWriteAttributeUInt64Request* request, SetWriteAttributeUInt64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetWriteAttributeUInt64Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::WriteUInt64Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetWriteAttributeUInt64Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::WriteUInt64Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetWriteAttributeUInt64(::grpc::ServerContext* context, const SetWriteAttributeUInt64Request* request, SetWriteAttributeUInt64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetWriteAttributeUInt64Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::WriteUInt64Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetWriteAttributeUInt64Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::WriteUInt64Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetWriteAttributeUInt64Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::SetWriteAttributeUInt64Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + uInt64 value = request->value(); + auto status = library_->SetWriteAttributeUInt64(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - uInt64 value = request->value(); - auto status = library_->SetWriteAttributeUInt64(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::StartNewFile(::grpc::ServerContext* context, const StartNewFileRequest* request, StartNewFileResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto file_path_mbcs = convert_from_grpc(request->file_path()); - auto file_path = file_path_mbcs.c_str(); - auto status = library_->StartNewFile(task, file_path); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::StartNewFile(::grpc::ServerContext* context, const StartNewFileRequest* request, StartNewFileResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto file_path_mbcs = convert_from_grpc(request->file_path()); + auto file_path = file_path_mbcs.c_str(); + auto status = library_->StartNewFile(task, file_path); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::StartTask(::grpc::ServerContext* context, const StartTaskRequest* request, StartTaskResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto status = library_->StartTask(task); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::StartTask(::grpc::ServerContext* context, const StartTaskRequest* request, StartTaskResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto status = library_->StartTask(task); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::StopTask(::grpc::ServerContext* context, const StopTaskRequest* request, StopTaskResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto status = library_->StopTask(task); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::StopTask(::grpc::ServerContext* context, const StopTaskRequest* request, StopTaskResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto status = library_->StopTask(task); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::TaskControl(::grpc::ServerContext* context, const TaskControlRequest* request, TaskControlResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 action; - switch (request->action_enum_case()) { - case nidaqmx_grpc::TaskControlRequest::ActionEnumCase::kAction: { - action = static_cast(request->action()); - break; - } - case nidaqmx_grpc::TaskControlRequest::ActionEnumCase::kActionRaw: { - action = static_cast(request->action_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::TaskControl(::grpc::ServerContext* context, const TaskControlRequest* request, TaskControlResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 action; + switch (request->action_enum_case()) { + case nidaqmx_grpc::TaskControlRequest::ActionEnumCase::kAction: { + action = static_cast(request->action()); + break; + } + case nidaqmx_grpc::TaskControlRequest::ActionEnumCase::kActionRaw: { + action = static_cast(request->action_raw()); + break; + } + case nidaqmx_grpc::TaskControlRequest::ActionEnumCase::ACTION_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for action was not specified or out of range"); + break; + } } - case nidaqmx_grpc::TaskControlRequest::ActionEnumCase::ACTION_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for action was not specified or out of range"); - break; + + auto status = library_->TaskControl(task, action); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - auto status = library_->TaskControl(task, action); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::TristateOutputTerm(::grpc::ServerContext* context, const TristateOutputTermRequest* request, TristateOutputTermResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto output_terminal_mbcs = convert_from_grpc(request->output_terminal()); - auto output_terminal = output_terminal_mbcs.c_str(); - auto status = library_->TristateOutputTerm(output_terminal); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::TristateOutputTerm(::grpc::ServerContext* context, const TristateOutputTermRequest* request, TristateOutputTermResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto output_terminal_mbcs = convert_from_grpc(request->output_terminal()); + auto output_terminal = output_terminal_mbcs.c_str(); + auto status = library_->TristateOutputTerm(output_terminal); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::UnregisterDoneEvent(::grpc::ServerContext* context, const UnregisterDoneEventRequest* request, UnregisterDoneEventResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto options = 0U; - auto callback_function = nullptr; - auto callback_data = nullptr; - auto status = library_->UnregisterDoneEvent(task, options, callback_function, callback_data); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::UnregisterDoneEvent(::grpc::ServerContext* context, const UnregisterDoneEventRequest* request, UnregisterDoneEventResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto options = 0U; + auto callback_function = nullptr; + auto callback_data = nullptr; + auto status = library_->UnregisterDoneEvent(task, options, callback_function, callback_data); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::UnregisterEveryNSamplesEvent(::grpc::ServerContext* context, const UnregisterEveryNSamplesEventRequest* request, UnregisterEveryNSamplesEventResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 every_n_samples_event_type; - switch (request->every_n_samples_event_type_enum_case()) { - case nidaqmx_grpc::UnregisterEveryNSamplesEventRequest::EveryNSamplesEventTypeEnumCase::kEveryNSamplesEventType: { - every_n_samples_event_type = static_cast(request->every_n_samples_event_type()); - break; - } - case nidaqmx_grpc::UnregisterEveryNSamplesEventRequest::EveryNSamplesEventTypeEnumCase::kEveryNSamplesEventTypeRaw: { - every_n_samples_event_type = static_cast(request->every_n_samples_event_type_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::UnregisterEveryNSamplesEvent(::grpc::ServerContext* context, const UnregisterEveryNSamplesEventRequest* request, UnregisterEveryNSamplesEventResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 every_n_samples_event_type; + switch (request->every_n_samples_event_type_enum_case()) { + case nidaqmx_grpc::UnregisterEveryNSamplesEventRequest::EveryNSamplesEventTypeEnumCase::kEveryNSamplesEventType: { + every_n_samples_event_type = static_cast(request->every_n_samples_event_type()); + break; + } + case nidaqmx_grpc::UnregisterEveryNSamplesEventRequest::EveryNSamplesEventTypeEnumCase::kEveryNSamplesEventTypeRaw: { + every_n_samples_event_type = static_cast(request->every_n_samples_event_type_raw()); + break; + } + case nidaqmx_grpc::UnregisterEveryNSamplesEventRequest::EveryNSamplesEventTypeEnumCase::EVERY_N_SAMPLES_EVENT_TYPE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for every_n_samples_event_type was not specified or out of range"); + break; + } } - case nidaqmx_grpc::UnregisterEveryNSamplesEventRequest::EveryNSamplesEventTypeEnumCase::EVERY_N_SAMPLES_EVENT_TYPE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for every_n_samples_event_type was not specified or out of range"); - break; + + auto n_samples = 0U; + auto options = 0U; + auto callback_function = nullptr; + auto callback_data = nullptr; + auto status = library_->UnregisterEveryNSamplesEvent(task, every_n_samples_event_type, n_samples, options, callback_function, callback_data); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - auto n_samples = 0U; - auto options = 0U; - auto callback_function = nullptr; - auto callback_data = nullptr; - auto status = library_->UnregisterEveryNSamplesEvent(task, every_n_samples_event_type, n_samples, options, callback_function, callback_data); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::UnregisterSignalEvent(::grpc::ServerContext* context, const UnregisterSignalEventRequest* request, UnregisterSignalEventResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 signal_id; - switch (request->signal_id_enum_case()) { - case nidaqmx_grpc::UnregisterSignalEventRequest::SignalIdEnumCase::kSignalId: { - signal_id = static_cast(request->signal_id()); - break; - } - case nidaqmx_grpc::UnregisterSignalEventRequest::SignalIdEnumCase::kSignalIdRaw: { - signal_id = static_cast(request->signal_id_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::UnregisterSignalEvent(::grpc::ServerContext* context, const UnregisterSignalEventRequest* request, UnregisterSignalEventResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 signal_id; + switch (request->signal_id_enum_case()) { + case nidaqmx_grpc::UnregisterSignalEventRequest::SignalIdEnumCase::kSignalId: { + signal_id = static_cast(request->signal_id()); + break; + } + case nidaqmx_grpc::UnregisterSignalEventRequest::SignalIdEnumCase::kSignalIdRaw: { + signal_id = static_cast(request->signal_id_raw()); + break; + } + case nidaqmx_grpc::UnregisterSignalEventRequest::SignalIdEnumCase::SIGNAL_ID_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for signal_id was not specified or out of range"); + break; + } } - case nidaqmx_grpc::UnregisterSignalEventRequest::SignalIdEnumCase::SIGNAL_ID_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for signal_id was not specified or out of range"); - break; + + auto options = 0U; + auto callback_function = nullptr; + auto callback_data = nullptr; + auto status = library_->UnregisterSignalEvent(task, signal_id, options, callback_function, callback_data); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - auto options = 0U; - auto callback_function = nullptr; - auto callback_data = nullptr; - auto status = library_->UnregisterSignalEvent(task, signal_id, options, callback_function, callback_data); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::UnreserveNetworkDevice(::grpc::ServerContext* context, const UnreserveNetworkDeviceRequest* request, UnreserveNetworkDeviceResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - auto status = library_->UnreserveNetworkDevice(device_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::UnreserveNetworkDevice(::grpc::ServerContext* context, const UnreserveNetworkDeviceRequest* request, UnreserveNetworkDeviceResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + auto status = library_->UnreserveNetworkDevice(device_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::WaitForNextSampleClock(::grpc::ServerContext* context, const WaitForNextSampleClockRequest* request, WaitForNextSampleClockResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + float64 timeout = request->timeout(); + bool32 is_late {}; + auto status = library_->WaitForNextSampleClock(task, timeout, &is_late); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + response->set_is_late(is_late); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::WaitForNextSampleClock(::grpc::ServerContext* context, const WaitForNextSampleClockRequest* request, WaitForNextSampleClockResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - float64 timeout = request->timeout(); - bool32 is_late{}; - auto status = library_->WaitForNextSampleClock(task, timeout, &is_late); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_is_late(is_late); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginWaitForNextSampleClock(::grpc::ServerContext* context, const BeginWaitForNextSampleClockRequest* request, BeginWaitForNextSampleClockResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + float64 timeout = request->timeout(); -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginWaitForNextSampleClock(::grpc::ServerContext* context, const BeginWaitForNextSampleClockRequest* request, BeginWaitForNextSampleClockResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - float64 timeout = request->timeout(); - - auto data = std::make_unique(); - data->task = task; - data->timeout = timeout; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWaitForNextSampleClock", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + auto data = std::make_unique(); + data->task = task; + data->timeout = timeout; + data->library = std::shared_ptr(library_); -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::WaitForValidTimestamp(::grpc::ServerContext* context, const WaitForValidTimestampRequest* request, WaitForValidTimestampResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWaitForNextSampleClock", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 timestamp_event; - switch (request->timestamp_event_enum_case()) { - case nidaqmx_grpc::WaitForValidTimestampRequest::TimestampEventEnumCase::kTimestampEvent: { - timestamp_event = static_cast(request->timestamp_event()); - break; + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::WaitForValidTimestamp(::grpc::ServerContext* context, const WaitForValidTimestampRequest* request, WaitForValidTimestampResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 timestamp_event; + switch (request->timestamp_event_enum_case()) { + case nidaqmx_grpc::WaitForValidTimestampRequest::TimestampEventEnumCase::kTimestampEvent: { + timestamp_event = static_cast(request->timestamp_event()); + break; + } + case nidaqmx_grpc::WaitForValidTimestampRequest::TimestampEventEnumCase::kTimestampEventRaw: { + timestamp_event = static_cast(request->timestamp_event_raw()); + break; + } + case nidaqmx_grpc::WaitForValidTimestampRequest::TimestampEventEnumCase::TIMESTAMP_EVENT_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for timestamp_event was not specified or out of range"); + break; + } } - case nidaqmx_grpc::WaitForValidTimestampRequest::TimestampEventEnumCase::kTimestampEventRaw: { - timestamp_event = static_cast(request->timestamp_event_raw()); - break; + + float64 timeout = request->timeout(); + CVIAbsoluteTime timestamp {}; + auto status = library_->WaitForValidTimestamp(task, timestamp_event, timeout, ×tamp); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - case nidaqmx_grpc::WaitForValidTimestampRequest::TimestampEventEnumCase::TIMESTAMP_EVENT_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for timestamp_event was not specified or out of range"); - break; + response->set_status(status); + convert_to_grpc(timestamp, response->mutable_timestamp()); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::WaitUntilTaskDone(::grpc::ServerContext* context, const WaitUntilTaskDoneRequest* request, WaitUntilTaskDoneResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + float64 time_to_wait = request->time_to_wait(); + auto status = library_->WaitUntilTaskDone(task, time_to_wait); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::WriteAnalogF64(::grpc::ServerContext* context, const WriteAnalogF64Request* request, WriteAnalogF64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + int32 data_layout; + switch (request->data_layout_enum_case()) { + case nidaqmx_grpc::WriteAnalogF64Request::DataLayoutEnumCase::kDataLayout: { + data_layout = static_cast(request->data_layout()); + break; + } + case nidaqmx_grpc::WriteAnalogF64Request::DataLayoutEnumCase::kDataLayoutRaw: { + data_layout = static_cast(request->data_layout_raw()); + break; + } + case nidaqmx_grpc::WriteAnalogF64Request::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); + break; + } + } - float64 timeout = request->timeout(); - CVIAbsoluteTime timestamp{}; - auto status = library_->WaitForValidTimestamp(task, timestamp_event, timeout, ×tamp); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + auto write_array = const_cast(request->write_array().data()); + auto reserved = nullptr; + int32 samps_per_chan_written {}; + auto status = library_->WriteAnalogF64(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array, &samps_per_chan_written, reserved); + context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(samps_per_chan_written)); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + response->set_samps_per_chan_written(samps_per_chan_written); + return ::grpc::Status::OK; } - response->set_status(status); - convert_to_grpc(timestamp, response->mutable_timestamp()); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginWriteAnalogF64(::grpc::ServerContext* context, const BeginWriteAnalogF64Request* request, BeginWriteAnalogF64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + int32 data_layout; + switch (request->data_layout_enum_case()) { + case nidaqmx_grpc::BeginWriteAnalogF64Request::DataLayoutEnumCase::kDataLayout: { + data_layout = static_cast(request->data_layout()); + break; + } + case nidaqmx_grpc::BeginWriteAnalogF64Request::DataLayoutEnumCase::kDataLayoutRaw: { + data_layout = static_cast(request->data_layout_raw()); + break; + } + case nidaqmx_grpc::BeginWriteAnalogF64Request::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::WaitUntilTaskDone(::grpc::ServerContext* context, const WaitUntilTaskDoneRequest* request, WaitUntilTaskDoneResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - float64 time_to_wait = request->time_to_wait(); - auto status = library_->WaitUntilTaskDone(task, time_to_wait); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + auto reserved = nullptr; -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::WriteAnalogF64(::grpc::ServerContext* context, const WriteAnalogF64Request* request, WriteAnalogF64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - bool32 auto_start = request->auto_start(); - float64 timeout = request->timeout(); - int32 data_layout; - switch (request->data_layout_enum_case()) { - case nidaqmx_grpc::WriteAnalogF64Request::DataLayoutEnumCase::kDataLayout: { - data_layout = static_cast(request->data_layout()); - break; - } - case nidaqmx_grpc::WriteAnalogF64Request::DataLayoutEnumCase::kDataLayoutRaw: { - data_layout = static_cast(request->data_layout_raw()); - break; - } - case nidaqmx_grpc::WriteAnalogF64Request::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); - break; - } - } - - auto write_array = const_cast(request->write_array().data()); - auto reserved = nullptr; - int32 samps_per_chan_written{}; - auto status = library_->WriteAnalogF64(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array, &samps_per_chan_written, reserved); - context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(samps_per_chan_written)); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_samps_per_chan_written(samps_per_chan_written); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->auto_start = auto_start; + data->timeout = timeout; + data->data_layout = data_layout; + data->reserved = reserved; + data->library = std::shared_ptr(library_); -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginWriteAnalogF64(::grpc::ServerContext* context, const BeginWriteAnalogF64Request* request, BeginWriteAnalogF64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - bool32 auto_start = request->auto_start(); - float64 timeout = request->timeout(); - int32 data_layout; - switch (request->data_layout_enum_case()) { - case nidaqmx_grpc::BeginWriteAnalogF64Request::DataLayoutEnumCase::kDataLayout: { - data_layout = static_cast(request->data_layout()); - break; - } - case nidaqmx_grpc::BeginWriteAnalogF64Request::DataLayoutEnumCase::kDataLayoutRaw: { - data_layout = static_cast(request->data_layout_raw()); - break; - } - case nidaqmx_grpc::BeginWriteAnalogF64Request::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); - break; - } - } - - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->num_samps_per_chan = num_samps_per_chan; - data->auto_start = auto_start; - data->timeout = timeout; - data->data_layout = data_layout; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteAnalogF64", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteAnalogF64", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::WriteAnalogScalarF64(::grpc::ServerContext* context, const WriteAnalogScalarF64Request* request, WriteAnalogScalarF64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - bool32 auto_start = request->auto_start(); - float64 timeout = request->timeout(); - float64 value = request->value(); - auto reserved = nullptr; - auto status = library_->WriteAnalogScalarF64(task, auto_start, timeout, value, reserved); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::WriteAnalogScalarF64(::grpc::ServerContext* context, const WriteAnalogScalarF64Request* request, WriteAnalogScalarF64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + float64 value = request->value(); + auto reserved = nullptr; + auto status = library_->WriteAnalogScalarF64(task, auto_start, timeout, value, reserved); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginWriteAnalogScalarF64(::grpc::ServerContext* context, const BeginWriteAnalogScalarF64Request* request, BeginWriteAnalogScalarF64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - bool32 auto_start = request->auto_start(); - float64 timeout = request->timeout(); - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->auto_start = auto_start; - data->timeout = timeout; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteAnalogScalarF64", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginWriteAnalogScalarF64(::grpc::ServerContext* context, const BeginWriteAnalogScalarF64Request* request, BeginWriteAnalogScalarF64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + auto reserved = nullptr; -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::WriteBinaryI16(::grpc::ServerContext* context, const WriteBinaryI16Request* request, WriteBinaryI16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - bool32 auto_start = request->auto_start(); - float64 timeout = request->timeout(); - int32 data_layout; - switch (request->data_layout_enum_case()) { - case nidaqmx_grpc::WriteBinaryI16Request::DataLayoutEnumCase::kDataLayout: { - data_layout = static_cast(request->data_layout()); - break; - } - case nidaqmx_grpc::WriteBinaryI16Request::DataLayoutEnumCase::kDataLayoutRaw: { - data_layout = static_cast(request->data_layout_raw()); - break; - } - case nidaqmx_grpc::WriteBinaryI16Request::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); - break; - } + auto data = std::make_unique(); + data->task = task; + data->auto_start = auto_start; + data->timeout = timeout; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteAnalogScalarF64", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::WriteBinaryI16(::grpc::ServerContext* context, const WriteBinaryI16Request* request, WriteBinaryI16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + int32 data_layout; + switch (request->data_layout_enum_case()) { + case nidaqmx_grpc::WriteBinaryI16Request::DataLayoutEnumCase::kDataLayout: { + data_layout = static_cast(request->data_layout()); + break; + } + case nidaqmx_grpc::WriteBinaryI16Request::DataLayoutEnumCase::kDataLayoutRaw: { + data_layout = static_cast(request->data_layout_raw()); + break; + } + case nidaqmx_grpc::WriteBinaryI16Request::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); + break; + } + } - auto write_array_raw = request->write_array(); - auto write_array = std::vector(); - write_array.reserve(write_array_raw.size()); - std::transform( + auto write_array_raw = request->write_array(); + auto write_array = std::vector(); + write_array.reserve(write_array_raw.size()); + std::transform( write_array_raw.begin(), write_array_raw.end(), std::back_inserter(write_array), [](auto x) { - if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { - std::string message("value "); - message.append(std::to_string(x)); - message.append(" doesn't fit in datatype "); - message.append("int16"); - throw nidevice_grpc::ValueOutOfRangeException(message); - } - return static_cast(x); + if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { + std::string message("value "); + message.append(std::to_string(x)); + message.append(" doesn't fit in datatype "); + message.append("int16"); + throw nidevice_grpc::ValueOutOfRangeException(message); + } + return static_cast(x); }); - auto reserved = nullptr; - int32 samps_per_chan_written{}; - auto status = library_->WriteBinaryI16(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array.data(), &samps_per_chan_written, reserved); - context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(samps_per_chan_written)); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + auto reserved = nullptr; + int32 samps_per_chan_written {}; + auto status = library_->WriteBinaryI16(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array.data(), &samps_per_chan_written, reserved); + context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(samps_per_chan_written)); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + response->set_samps_per_chan_written(samps_per_chan_written); + return ::grpc::Status::OK; } - response->set_status(status); - response->set_samps_per_chan_written(samps_per_chan_written); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginWriteBinaryI16(::grpc::ServerContext* context, const BeginWriteBinaryI16Request* request, BeginWriteBinaryI16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - bool32 auto_start = request->auto_start(); - float64 timeout = request->timeout(); - int32 data_layout; - switch (request->data_layout_enum_case()) { - case nidaqmx_grpc::BeginWriteBinaryI16Request::DataLayoutEnumCase::kDataLayout: { - data_layout = static_cast(request->data_layout()); - break; - } - case nidaqmx_grpc::BeginWriteBinaryI16Request::DataLayoutEnumCase::kDataLayoutRaw: { - data_layout = static_cast(request->data_layout_raw()); - break; - } - case nidaqmx_grpc::BeginWriteBinaryI16Request::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); - break; - } - } - - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->num_samps_per_chan = num_samps_per_chan; - data->auto_start = auto_start; - data->timeout = timeout; - data->data_layout = data_layout; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteBinaryI16", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginWriteBinaryI16(::grpc::ServerContext* context, const BeginWriteBinaryI16Request* request, BeginWriteBinaryI16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + int32 data_layout; + switch (request->data_layout_enum_case()) { + case nidaqmx_grpc::BeginWriteBinaryI16Request::DataLayoutEnumCase::kDataLayout: { + data_layout = static_cast(request->data_layout()); + break; + } + case nidaqmx_grpc::BeginWriteBinaryI16Request::DataLayoutEnumCase::kDataLayoutRaw: { + data_layout = static_cast(request->data_layout_raw()); + break; + } + case nidaqmx_grpc::BeginWriteBinaryI16Request::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::WriteBinaryI32(::grpc::ServerContext* context, const WriteBinaryI32Request* request, WriteBinaryI32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - bool32 auto_start = request->auto_start(); - float64 timeout = request->timeout(); - int32 data_layout; - switch (request->data_layout_enum_case()) { - case nidaqmx_grpc::WriteBinaryI32Request::DataLayoutEnumCase::kDataLayout: { - data_layout = static_cast(request->data_layout()); - break; - } - case nidaqmx_grpc::WriteBinaryI32Request::DataLayoutEnumCase::kDataLayoutRaw: { - data_layout = static_cast(request->data_layout_raw()); - break; - } - case nidaqmx_grpc::WriteBinaryI32Request::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); - break; - } - } - - auto write_array = reinterpret_cast(request->write_array().data()); - auto reserved = nullptr; - int32 samps_per_chan_written{}; - auto status = library_->WriteBinaryI32(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array, &samps_per_chan_written, reserved); - context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(samps_per_chan_written)); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_samps_per_chan_written(samps_per_chan_written); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + auto reserved = nullptr; -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginWriteBinaryI32(::grpc::ServerContext* context, const BeginWriteBinaryI32Request* request, BeginWriteBinaryI32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - bool32 auto_start = request->auto_start(); - float64 timeout = request->timeout(); - int32 data_layout; - switch (request->data_layout_enum_case()) { - case nidaqmx_grpc::BeginWriteBinaryI32Request::DataLayoutEnumCase::kDataLayout: { - data_layout = static_cast(request->data_layout()); - break; - } - case nidaqmx_grpc::BeginWriteBinaryI32Request::DataLayoutEnumCase::kDataLayoutRaw: { - data_layout = static_cast(request->data_layout_raw()); - break; - } - case nidaqmx_grpc::BeginWriteBinaryI32Request::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); - break; - } - } - - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->num_samps_per_chan = num_samps_per_chan; - data->auto_start = auto_start; - data->timeout = timeout; - data->data_layout = data_layout; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteBinaryI32", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->auto_start = auto_start; + data->timeout = timeout; + data->data_layout = data_layout; + data->reserved = reserved; + data->library = std::shared_ptr(library_); -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::WriteBinaryU16(::grpc::ServerContext* context, const WriteBinaryU16Request* request, WriteBinaryU16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - bool32 auto_start = request->auto_start(); - float64 timeout = request->timeout(); - int32 data_layout; - switch (request->data_layout_enum_case()) { - case nidaqmx_grpc::WriteBinaryU16Request::DataLayoutEnumCase::kDataLayout: { - data_layout = static_cast(request->data_layout()); - break; + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteBinaryI16", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::WriteBinaryI32(::grpc::ServerContext* context, const WriteBinaryI32Request* request, WriteBinaryI32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + int32 data_layout; + switch (request->data_layout_enum_case()) { + case nidaqmx_grpc::WriteBinaryI32Request::DataLayoutEnumCase::kDataLayout: { + data_layout = static_cast(request->data_layout()); + break; + } + case nidaqmx_grpc::WriteBinaryI32Request::DataLayoutEnumCase::kDataLayoutRaw: { + data_layout = static_cast(request->data_layout_raw()); + break; + } + case nidaqmx_grpc::WriteBinaryI32Request::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); + break; + } } - case nidaqmx_grpc::WriteBinaryU16Request::DataLayoutEnumCase::kDataLayoutRaw: { - data_layout = static_cast(request->data_layout_raw()); - break; + + auto write_array = reinterpret_cast(request->write_array().data()); + auto reserved = nullptr; + int32 samps_per_chan_written {}; + auto status = library_->WriteBinaryI32(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array, &samps_per_chan_written, reserved); + context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(samps_per_chan_written)); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - case nidaqmx_grpc::WriteBinaryU16Request::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); - break; + response->set_status(status); + response->set_samps_per_chan_written(samps_per_chan_written); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginWriteBinaryI32(::grpc::ServerContext* context, const BeginWriteBinaryI32Request* request, BeginWriteBinaryI32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + int32 data_layout; + switch (request->data_layout_enum_case()) { + case nidaqmx_grpc::BeginWriteBinaryI32Request::DataLayoutEnumCase::kDataLayout: { + data_layout = static_cast(request->data_layout()); + break; + } + case nidaqmx_grpc::BeginWriteBinaryI32Request::DataLayoutEnumCase::kDataLayoutRaw: { + data_layout = static_cast(request->data_layout_raw()); + break; + } + case nidaqmx_grpc::BeginWriteBinaryI32Request::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); + break; + } } + + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->auto_start = auto_start; + data->timeout = timeout; + data->data_layout = data_layout; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteBinaryI32", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::WriteBinaryU16(::grpc::ServerContext* context, const WriteBinaryU16Request* request, WriteBinaryU16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + int32 data_layout; + switch (request->data_layout_enum_case()) { + case nidaqmx_grpc::WriteBinaryU16Request::DataLayoutEnumCase::kDataLayout: { + data_layout = static_cast(request->data_layout()); + break; + } + case nidaqmx_grpc::WriteBinaryU16Request::DataLayoutEnumCase::kDataLayoutRaw: { + data_layout = static_cast(request->data_layout_raw()); + break; + } + case nidaqmx_grpc::WriteBinaryU16Request::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); + break; + } + } - auto write_array_raw = request->write_array(); - auto write_array = std::vector(); - write_array.reserve(write_array_raw.size()); - std::transform( + auto write_array_raw = request->write_array(); + auto write_array = std::vector(); + write_array.reserve(write_array_raw.size()); + std::transform( write_array_raw.begin(), write_array_raw.end(), std::back_inserter(write_array), [](auto x) { - if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { - std::string message("value "); - message.append(std::to_string(x)); - message.append(" doesn't fit in datatype "); - message.append("uInt16"); - throw nidevice_grpc::ValueOutOfRangeException(message); - } - return static_cast(x); + if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { + std::string message("value "); + message.append(std::to_string(x)); + message.append(" doesn't fit in datatype "); + message.append("uInt16"); + throw nidevice_grpc::ValueOutOfRangeException(message); + } + return static_cast(x); }); - auto reserved = nullptr; - int32 samps_per_chan_written{}; - auto status = library_->WriteBinaryU16(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array.data(), &samps_per_chan_written, reserved); - context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(samps_per_chan_written)); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + auto reserved = nullptr; + int32 samps_per_chan_written {}; + auto status = library_->WriteBinaryU16(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array.data(), &samps_per_chan_written, reserved); + context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(samps_per_chan_written)); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + response->set_samps_per_chan_written(samps_per_chan_written); + return ::grpc::Status::OK; } - response->set_status(status); - response->set_samps_per_chan_written(samps_per_chan_written); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginWriteBinaryU16(::grpc::ServerContext* context, const BeginWriteBinaryU16Request* request, BeginWriteBinaryU16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + int32 data_layout; + switch (request->data_layout_enum_case()) { + case nidaqmx_grpc::BeginWriteBinaryU16Request::DataLayoutEnumCase::kDataLayout: { + data_layout = static_cast(request->data_layout()); + break; + } + case nidaqmx_grpc::BeginWriteBinaryU16Request::DataLayoutEnumCase::kDataLayoutRaw: { + data_layout = static_cast(request->data_layout_raw()); + break; + } + case nidaqmx_grpc::BeginWriteBinaryU16Request::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginWriteBinaryU16(::grpc::ServerContext* context, const BeginWriteBinaryU16Request* request, BeginWriteBinaryU16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - bool32 auto_start = request->auto_start(); - float64 timeout = request->timeout(); - int32 data_layout; - switch (request->data_layout_enum_case()) { - case nidaqmx_grpc::BeginWriteBinaryU16Request::DataLayoutEnumCase::kDataLayout: { - data_layout = static_cast(request->data_layout()); - break; - } - case nidaqmx_grpc::BeginWriteBinaryU16Request::DataLayoutEnumCase::kDataLayoutRaw: { - data_layout = static_cast(request->data_layout_raw()); - break; - } - case nidaqmx_grpc::BeginWriteBinaryU16Request::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); - break; - } - } - - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->num_samps_per_chan = num_samps_per_chan; - data->auto_start = auto_start; - data->timeout = timeout; - data->data_layout = data_layout; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteBinaryU16", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + auto reserved = nullptr; -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::WriteBinaryU32(::grpc::ServerContext* context, const WriteBinaryU32Request* request, WriteBinaryU32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - bool32 auto_start = request->auto_start(); - float64 timeout = request->timeout(); - int32 data_layout; - switch (request->data_layout_enum_case()) { - case nidaqmx_grpc::WriteBinaryU32Request::DataLayoutEnumCase::kDataLayout: { - data_layout = static_cast(request->data_layout()); - break; - } - case nidaqmx_grpc::WriteBinaryU32Request::DataLayoutEnumCase::kDataLayoutRaw: { - data_layout = static_cast(request->data_layout_raw()); - break; - } - case nidaqmx_grpc::WriteBinaryU32Request::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); - break; - } - } - - auto write_array = reinterpret_cast(request->write_array().data()); - auto reserved = nullptr; - int32 samps_per_chan_written{}; - auto status = library_->WriteBinaryU32(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array, &samps_per_chan_written, reserved); - context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(samps_per_chan_written)); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_samps_per_chan_written(samps_per_chan_written); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->auto_start = auto_start; + data->timeout = timeout; + data->data_layout = data_layout; + data->reserved = reserved; + data->library = std::shared_ptr(library_); -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginWriteBinaryU32(::grpc::ServerContext* context, const BeginWriteBinaryU32Request* request, BeginWriteBinaryU32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - bool32 auto_start = request->auto_start(); - float64 timeout = request->timeout(); - int32 data_layout; - switch (request->data_layout_enum_case()) { - case nidaqmx_grpc::BeginWriteBinaryU32Request::DataLayoutEnumCase::kDataLayout: { - data_layout = static_cast(request->data_layout()); - break; - } - case nidaqmx_grpc::BeginWriteBinaryU32Request::DataLayoutEnumCase::kDataLayoutRaw: { - data_layout = static_cast(request->data_layout_raw()); - break; - } - case nidaqmx_grpc::BeginWriteBinaryU32Request::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); - break; - } - } - - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->num_samps_per_chan = num_samps_per_chan; - data->auto_start = auto_start; - data->timeout = timeout; - data->data_layout = data_layout; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteBinaryU32", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteBinaryU16", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::WriteBinaryU32(::grpc::ServerContext* context, const WriteBinaryU32Request* request, WriteBinaryU32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + int32 data_layout; + switch (request->data_layout_enum_case()) { + case nidaqmx_grpc::WriteBinaryU32Request::DataLayoutEnumCase::kDataLayout: { + data_layout = static_cast(request->data_layout()); + break; + } + case nidaqmx_grpc::WriteBinaryU32Request::DataLayoutEnumCase::kDataLayoutRaw: { + data_layout = static_cast(request->data_layout_raw()); + break; + } + case nidaqmx_grpc::WriteBinaryU32Request::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::WriteCtrFreq(::grpc::ServerContext* context, const WriteCtrFreqRequest* request, WriteCtrFreqResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - bool32 auto_start = request->auto_start(); - float64 timeout = request->timeout(); - int32 data_layout; - switch (request->data_layout_enum_case()) { - case nidaqmx_grpc::WriteCtrFreqRequest::DataLayoutEnumCase::kDataLayout: { - data_layout = static_cast(request->data_layout()); - break; - } - case nidaqmx_grpc::WriteCtrFreqRequest::DataLayoutEnumCase::kDataLayoutRaw: { - data_layout = static_cast(request->data_layout_raw()); - break; - } - case nidaqmx_grpc::WriteCtrFreqRequest::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); - break; - } - } - - auto frequency = const_cast(request->frequency().data()); - auto duty_cycle = const_cast(request->duty_cycle().data()); - auto reserved = nullptr; - int32 num_samps_per_chan_written{}; - auto status = library_->WriteCtrFreq(task, num_samps_per_chan, auto_start, timeout, data_layout, frequency, duty_cycle, &num_samps_per_chan_written, reserved); - context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(num_samps_per_chan_written)); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_num_samps_per_chan_written(num_samps_per_chan_written); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + auto write_array = reinterpret_cast(request->write_array().data()); + auto reserved = nullptr; + int32 samps_per_chan_written {}; + auto status = library_->WriteBinaryU32(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array, &samps_per_chan_written, reserved); + context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(samps_per_chan_written)); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + response->set_samps_per_chan_written(samps_per_chan_written); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginWriteBinaryU32(::grpc::ServerContext* context, const BeginWriteBinaryU32Request* request, BeginWriteBinaryU32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + int32 data_layout; + switch (request->data_layout_enum_case()) { + case nidaqmx_grpc::BeginWriteBinaryU32Request::DataLayoutEnumCase::kDataLayout: { + data_layout = static_cast(request->data_layout()); + break; + } + case nidaqmx_grpc::BeginWriteBinaryU32Request::DataLayoutEnumCase::kDataLayoutRaw: { + data_layout = static_cast(request->data_layout_raw()); + break; + } + case nidaqmx_grpc::BeginWriteBinaryU32Request::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::WriteCtrFreqScalar(::grpc::ServerContext* context, const WriteCtrFreqScalarRequest* request, WriteCtrFreqScalarResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - bool32 auto_start = request->auto_start(); - float64 timeout = request->timeout(); - float64 frequency = request->frequency(); - float64 duty_cycle = request->duty_cycle(); - auto reserved = nullptr; - auto status = library_->WriteCtrFreqScalar(task, auto_start, timeout, frequency, duty_cycle, reserved); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + auto reserved = nullptr; -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::WriteCtrTicks(::grpc::ServerContext* context, const WriteCtrTicksRequest* request, WriteCtrTicksResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - bool32 auto_start = request->auto_start(); - float64 timeout = request->timeout(); - int32 data_layout; - switch (request->data_layout_enum_case()) { - case nidaqmx_grpc::WriteCtrTicksRequest::DataLayoutEnumCase::kDataLayout: { - data_layout = static_cast(request->data_layout()); - break; - } - case nidaqmx_grpc::WriteCtrTicksRequest::DataLayoutEnumCase::kDataLayoutRaw: { - data_layout = static_cast(request->data_layout_raw()); - break; - } - case nidaqmx_grpc::WriteCtrTicksRequest::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); - break; - } - } - - auto high_ticks = reinterpret_cast(request->high_ticks().data()); - auto low_ticks = reinterpret_cast(request->low_ticks().data()); - auto reserved = nullptr; - int32 num_samps_per_chan_written{}; - auto status = library_->WriteCtrTicks(task, num_samps_per_chan, auto_start, timeout, data_layout, high_ticks, low_ticks, &num_samps_per_chan_written, reserved); - context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(num_samps_per_chan_written)); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_num_samps_per_chan_written(num_samps_per_chan_written); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->auto_start = auto_start; + data->timeout = timeout; + data->data_layout = data_layout; + data->reserved = reserved; + data->library = std::shared_ptr(library_); -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::WriteCtrTicksScalar(::grpc::ServerContext* context, const WriteCtrTicksScalarRequest* request, WriteCtrTicksScalarResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - bool32 auto_start = request->auto_start(); - float64 timeout = request->timeout(); - uInt32 high_ticks = request->high_ticks(); - uInt32 low_ticks = request->low_ticks(); - auto reserved = nullptr; - auto status = library_->WriteCtrTicksScalar(task, auto_start, timeout, high_ticks, low_ticks, reserved); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteBinaryU32", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::WriteCtrFreq(::grpc::ServerContext* context, const WriteCtrFreqRequest* request, WriteCtrFreqResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + int32 data_layout; + switch (request->data_layout_enum_case()) { + case nidaqmx_grpc::WriteCtrFreqRequest::DataLayoutEnumCase::kDataLayout: { + data_layout = static_cast(request->data_layout()); + break; + } + case nidaqmx_grpc::WriteCtrFreqRequest::DataLayoutEnumCase::kDataLayoutRaw: { + data_layout = static_cast(request->data_layout_raw()); + break; + } + case nidaqmx_grpc::WriteCtrFreqRequest::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::WriteCtrTime(::grpc::ServerContext* context, const WriteCtrTimeRequest* request, WriteCtrTimeResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - bool32 auto_start = request->auto_start(); - float64 timeout = request->timeout(); - int32 data_layout; - switch (request->data_layout_enum_case()) { - case nidaqmx_grpc::WriteCtrTimeRequest::DataLayoutEnumCase::kDataLayout: { - data_layout = static_cast(request->data_layout()); - break; - } - case nidaqmx_grpc::WriteCtrTimeRequest::DataLayoutEnumCase::kDataLayoutRaw: { - data_layout = static_cast(request->data_layout_raw()); - break; - } - case nidaqmx_grpc::WriteCtrTimeRequest::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); - break; - } - } - - auto high_time = const_cast(request->high_time().data()); - auto low_time = const_cast(request->low_time().data()); - auto reserved = nullptr; - int32 num_samps_per_chan_written{}; - auto status = library_->WriteCtrTime(task, num_samps_per_chan, auto_start, timeout, data_layout, high_time, low_time, &num_samps_per_chan_written, reserved); - context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(num_samps_per_chan_written)); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_num_samps_per_chan_written(num_samps_per_chan_written); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + auto frequency = const_cast(request->frequency().data()); + auto duty_cycle = const_cast(request->duty_cycle().data()); + auto reserved = nullptr; + int32 num_samps_per_chan_written {}; + auto status = library_->WriteCtrFreq(task, num_samps_per_chan, auto_start, timeout, data_layout, frequency, duty_cycle, &num_samps_per_chan_written, reserved); + context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(num_samps_per_chan_written)); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + response->set_num_samps_per_chan_written(num_samps_per_chan_written); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::WriteCtrTimeScalar(::grpc::ServerContext* context, const WriteCtrTimeScalarRequest* request, WriteCtrTimeScalarResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - bool32 auto_start = request->auto_start(); - float64 timeout = request->timeout(); - float64 high_time = request->high_time(); - float64 low_time = request->low_time(); - auto reserved = nullptr; - auto status = library_->WriteCtrTimeScalar(task, auto_start, timeout, high_time, low_time, reserved); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::WriteCtrFreqScalar(::grpc::ServerContext* context, const WriteCtrFreqScalarRequest* request, WriteCtrFreqScalarResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + float64 frequency = request->frequency(); + float64 duty_cycle = request->duty_cycle(); + auto reserved = nullptr; + auto status = library_->WriteCtrFreqScalar(task, auto_start, timeout, frequency, duty_cycle, reserved); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::WriteCtrTicks(::grpc::ServerContext* context, const WriteCtrTicksRequest* request, WriteCtrTicksResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + int32 data_layout; + switch (request->data_layout_enum_case()) { + case nidaqmx_grpc::WriteCtrTicksRequest::DataLayoutEnumCase::kDataLayout: { + data_layout = static_cast(request->data_layout()); + break; + } + case nidaqmx_grpc::WriteCtrTicksRequest::DataLayoutEnumCase::kDataLayoutRaw: { + data_layout = static_cast(request->data_layout_raw()); + break; + } + case nidaqmx_grpc::WriteCtrTicksRequest::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::WriteDigitalLines(::grpc::ServerContext* context, const WriteDigitalLinesRequest* request, WriteDigitalLinesResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - bool32 auto_start = request->auto_start(); - float64 timeout = request->timeout(); - int32 data_layout; - switch (request->data_layout_enum_case()) { - case nidaqmx_grpc::WriteDigitalLinesRequest::DataLayoutEnumCase::kDataLayout: { - data_layout = static_cast(request->data_layout()); - break; - } - case nidaqmx_grpc::WriteDigitalLinesRequest::DataLayoutEnumCase::kDataLayoutRaw: { - data_layout = static_cast(request->data_layout_raw()); - break; - } - case nidaqmx_grpc::WriteDigitalLinesRequest::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); - break; - } - } - - const uInt8* write_array = (const uInt8*)request->write_array().c_str(); - auto reserved = nullptr; - int32 samps_per_chan_written{}; - auto status = library_->WriteDigitalLines(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array, &samps_per_chan_written, reserved); - context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(samps_per_chan_written)); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_samps_per_chan_written(samps_per_chan_written); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + auto high_ticks = reinterpret_cast(request->high_ticks().data()); + auto low_ticks = reinterpret_cast(request->low_ticks().data()); + auto reserved = nullptr; + int32 num_samps_per_chan_written {}; + auto status = library_->WriteCtrTicks(task, num_samps_per_chan, auto_start, timeout, data_layout, high_ticks, low_ticks, &num_samps_per_chan_written, reserved); + context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(num_samps_per_chan_written)); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + response->set_num_samps_per_chan_written(num_samps_per_chan_written); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::WriteDigitalScalarU32(::grpc::ServerContext* context, const WriteDigitalScalarU32Request* request, WriteDigitalScalarU32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - bool32 auto_start = request->auto_start(); - float64 timeout = request->timeout(); - uInt32 value = request->value(); - auto reserved = nullptr; - auto status = library_->WriteDigitalScalarU32(task, auto_start, timeout, value, reserved); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::WriteCtrTicksScalar(::grpc::ServerContext* context, const WriteCtrTicksScalarRequest* request, WriteCtrTicksScalarResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + uInt32 high_ticks = request->high_ticks(); + uInt32 low_ticks = request->low_ticks(); + auto reserved = nullptr; + auto status = library_->WriteCtrTicksScalar(task, auto_start, timeout, high_ticks, low_ticks, reserved); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::WriteCtrTime(::grpc::ServerContext* context, const WriteCtrTimeRequest* request, WriteCtrTimeResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + int32 data_layout; + switch (request->data_layout_enum_case()) { + case nidaqmx_grpc::WriteCtrTimeRequest::DataLayoutEnumCase::kDataLayout: { + data_layout = static_cast(request->data_layout()); + break; + } + case nidaqmx_grpc::WriteCtrTimeRequest::DataLayoutEnumCase::kDataLayoutRaw: { + data_layout = static_cast(request->data_layout_raw()); + break; + } + case nidaqmx_grpc::WriteCtrTimeRequest::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginWriteDigitalScalarU32(::grpc::ServerContext* context, const BeginWriteDigitalScalarU32Request* request, BeginWriteDigitalScalarU32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - bool32 auto_start = request->auto_start(); - float64 timeout = request->timeout(); - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->auto_start = auto_start; - data->timeout = timeout; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteDigitalScalarU32", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + auto high_time = const_cast(request->high_time().data()); + auto low_time = const_cast(request->low_time().data()); + auto reserved = nullptr; + int32 num_samps_per_chan_written {}; + auto status = library_->WriteCtrTime(task, num_samps_per_chan, auto_start, timeout, data_layout, high_time, low_time, &num_samps_per_chan_written, reserved); + context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(num_samps_per_chan_written)); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + response->set_num_samps_per_chan_written(num_samps_per_chan_written); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::WriteDigitalU16(::grpc::ServerContext* context, const WriteDigitalU16Request* request, WriteDigitalU16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - bool32 auto_start = request->auto_start(); - float64 timeout = request->timeout(); - int32 data_layout; - switch (request->data_layout_enum_case()) { - case nidaqmx_grpc::WriteDigitalU16Request::DataLayoutEnumCase::kDataLayout: { - data_layout = static_cast(request->data_layout()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::WriteCtrTimeScalar(::grpc::ServerContext* context, const WriteCtrTimeScalarRequest* request, WriteCtrTimeScalarResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + float64 high_time = request->high_time(); + float64 low_time = request->low_time(); + auto reserved = nullptr; + auto status = library_->WriteCtrTimeScalar(task, auto_start, timeout, high_time, low_time, reserved); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::WriteDigitalLines(::grpc::ServerContext* context, const WriteDigitalLinesRequest* request, WriteDigitalLinesResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + int32 data_layout; + switch (request->data_layout_enum_case()) { + case nidaqmx_grpc::WriteDigitalLinesRequest::DataLayoutEnumCase::kDataLayout: { + data_layout = static_cast(request->data_layout()); + break; + } + case nidaqmx_grpc::WriteDigitalLinesRequest::DataLayoutEnumCase::kDataLayoutRaw: { + data_layout = static_cast(request->data_layout_raw()); + break; + } + case nidaqmx_grpc::WriteDigitalLinesRequest::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); + break; + } } - case nidaqmx_grpc::WriteDigitalU16Request::DataLayoutEnumCase::kDataLayoutRaw: { - data_layout = static_cast(request->data_layout_raw()); - break; + + const uInt8* write_array = (const uInt8*)request->write_array().c_str(); + auto reserved = nullptr; + int32 samps_per_chan_written {}; + auto status = library_->WriteDigitalLines(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array, &samps_per_chan_written, reserved); + context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(samps_per_chan_written)); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - case nidaqmx_grpc::WriteDigitalU16Request::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); - break; + response->set_status(status); + response->set_samps_per_chan_written(samps_per_chan_written); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::WriteDigitalScalarU32(::grpc::ServerContext* context, const WriteDigitalScalarU32Request* request, WriteDigitalScalarU32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + uInt32 value = request->value(); + auto reserved = nullptr; + auto status = library_->WriteDigitalScalarU32(task, auto_start, timeout, value, reserved); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } - auto write_array_raw = request->write_array(); - auto write_array = std::vector(); - write_array.reserve(write_array_raw.size()); - std::transform( + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginWriteDigitalScalarU32(::grpc::ServerContext* context, const BeginWriteDigitalScalarU32Request* request, BeginWriteDigitalScalarU32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->auto_start = auto_start; + data->timeout = timeout; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteDigitalScalarU32", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::WriteDigitalU16(::grpc::ServerContext* context, const WriteDigitalU16Request* request, WriteDigitalU16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + int32 data_layout; + switch (request->data_layout_enum_case()) { + case nidaqmx_grpc::WriteDigitalU16Request::DataLayoutEnumCase::kDataLayout: { + data_layout = static_cast(request->data_layout()); + break; + } + case nidaqmx_grpc::WriteDigitalU16Request::DataLayoutEnumCase::kDataLayoutRaw: { + data_layout = static_cast(request->data_layout_raw()); + break; + } + case nidaqmx_grpc::WriteDigitalU16Request::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); + break; + } + } + + auto write_array_raw = request->write_array(); + auto write_array = std::vector(); + write_array.reserve(write_array_raw.size()); + std::transform( write_array_raw.begin(), write_array_raw.end(), std::back_inserter(write_array), [](auto x) { - if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { - std::string message("value "); - message.append(std::to_string(x)); - message.append(" doesn't fit in datatype "); - message.append("uInt16"); - throw nidevice_grpc::ValueOutOfRangeException(message); - } - return static_cast(x); + if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { + std::string message("value "); + message.append(std::to_string(x)); + message.append(" doesn't fit in datatype "); + message.append("uInt16"); + throw nidevice_grpc::ValueOutOfRangeException(message); + } + return static_cast(x); }); - auto reserved = nullptr; - int32 samps_per_chan_written{}; - auto status = library_->WriteDigitalU16(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array.data(), &samps_per_chan_written, reserved); - context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(samps_per_chan_written)); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + auto reserved = nullptr; + int32 samps_per_chan_written {}; + auto status = library_->WriteDigitalU16(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array.data(), &samps_per_chan_written, reserved); + context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(samps_per_chan_written)); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + response->set_samps_per_chan_written(samps_per_chan_written); + return ::grpc::Status::OK; } - response->set_status(status); - response->set_samps_per_chan_written(samps_per_chan_written); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginWriteDigitalU16(::grpc::ServerContext* context, const BeginWriteDigitalU16Request* request, BeginWriteDigitalU16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + int32 data_layout; + switch (request->data_layout_enum_case()) { + case nidaqmx_grpc::BeginWriteDigitalU16Request::DataLayoutEnumCase::kDataLayout: { + data_layout = static_cast(request->data_layout()); + break; + } + case nidaqmx_grpc::BeginWriteDigitalU16Request::DataLayoutEnumCase::kDataLayoutRaw: { + data_layout = static_cast(request->data_layout_raw()); + break; + } + case nidaqmx_grpc::BeginWriteDigitalU16Request::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginWriteDigitalU16(::grpc::ServerContext* context, const BeginWriteDigitalU16Request* request, BeginWriteDigitalU16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - bool32 auto_start = request->auto_start(); - float64 timeout = request->timeout(); - int32 data_layout; - switch (request->data_layout_enum_case()) { - case nidaqmx_grpc::BeginWriteDigitalU16Request::DataLayoutEnumCase::kDataLayout: { - data_layout = static_cast(request->data_layout()); - break; - } - case nidaqmx_grpc::BeginWriteDigitalU16Request::DataLayoutEnumCase::kDataLayoutRaw: { - data_layout = static_cast(request->data_layout_raw()); - break; - } - case nidaqmx_grpc::BeginWriteDigitalU16Request::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); - break; - } - } - - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->num_samps_per_chan = num_samps_per_chan; - data->auto_start = auto_start; - data->timeout = timeout; - data->data_layout = data_layout; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteDigitalU16", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + auto reserved = nullptr; -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::WriteDigitalU32(::grpc::ServerContext* context, const WriteDigitalU32Request* request, WriteDigitalU32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - bool32 auto_start = request->auto_start(); - float64 timeout = request->timeout(); - int32 data_layout; - switch (request->data_layout_enum_case()) { - case nidaqmx_grpc::WriteDigitalU32Request::DataLayoutEnumCase::kDataLayout: { - data_layout = static_cast(request->data_layout()); - break; - } - case nidaqmx_grpc::WriteDigitalU32Request::DataLayoutEnumCase::kDataLayoutRaw: { - data_layout = static_cast(request->data_layout_raw()); - break; - } - case nidaqmx_grpc::WriteDigitalU32Request::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); - break; - } - } - - auto write_array = reinterpret_cast(request->write_array().data()); - auto reserved = nullptr; - int32 samps_per_chan_written{}; - auto status = library_->WriteDigitalU32(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array, &samps_per_chan_written, reserved); - context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(samps_per_chan_written)); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_samps_per_chan_written(samps_per_chan_written); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->auto_start = auto_start; + data->timeout = timeout; + data->data_layout = data_layout; + data->reserved = reserved; + data->library = std::shared_ptr(library_); -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginWriteDigitalU32(::grpc::ServerContext* context, const BeginWriteDigitalU32Request* request, BeginWriteDigitalU32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - bool32 auto_start = request->auto_start(); - float64 timeout = request->timeout(); - int32 data_layout; - switch (request->data_layout_enum_case()) { - case nidaqmx_grpc::BeginWriteDigitalU32Request::DataLayoutEnumCase::kDataLayout: { - data_layout = static_cast(request->data_layout()); - break; - } - case nidaqmx_grpc::BeginWriteDigitalU32Request::DataLayoutEnumCase::kDataLayoutRaw: { - data_layout = static_cast(request->data_layout_raw()); - break; - } - case nidaqmx_grpc::BeginWriteDigitalU32Request::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); - break; - } - } - - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->num_samps_per_chan = num_samps_per_chan; - data->auto_start = auto_start; - data->timeout = timeout; - data->data_layout = data_layout; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteDigitalU32", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteDigitalU16", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::WriteDigitalU32(::grpc::ServerContext* context, const WriteDigitalU32Request* request, WriteDigitalU32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + int32 data_layout; + switch (request->data_layout_enum_case()) { + case nidaqmx_grpc::WriteDigitalU32Request::DataLayoutEnumCase::kDataLayout: { + data_layout = static_cast(request->data_layout()); + break; + } + case nidaqmx_grpc::WriteDigitalU32Request::DataLayoutEnumCase::kDataLayoutRaw: { + data_layout = static_cast(request->data_layout_raw()); + break; + } + case nidaqmx_grpc::WriteDigitalU32Request::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::WriteDigitalU8(::grpc::ServerContext* context, const WriteDigitalU8Request* request, WriteDigitalU8Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - bool32 auto_start = request->auto_start(); - float64 timeout = request->timeout(); - int32 data_layout; - switch (request->data_layout_enum_case()) { - case nidaqmx_grpc::WriteDigitalU8Request::DataLayoutEnumCase::kDataLayout: { - data_layout = static_cast(request->data_layout()); - break; - } - case nidaqmx_grpc::WriteDigitalU8Request::DataLayoutEnumCase::kDataLayoutRaw: { - data_layout = static_cast(request->data_layout_raw()); - break; - } - case nidaqmx_grpc::WriteDigitalU8Request::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); - break; - } - } - - const uInt8* write_array = (const uInt8*)request->write_array().c_str(); - auto reserved = nullptr; - int32 samps_per_chan_written{}; - auto status = library_->WriteDigitalU8(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array, &samps_per_chan_written, reserved); - context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(samps_per_chan_written)); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_samps_per_chan_written(samps_per_chan_written); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + auto write_array = reinterpret_cast(request->write_array().data()); + auto reserved = nullptr; + int32 samps_per_chan_written {}; + auto status = library_->WriteDigitalU32(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array, &samps_per_chan_written, reserved); + context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(samps_per_chan_written)); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + response->set_samps_per_chan_written(samps_per_chan_written); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginWriteDigitalU32(::grpc::ServerContext* context, const BeginWriteDigitalU32Request* request, BeginWriteDigitalU32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + int32 data_layout; + switch (request->data_layout_enum_case()) { + case nidaqmx_grpc::BeginWriteDigitalU32Request::DataLayoutEnumCase::kDataLayout: { + data_layout = static_cast(request->data_layout()); + break; + } + case nidaqmx_grpc::BeginWriteDigitalU32Request::DataLayoutEnumCase::kDataLayoutRaw: { + data_layout = static_cast(request->data_layout_raw()); + break; + } + case nidaqmx_grpc::BeginWriteDigitalU32Request::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::WriteRaw(::grpc::ServerContext* context, const WriteRawRequest* request, WriteRawResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps = request->num_samps(); - bool32 auto_start = request->auto_start(); - float64 timeout = request->timeout(); - const uInt8* write_array = (const uInt8*)request->write_array().c_str(); - auto reserved = nullptr; - int32 samps_per_chan_written{}; - auto status = library_->WriteRaw(task, num_samps, auto_start, timeout, write_array, &samps_per_chan_written, reserved); - context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(samps_per_chan_written)); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_samps_per_chan_written(samps_per_chan_written); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + auto reserved = nullptr; -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::WriteToTEDSFromArray(::grpc::ServerContext* context, const WriteToTEDSFromArrayRequest* request, WriteToTEDSFromArrayResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - const uInt8* bit_stream = (const uInt8*)request->bit_stream().c_str(); - uInt32 array_size = static_cast(request->bit_stream().size()); - int32 basic_teds_options; - switch (request->basic_teds_options_enum_case()) { - case nidaqmx_grpc::WriteToTEDSFromArrayRequest::BasicTedsOptionsEnumCase::kBasicTedsOptions: { - basic_teds_options = static_cast(request->basic_teds_options()); - break; + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->auto_start = auto_start; + data->timeout = timeout; + data->data_layout = data_layout; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteDigitalU32", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::WriteDigitalU8(::grpc::ServerContext* context, const WriteDigitalU8Request* request, WriteDigitalU8Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + int32 data_layout; + switch (request->data_layout_enum_case()) { + case nidaqmx_grpc::WriteDigitalU8Request::DataLayoutEnumCase::kDataLayout: { + data_layout = static_cast(request->data_layout()); + break; + } + case nidaqmx_grpc::WriteDigitalU8Request::DataLayoutEnumCase::kDataLayoutRaw: { + data_layout = static_cast(request->data_layout_raw()); + break; + } + case nidaqmx_grpc::WriteDigitalU8Request::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); + break; + } } - case nidaqmx_grpc::WriteToTEDSFromArrayRequest::BasicTedsOptionsEnumCase::kBasicTedsOptionsRaw: { - basic_teds_options = static_cast(request->basic_teds_options_raw()); - break; + + const uInt8* write_array = (const uInt8*)request->write_array().c_str(); + auto reserved = nullptr; + int32 samps_per_chan_written {}; + auto status = library_->WriteDigitalU8(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array, &samps_per_chan_written, reserved); + context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(samps_per_chan_written)); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - case nidaqmx_grpc::WriteToTEDSFromArrayRequest::BasicTedsOptionsEnumCase::BASIC_TEDS_OPTIONS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for basic_teds_options was not specified or out of range"); - break; + response->set_status(status); + response->set_samps_per_chan_written(samps_per_chan_written); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::WriteRaw(::grpc::ServerContext* context, const WriteRawRequest* request, WriteRawResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps = request->num_samps(); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + const uInt8* write_array = (const uInt8*)request->write_array().c_str(); + auto reserved = nullptr; + int32 samps_per_chan_written {}; + auto status = library_->WriteRaw(task, num_samps, auto_start, timeout, write_array, &samps_per_chan_written, reserved); + context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(samps_per_chan_written)); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + response->set_samps_per_chan_written(samps_per_chan_written); + return ::grpc::Status::OK; } - - auto status = library_->WriteToTEDSFromArray(physical_channel, bit_stream, array_size, basic_teds_options); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::WriteToTEDSFromFile(::grpc::ServerContext* context, const WriteToTEDSFromFileRequest* request, WriteToTEDSFromFileResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto file_path_mbcs = convert_from_grpc(request->file_path()); - auto file_path = file_path_mbcs.c_str(); - int32 basic_teds_options; - switch (request->basic_teds_options_enum_case()) { - case nidaqmx_grpc::WriteToTEDSFromFileRequest::BasicTedsOptionsEnumCase::kBasicTedsOptions: { - basic_teds_options = static_cast(request->basic_teds_options()); - break; - } - case nidaqmx_grpc::WriteToTEDSFromFileRequest::BasicTedsOptionsEnumCase::kBasicTedsOptionsRaw: { - basic_teds_options = static_cast(request->basic_teds_options_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::WriteToTEDSFromArray(::grpc::ServerContext* context, const WriteToTEDSFromArrayRequest* request, WriteToTEDSFromArrayResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + const uInt8* bit_stream = (const uInt8*)request->bit_stream().c_str(); + uInt32 array_size = static_cast(request->bit_stream().size()); + int32 basic_teds_options; + switch (request->basic_teds_options_enum_case()) { + case nidaqmx_grpc::WriteToTEDSFromArrayRequest::BasicTedsOptionsEnumCase::kBasicTedsOptions: { + basic_teds_options = static_cast(request->basic_teds_options()); + break; + } + case nidaqmx_grpc::WriteToTEDSFromArrayRequest::BasicTedsOptionsEnumCase::kBasicTedsOptionsRaw: { + basic_teds_options = static_cast(request->basic_teds_options_raw()); + break; + } + case nidaqmx_grpc::WriteToTEDSFromArrayRequest::BasicTedsOptionsEnumCase::BASIC_TEDS_OPTIONS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for basic_teds_options was not specified or out of range"); + break; + } } - case nidaqmx_grpc::WriteToTEDSFromFileRequest::BasicTedsOptionsEnumCase::BASIC_TEDS_OPTIONS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for basic_teds_options was not specified or out of range"); - break; + + auto status = library_->WriteToTEDSFromArray(physical_channel, bit_stream, array_size, basic_teds_options); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } + response->set_status(status); + return ::grpc::Status::OK; } - - auto status = library_->WriteToTEDSFromFile(physical_channel, file_path, basic_teds_options); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::WriteToTEDSFromFile(::grpc::ServerContext* context, const WriteToTEDSFromFileRequest* request, WriteToTEDSFromFileResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto file_path_mbcs = convert_from_grpc(request->file_path()); + auto file_path = file_path_mbcs.c_str(); + int32 basic_teds_options; + switch (request->basic_teds_options_enum_case()) { + case nidaqmx_grpc::WriteToTEDSFromFileRequest::BasicTedsOptionsEnumCase::kBasicTedsOptions: { + basic_teds_options = static_cast(request->basic_teds_options()); + break; + } + case nidaqmx_grpc::WriteToTEDSFromFileRequest::BasicTedsOptionsEnumCase::kBasicTedsOptionsRaw: { + basic_teds_options = static_cast(request->basic_teds_options_raw()); + break; + } + case nidaqmx_grpc::WriteToTEDSFromFileRequest::BasicTedsOptionsEnumCase::BASIC_TEDS_OPTIONS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for basic_teds_options was not specified or out of range"); + break; + } + } + + auto status = library_->WriteToTEDSFromFile(physical_channel, file_path, basic_teds_options); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -NiDAQmxFeatureToggles::NiDAQmxFeatureToggles( + + NiDAQmxFeatureToggles::NiDAQmxFeatureToggles( const nidevice_grpc::FeatureToggles& feature_toggles) : is_enabled( - feature_toggles.is_feature_enabled("nidaqmx", CodeReadiness::kRelease)), + feature_toggles.is_feature_enabled("nidaqmx", CodeReadiness::kRelease)), is_allow_undefined_attributes_enabled( - feature_toggles.is_feature_enabled("nidaqmx.allow_undefined_attributes", CodeReadiness::kPrototype)) -{ -} -} // namespace nidaqmx_grpc + feature_toggles.is_feature_enabled("nidaqmx.allow_undefined_attributes", CodeReadiness::kPrototype)) + { + } +} // namespace nidaqmx_grpc + diff --git a/generated/nifpga/nifpga.proto b/generated/nifpga/nifpga.proto index 70c1f74ad..ec6660e20 100644 --- a/generated/nifpga/nifpga.proto +++ b/generated/nifpga/nifpga.proto @@ -502,7 +502,7 @@ message BeginReadArrayBoolResponse { ni.data_monikers.Moniker moniker = 2; } -message ReadArrayBoolStreamingResponse { +message MonikerReadArrayBoolResponse { int32 status = 1; repeated bool array = 2; } @@ -529,7 +529,7 @@ message BeginReadArrayDblResponse { ni.data_monikers.Moniker moniker = 2; } -message ReadArrayDblStreamingResponse { +message MonikerReadArrayDblResponse { int32 status = 1; repeated double array = 2; } @@ -556,7 +556,7 @@ message BeginReadArrayI16Response { ni.data_monikers.Moniker moniker = 2; } -message ReadArrayI16StreamingResponse { +message MonikerReadArrayI16Response { int32 status = 1; repeated int32 array = 2; } @@ -583,7 +583,7 @@ message BeginReadArrayI32Response { ni.data_monikers.Moniker moniker = 2; } -message ReadArrayI32StreamingResponse { +message MonikerReadArrayI32Response { int32 status = 1; repeated int32 array = 2; } @@ -610,7 +610,7 @@ message BeginReadArrayI64Response { ni.data_monikers.Moniker moniker = 2; } -message ReadArrayI64StreamingResponse { +message MonikerReadArrayI64Response { int32 status = 1; repeated int64 array = 2; } @@ -637,7 +637,7 @@ message BeginReadArrayI8Response { ni.data_monikers.Moniker moniker = 2; } -message ReadArrayI8StreamingResponse { +message MonikerReadArrayI8Response { int32 status = 1; repeated int32 array = 2; } @@ -664,7 +664,7 @@ message BeginReadArraySglResponse { ni.data_monikers.Moniker moniker = 2; } -message ReadArraySglStreamingResponse { +message MonikerReadArraySglResponse { int32 status = 1; repeated float array = 2; } @@ -691,7 +691,7 @@ message BeginReadArrayU16Response { ni.data_monikers.Moniker moniker = 2; } -message ReadArrayU16StreamingResponse { +message MonikerReadArrayU16Response { int32 status = 1; repeated uint32 array = 2; } @@ -718,7 +718,7 @@ message BeginReadArrayU32Response { ni.data_monikers.Moniker moniker = 2; } -message ReadArrayU32StreamingResponse { +message MonikerReadArrayU32Response { int32 status = 1; repeated uint32 array = 2; } @@ -745,7 +745,7 @@ message BeginReadArrayU64Response { ni.data_monikers.Moniker moniker = 2; } -message ReadArrayU64StreamingResponse { +message MonikerReadArrayU64Response { int32 status = 1; repeated uint64 array = 2; } @@ -772,7 +772,7 @@ message BeginReadArrayU8Response { ni.data_monikers.Moniker moniker = 2; } -message ReadArrayU8StreamingResponse { +message MonikerReadArrayU8Response { int32 status = 1; repeated uint32 array = 2; } @@ -797,7 +797,7 @@ message BeginReadBoolResponse { ni.data_monikers.Moniker moniker = 2; } -message ReadBoolStreamingResponse { +message MonikerReadBoolResponse { int32 status = 1; bool value = 2; } @@ -822,7 +822,7 @@ message BeginReadDblResponse { ni.data_monikers.Moniker moniker = 2; } -message ReadDblStreamingResponse { +message MonikerReadDblResponse { int32 status = 1; double value = 2; } @@ -990,7 +990,7 @@ message BeginReadI16Response { ni.data_monikers.Moniker moniker = 2; } -message ReadI16StreamingResponse { +message MonikerReadI16Response { int32 status = 1; int32 value = 2; } @@ -1015,7 +1015,7 @@ message BeginReadI32Response { ni.data_monikers.Moniker moniker = 2; } -message ReadI32StreamingResponse { +message MonikerReadI32Response { int32 status = 1; int32 value = 2; } @@ -1040,7 +1040,7 @@ message BeginReadI64Response { ni.data_monikers.Moniker moniker = 2; } -message ReadI64StreamingResponse { +message MonikerReadI64Response { int32 status = 1; int64 value = 2; } @@ -1065,7 +1065,7 @@ message BeginReadI8Response { ni.data_monikers.Moniker moniker = 2; } -message ReadI8StreamingResponse { +message MonikerReadI8Response { int32 status = 1; int32 value = 2; } @@ -1090,7 +1090,7 @@ message BeginReadSglResponse { ni.data_monikers.Moniker moniker = 2; } -message ReadSglStreamingResponse { +message MonikerReadSglResponse { int32 status = 1; float value = 2; } @@ -1115,7 +1115,7 @@ message BeginReadU16Response { ni.data_monikers.Moniker moniker = 2; } -message ReadU16StreamingResponse { +message MonikerReadU16Response { int32 status = 1; uint32 value = 2; } @@ -1140,7 +1140,7 @@ message BeginReadU32Response { ni.data_monikers.Moniker moniker = 2; } -message ReadU32StreamingResponse { +message MonikerReadU32Response { int32 status = 1; uint32 value = 2; } @@ -1165,7 +1165,7 @@ message BeginReadU64Response { ni.data_monikers.Moniker moniker = 2; } -message ReadU64StreamingResponse { +message MonikerReadU64Response { int32 status = 1; uint64 value = 2; } @@ -1190,7 +1190,7 @@ message BeginReadU8Response { ni.data_monikers.Moniker moniker = 2; } -message ReadU8StreamingResponse { +message MonikerReadU8Response { int32 status = 1; uint32 value = 2; } @@ -1340,11 +1340,11 @@ message BeginWriteArrayBoolResponse { ni.data_monikers.Moniker moniker = 2; } -message WriteArrayBoolStreamingRequest { +message MonikerWriteArrayBoolRequest { repeated bool array = 1; } -message WriteArrayBoolStreamingResponse { +message MonikerWriteArrayBoolResponse { int32 status = 1; } @@ -1368,11 +1368,11 @@ message BeginWriteArrayDblResponse { ni.data_monikers.Moniker moniker = 2; } -message WriteArrayDblStreamingRequest { +message MonikerWriteArrayDblRequest { repeated double array = 1; } -message WriteArrayDblStreamingResponse { +message MonikerWriteArrayDblResponse { int32 status = 1; } @@ -1396,11 +1396,11 @@ message BeginWriteArrayI16Response { ni.data_monikers.Moniker moniker = 2; } -message WriteArrayI16StreamingRequest { +message MonikerWriteArrayI16Request { repeated int32 array = 1; } -message WriteArrayI16StreamingResponse { +message MonikerWriteArrayI16Response { int32 status = 1; } @@ -1424,11 +1424,11 @@ message BeginWriteArrayI32Response { ni.data_monikers.Moniker moniker = 2; } -message WriteArrayI32StreamingRequest { +message MonikerWriteArrayI32Request { repeated int32 array = 1; } -message WriteArrayI32StreamingResponse { +message MonikerWriteArrayI32Response { int32 status = 1; } @@ -1452,11 +1452,11 @@ message BeginWriteArrayI64Response { ni.data_monikers.Moniker moniker = 2; } -message WriteArrayI64StreamingRequest { +message MonikerWriteArrayI64Request { repeated int64 array = 1; } -message WriteArrayI64StreamingResponse { +message MonikerWriteArrayI64Response { int32 status = 1; } @@ -1480,11 +1480,11 @@ message BeginWriteArrayI8Response { ni.data_monikers.Moniker moniker = 2; } -message WriteArrayI8StreamingRequest { +message MonikerWriteArrayI8Request { repeated int32 array = 1; } -message WriteArrayI8StreamingResponse { +message MonikerWriteArrayI8Response { int32 status = 1; } @@ -1508,11 +1508,11 @@ message BeginWriteArraySglResponse { ni.data_monikers.Moniker moniker = 2; } -message WriteArraySglStreamingRequest { +message MonikerWriteArraySglRequest { repeated float array = 1; } -message WriteArraySglStreamingResponse { +message MonikerWriteArraySglResponse { int32 status = 1; } @@ -1536,11 +1536,11 @@ message BeginWriteArrayU16Response { ni.data_monikers.Moniker moniker = 2; } -message WriteArrayU16StreamingRequest { +message MonikerWriteArrayU16Request { repeated uint32 array = 1; } -message WriteArrayU16StreamingResponse { +message MonikerWriteArrayU16Response { int32 status = 1; } @@ -1564,11 +1564,11 @@ message BeginWriteArrayU32Response { ni.data_monikers.Moniker moniker = 2; } -message WriteArrayU32StreamingRequest { +message MonikerWriteArrayU32Request { repeated uint32 array = 1; } -message WriteArrayU32StreamingResponse { +message MonikerWriteArrayU32Response { int32 status = 1; } @@ -1592,11 +1592,11 @@ message BeginWriteArrayU64Response { ni.data_monikers.Moniker moniker = 2; } -message WriteArrayU64StreamingRequest { +message MonikerWriteArrayU64Request { repeated uint64 array = 1; } -message WriteArrayU64StreamingResponse { +message MonikerWriteArrayU64Response { int32 status = 1; } @@ -1620,11 +1620,11 @@ message BeginWriteArrayU8Response { ni.data_monikers.Moniker moniker = 2; } -message WriteArrayU8StreamingRequest { +message MonikerWriteArrayU8Request { repeated uint32 array = 1; } -message WriteArrayU8StreamingResponse { +message MonikerWriteArrayU8Response { int32 status = 1; } @@ -1648,11 +1648,11 @@ message BeginWriteBoolResponse { ni.data_monikers.Moniker moniker = 2; } -message WriteBoolStreamingRequest { +message MonikerWriteBoolRequest { bool value = 1; } -message WriteBoolStreamingResponse { +message MonikerWriteBoolResponse { int32 status = 1; } @@ -1676,11 +1676,11 @@ message BeginWriteDblResponse { ni.data_monikers.Moniker moniker = 2; } -message WriteDblStreamingRequest { +message MonikerWriteDblRequest { double value = 1; } -message WriteDblStreamingResponse { +message MonikerWriteDblResponse { int32 status = 1; } @@ -1836,11 +1836,11 @@ message BeginWriteI16Response { ni.data_monikers.Moniker moniker = 2; } -message WriteI16StreamingRequest { +message MonikerWriteI16Request { int32 value = 1; } -message WriteI16StreamingResponse { +message MonikerWriteI16Response { int32 status = 1; } @@ -1864,11 +1864,11 @@ message BeginWriteI32Response { ni.data_monikers.Moniker moniker = 2; } -message WriteI32StreamingRequest { +message MonikerWriteI32Request { int32 value = 1; } -message WriteI32StreamingResponse { +message MonikerWriteI32Response { int32 status = 1; } @@ -1892,11 +1892,11 @@ message BeginWriteI64Response { ni.data_monikers.Moniker moniker = 2; } -message WriteI64StreamingRequest { +message MonikerWriteI64Request { int64 value = 1; } -message WriteI64StreamingResponse { +message MonikerWriteI64Response { int32 status = 1; } @@ -1920,11 +1920,11 @@ message BeginWriteI8Response { ni.data_monikers.Moniker moniker = 2; } -message WriteI8StreamingRequest { +message MonikerWriteI8Request { int32 value = 1; } -message WriteI8StreamingResponse { +message MonikerWriteI8Response { int32 status = 1; } @@ -1948,11 +1948,11 @@ message BeginWriteSglResponse { ni.data_monikers.Moniker moniker = 2; } -message WriteSglStreamingRequest { +message MonikerWriteSglRequest { float value = 1; } -message WriteSglStreamingResponse { +message MonikerWriteSglResponse { int32 status = 1; } @@ -1976,11 +1976,11 @@ message BeginWriteU16Response { ni.data_monikers.Moniker moniker = 2; } -message WriteU16StreamingRequest { +message MonikerWriteU16Request { uint32 value = 1; } -message WriteU16StreamingResponse { +message MonikerWriteU16Response { int32 status = 1; } @@ -2004,11 +2004,11 @@ message BeginWriteU32Response { ni.data_monikers.Moniker moniker = 2; } -message WriteU32StreamingRequest { +message MonikerWriteU32Request { uint32 value = 1; } -message WriteU32StreamingResponse { +message MonikerWriteU32Response { int32 status = 1; } @@ -2032,11 +2032,11 @@ message BeginWriteU64Response { ni.data_monikers.Moniker moniker = 2; } -message WriteU64StreamingRequest { +message MonikerWriteU64Request { uint64 value = 1; } -message WriteU64StreamingResponse { +message MonikerWriteU64Response { int32 status = 1; } @@ -2060,11 +2060,11 @@ message BeginWriteU8Response { ni.data_monikers.Moniker moniker = 2; } -message WriteU8StreamingRequest { +message MonikerWriteU8Request { uint32 value = 1; } -message WriteU8StreamingResponse { +message MonikerWriteU8Response { int32 status = 1; } diff --git a/generated/nifpga/nifpga_service.cpp b/generated/nifpga/nifpga_service.cpp index 2fa3048dc..ed37dca81 100644 --- a/generated/nifpga/nifpga_service.cpp +++ b/generated/nifpga/nifpga_service.cpp @@ -6,1021 +6,1110 @@ //--------------------------------------------------------------------- #include "nifpga_service.h" -#include -#include - -#include +#include #include #include -#include +#include #include +#include +#include namespace nifpga_grpc { -using nidevice_grpc::converters::allocate_output_storage; -using nidevice_grpc::converters::calculate_linked_array_size; -using nidevice_grpc::converters::convert_from_grpc; -using nidevice_grpc::converters::convert_to_grpc; -using nidevice_grpc::converters::MatchState; - -struct MonikerReadArrayBoolData { - NiFpga_Session session; - uint32_t indicator; - size_t size; - nifpga_grpc::ReadArrayBoolStreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerReadArrayDblData { - NiFpga_Session session; - uint32_t indicator; - size_t size; - nifpga_grpc::ReadArrayDblStreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerReadArrayI16Data { - NiFpga_Session session; - uint32_t indicator; - size_t size; - nifpga_grpc::ReadArrayI16StreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerReadArrayI32Data { - NiFpga_Session session; - uint32_t indicator; - size_t size; - nifpga_grpc::ReadArrayI32StreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerReadArrayI64Data { - NiFpga_Session session; - uint32_t indicator; - size_t size; - nifpga_grpc::ReadArrayI64StreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerReadArrayI8Data { - NiFpga_Session session; - uint32_t indicator; - size_t size; - nifpga_grpc::ReadArrayI8StreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerReadArraySglData { - NiFpga_Session session; - uint32_t indicator; - size_t size; - nifpga_grpc::ReadArraySglStreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerReadArrayU16Data { - NiFpga_Session session; - uint32_t indicator; - size_t size; - nifpga_grpc::ReadArrayU16StreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerReadArrayU32Data { - NiFpga_Session session; - uint32_t indicator; - size_t size; - nifpga_grpc::ReadArrayU32StreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerReadArrayU64Data { - NiFpga_Session session; - uint32_t indicator; - size_t size; - nifpga_grpc::ReadArrayU64StreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerReadArrayU8Data { - NiFpga_Session session; - uint32_t indicator; - size_t size; - nifpga_grpc::ReadArrayU8StreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerReadBoolData { - NiFpga_Session session; - uint32_t indicator; - nifpga_grpc::ReadBoolStreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerReadDblData { - NiFpga_Session session; - uint32_t indicator; - nifpga_grpc::ReadDblStreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerReadI16Data { - NiFpga_Session session; - uint32_t indicator; - nifpga_grpc::ReadI16StreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerReadI32Data { - NiFpga_Session session; - uint32_t indicator; - nifpga_grpc::ReadI32StreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerReadI64Data { - NiFpga_Session session; - uint32_t indicator; - nifpga_grpc::ReadI64StreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerReadI8Data { - NiFpga_Session session; - uint32_t indicator; - nifpga_grpc::ReadI8StreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerReadSglData { - NiFpga_Session session; - uint32_t indicator; - nifpga_grpc::ReadSglStreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerReadU16Data { - NiFpga_Session session; - uint32_t indicator; - nifpga_grpc::ReadU16StreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerReadU32Data { - NiFpga_Session session; - uint32_t indicator; - nifpga_grpc::ReadU32StreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerReadU64Data { - NiFpga_Session session; - uint32_t indicator; - nifpga_grpc::ReadU64StreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerReadU8Data { - NiFpga_Session session; - uint32_t indicator; - nifpga_grpc::ReadU8StreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerWriteArrayBoolData { - NiFpga_Session session; - uint32_t control; - nifpga_grpc::WriteArrayBoolStreamingRequest request; - nifpga_grpc::WriteArrayBoolStreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerWriteArrayDblData { - NiFpga_Session session; - uint32_t control; - nifpga_grpc::WriteArrayDblStreamingRequest request; - nifpga_grpc::WriteArrayDblStreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerWriteArrayI16Data { - NiFpga_Session session; - uint32_t control; - nifpga_grpc::WriteArrayI16StreamingRequest request; - nifpga_grpc::WriteArrayI16StreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerWriteArrayI32Data { - NiFpga_Session session; - uint32_t control; - nifpga_grpc::WriteArrayI32StreamingRequest request; - nifpga_grpc::WriteArrayI32StreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerWriteArrayI64Data { - NiFpga_Session session; - uint32_t control; - nifpga_grpc::WriteArrayI64StreamingRequest request; - nifpga_grpc::WriteArrayI64StreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerWriteArrayI8Data { - NiFpga_Session session; - uint32_t control; - nifpga_grpc::WriteArrayI8StreamingRequest request; - nifpga_grpc::WriteArrayI8StreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerWriteArraySglData { - NiFpga_Session session; - uint32_t control; - nifpga_grpc::WriteArraySglStreamingRequest request; - nifpga_grpc::WriteArraySglStreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerWriteArrayU16Data { - NiFpga_Session session; - uint32_t control; - nifpga_grpc::WriteArrayU16StreamingRequest request; - nifpga_grpc::WriteArrayU16StreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerWriteArrayU32Data { - NiFpga_Session session; - uint32_t control; - nifpga_grpc::WriteArrayU32StreamingRequest request; - nifpga_grpc::WriteArrayU32StreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerWriteArrayU64Data { - NiFpga_Session session; - uint32_t control; - nifpga_grpc::WriteArrayU64StreamingRequest request; - nifpga_grpc::WriteArrayU64StreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerWriteArrayU8Data { - NiFpga_Session session; - uint32_t control; - nifpga_grpc::WriteArrayU8StreamingRequest request; - nifpga_grpc::WriteArrayU8StreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerWriteBoolData { - NiFpga_Session session; - uint32_t control; - nifpga_grpc::WriteBoolStreamingRequest request; - nifpga_grpc::WriteBoolStreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerWriteDblData { - NiFpga_Session session; - uint32_t control; - nifpga_grpc::WriteDblStreamingRequest request; - nifpga_grpc::WriteDblStreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerWriteI16Data { - NiFpga_Session session; - uint32_t control; - nifpga_grpc::WriteI16StreamingRequest request; - nifpga_grpc::WriteI16StreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerWriteI32Data { - NiFpga_Session session; - uint32_t control; - nifpga_grpc::WriteI32StreamingRequest request; - nifpga_grpc::WriteI32StreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerWriteI64Data { - NiFpga_Session session; - uint32_t control; - nifpga_grpc::WriteI64StreamingRequest request; - nifpga_grpc::WriteI64StreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerWriteI8Data { - NiFpga_Session session; - uint32_t control; - nifpga_grpc::WriteI8StreamingRequest request; - nifpga_grpc::WriteI8StreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerWriteSglData { - NiFpga_Session session; - uint32_t control; - nifpga_grpc::WriteSglStreamingRequest request; - nifpga_grpc::WriteSglStreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerWriteU16Data { - NiFpga_Session session; - uint32_t control; - nifpga_grpc::WriteU16StreamingRequest request; - nifpga_grpc::WriteU16StreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerWriteU32Data { - NiFpga_Session session; - uint32_t control; - nifpga_grpc::WriteU32StreamingRequest request; - nifpga_grpc::WriteU32StreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerWriteU64Data { - NiFpga_Session session; - uint32_t control; - nifpga_grpc::WriteU64StreamingRequest request; - nifpga_grpc::WriteU64StreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerWriteU8Data { - NiFpga_Session session; - uint32_t control; - nifpga_grpc::WriteU8StreamingRequest request; - nifpga_grpc::WriteU8StreamingResponse response; - std::shared_ptr library; -}; - -NiFpgaService::NiFpgaService( - LibrarySharedPtr library, - ResourceRepositorySharedPtr resource_repository, - const NiFpgaFeatureToggles& feature_toggles) - : library_(library), + using nidevice_grpc::converters::allocate_output_storage; + using nidevice_grpc::converters::calculate_linked_array_size; + using nidevice_grpc::converters::convert_from_grpc; + using nidevice_grpc::converters::convert_to_grpc; + using nidevice_grpc::converters::MatchState; + + struct MonikerReadArrayBoolData + { + NiFpga_Session session; + uint32_t indicator; + size_t size; + nifpga_grpc::MonikerReadArrayBoolResponse response; + std::shared_ptr library; + }; + + struct MonikerReadArrayDblData + { + NiFpga_Session session; + uint32_t indicator; + size_t size; + nifpga_grpc::MonikerReadArrayDblResponse response; + std::shared_ptr library; + }; + + struct MonikerReadArrayI16Data + { + NiFpga_Session session; + uint32_t indicator; + size_t size; + nifpga_grpc::MonikerReadArrayI16Response response; + std::shared_ptr library; + }; + + struct MonikerReadArrayI32Data + { + NiFpga_Session session; + uint32_t indicator; + size_t size; + nifpga_grpc::MonikerReadArrayI32Response response; + std::shared_ptr library; + }; + + struct MonikerReadArrayI64Data + { + NiFpga_Session session; + uint32_t indicator; + size_t size; + nifpga_grpc::MonikerReadArrayI64Response response; + std::shared_ptr library; + }; + + struct MonikerReadArrayI8Data + { + NiFpga_Session session; + uint32_t indicator; + size_t size; + nifpga_grpc::MonikerReadArrayI8Response response; + std::shared_ptr library; + }; + + struct MonikerReadArraySglData + { + NiFpga_Session session; + uint32_t indicator; + size_t size; + nifpga_grpc::MonikerReadArraySglResponse response; + std::shared_ptr library; + }; + + struct MonikerReadArrayU16Data + { + NiFpga_Session session; + uint32_t indicator; + size_t size; + nifpga_grpc::MonikerReadArrayU16Response response; + std::shared_ptr library; + }; + + struct MonikerReadArrayU32Data + { + NiFpga_Session session; + uint32_t indicator; + size_t size; + nifpga_grpc::MonikerReadArrayU32Response response; + std::shared_ptr library; + }; + + struct MonikerReadArrayU64Data + { + NiFpga_Session session; + uint32_t indicator; + size_t size; + nifpga_grpc::MonikerReadArrayU64Response response; + std::shared_ptr library; + }; + + struct MonikerReadArrayU8Data + { + NiFpga_Session session; + uint32_t indicator; + size_t size; + nifpga_grpc::MonikerReadArrayU8Response response; + std::shared_ptr library; + }; + + struct MonikerReadBoolData + { + NiFpga_Session session; + uint32_t indicator; + nifpga_grpc::MonikerReadBoolResponse response; + std::shared_ptr library; + }; + + struct MonikerReadDblData + { + NiFpga_Session session; + uint32_t indicator; + nifpga_grpc::MonikerReadDblResponse response; + std::shared_ptr library; + }; + + struct MonikerReadI16Data + { + NiFpga_Session session; + uint32_t indicator; + nifpga_grpc::MonikerReadI16Response response; + std::shared_ptr library; + }; + + struct MonikerReadI32Data + { + NiFpga_Session session; + uint32_t indicator; + nifpga_grpc::MonikerReadI32Response response; + std::shared_ptr library; + }; + + struct MonikerReadI64Data + { + NiFpga_Session session; + uint32_t indicator; + nifpga_grpc::MonikerReadI64Response response; + std::shared_ptr library; + }; + + struct MonikerReadI8Data + { + NiFpga_Session session; + uint32_t indicator; + nifpga_grpc::MonikerReadI8Response response; + std::shared_ptr library; + }; + + struct MonikerReadSglData + { + NiFpga_Session session; + uint32_t indicator; + nifpga_grpc::MonikerReadSglResponse response; + std::shared_ptr library; + }; + + struct MonikerReadU16Data + { + NiFpga_Session session; + uint32_t indicator; + nifpga_grpc::MonikerReadU16Response response; + std::shared_ptr library; + }; + + struct MonikerReadU32Data + { + NiFpga_Session session; + uint32_t indicator; + nifpga_grpc::MonikerReadU32Response response; + std::shared_ptr library; + }; + + struct MonikerReadU64Data + { + NiFpga_Session session; + uint32_t indicator; + nifpga_grpc::MonikerReadU64Response response; + std::shared_ptr library; + }; + + struct MonikerReadU8Data + { + NiFpga_Session session; + uint32_t indicator; + nifpga_grpc::MonikerReadU8Response response; + std::shared_ptr library; + }; + + struct MonikerWriteArrayBoolData + { + NiFpga_Session session; + uint32_t control; + nifpga_grpc::MonikerWriteArrayBoolRequest request; + nifpga_grpc::MonikerWriteArrayBoolResponse response; + std::shared_ptr library; + }; + + struct MonikerWriteArrayDblData + { + NiFpga_Session session; + uint32_t control; + nifpga_grpc::MonikerWriteArrayDblRequest request; + nifpga_grpc::MonikerWriteArrayDblResponse response; + std::shared_ptr library; + }; + + struct MonikerWriteArrayI16Data + { + NiFpga_Session session; + uint32_t control; + nifpga_grpc::MonikerWriteArrayI16Request request; + nifpga_grpc::MonikerWriteArrayI16Response response; + std::shared_ptr library; + }; + + struct MonikerWriteArrayI32Data + { + NiFpga_Session session; + uint32_t control; + nifpga_grpc::MonikerWriteArrayI32Request request; + nifpga_grpc::MonikerWriteArrayI32Response response; + std::shared_ptr library; + }; + + struct MonikerWriteArrayI64Data + { + NiFpga_Session session; + uint32_t control; + nifpga_grpc::MonikerWriteArrayI64Request request; + nifpga_grpc::MonikerWriteArrayI64Response response; + std::shared_ptr library; + }; + + struct MonikerWriteArrayI8Data + { + NiFpga_Session session; + uint32_t control; + nifpga_grpc::MonikerWriteArrayI8Request request; + nifpga_grpc::MonikerWriteArrayI8Response response; + std::shared_ptr library; + }; + + struct MonikerWriteArraySglData + { + NiFpga_Session session; + uint32_t control; + nifpga_grpc::MonikerWriteArraySglRequest request; + nifpga_grpc::MonikerWriteArraySglResponse response; + std::shared_ptr library; + }; + + struct MonikerWriteArrayU16Data + { + NiFpga_Session session; + uint32_t control; + nifpga_grpc::MonikerWriteArrayU16Request request; + nifpga_grpc::MonikerWriteArrayU16Response response; + std::shared_ptr library; + }; + + struct MonikerWriteArrayU32Data + { + NiFpga_Session session; + uint32_t control; + nifpga_grpc::MonikerWriteArrayU32Request request; + nifpga_grpc::MonikerWriteArrayU32Response response; + std::shared_ptr library; + }; + + struct MonikerWriteArrayU64Data + { + NiFpga_Session session; + uint32_t control; + nifpga_grpc::MonikerWriteArrayU64Request request; + nifpga_grpc::MonikerWriteArrayU64Response response; + std::shared_ptr library; + }; + + struct MonikerWriteArrayU8Data + { + NiFpga_Session session; + uint32_t control; + nifpga_grpc::MonikerWriteArrayU8Request request; + nifpga_grpc::MonikerWriteArrayU8Response response; + std::shared_ptr library; + }; + + struct MonikerWriteBoolData + { + NiFpga_Session session; + uint32_t control; + nifpga_grpc::MonikerWriteBoolRequest request; + nifpga_grpc::MonikerWriteBoolResponse response; + std::shared_ptr library; + }; + + struct MonikerWriteDblData + { + NiFpga_Session session; + uint32_t control; + nifpga_grpc::MonikerWriteDblRequest request; + nifpga_grpc::MonikerWriteDblResponse response; + std::shared_ptr library; + }; + + struct MonikerWriteI16Data + { + NiFpga_Session session; + uint32_t control; + nifpga_grpc::MonikerWriteI16Request request; + nifpga_grpc::MonikerWriteI16Response response; + std::shared_ptr library; + }; + + struct MonikerWriteI32Data + { + NiFpga_Session session; + uint32_t control; + nifpga_grpc::MonikerWriteI32Request request; + nifpga_grpc::MonikerWriteI32Response response; + std::shared_ptr library; + }; + + struct MonikerWriteI64Data + { + NiFpga_Session session; + uint32_t control; + nifpga_grpc::MonikerWriteI64Request request; + nifpga_grpc::MonikerWriteI64Response response; + std::shared_ptr library; + }; + + struct MonikerWriteI8Data + { + NiFpga_Session session; + uint32_t control; + nifpga_grpc::MonikerWriteI8Request request; + nifpga_grpc::MonikerWriteI8Response response; + std::shared_ptr library; + }; + + struct MonikerWriteSglData + { + NiFpga_Session session; + uint32_t control; + nifpga_grpc::MonikerWriteSglRequest request; + nifpga_grpc::MonikerWriteSglResponse response; + std::shared_ptr library; + }; + + struct MonikerWriteU16Data + { + NiFpga_Session session; + uint32_t control; + nifpga_grpc::MonikerWriteU16Request request; + nifpga_grpc::MonikerWriteU16Response response; + std::shared_ptr library; + }; + + struct MonikerWriteU32Data + { + NiFpga_Session session; + uint32_t control; + nifpga_grpc::MonikerWriteU32Request request; + nifpga_grpc::MonikerWriteU32Response response; + std::shared_ptr library; + }; + + struct MonikerWriteU64Data + { + NiFpga_Session session; + uint32_t control; + nifpga_grpc::MonikerWriteU64Request request; + nifpga_grpc::MonikerWriteU64Response response; + std::shared_ptr library; + }; + + struct MonikerWriteU8Data + { + NiFpga_Session session; + uint32_t control; + nifpga_grpc::MonikerWriteU8Request request; + nifpga_grpc::MonikerWriteU8Response response; + std::shared_ptr library; + }; + + NiFpgaService::NiFpgaService( + LibrarySharedPtr library, + ResourceRepositorySharedPtr resource_repository, + const NiFpgaFeatureToggles& feature_toggles) + : library_(library), session_repository_(resource_repository), feature_toggles_(feature_toggles) -{ -} - -NiFpgaService::~NiFpgaService() -{ -} - -// 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; -} - -void RegisterMonikerEndpoints() -{ - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadArrayBool", MonikerReadArrayBool); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadArrayDbl", MonikerReadArrayDbl); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadArrayI16", MonikerReadArrayI16); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadArrayI32", MonikerReadArrayI32); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadArrayI64", MonikerReadArrayI64); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadArrayI8", MonikerReadArrayI8); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadArraySgl", MonikerReadArraySgl); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadArrayU16", MonikerReadArrayU16); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadArrayU32", MonikerReadArrayU32); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadArrayU64", MonikerReadArrayU64); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadArrayU8", MonikerReadArrayU8); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadBool", MonikerReadBool); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadDbl", MonikerReadDbl); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadI16", MonikerReadI16); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadI32", MonikerReadI32); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadI64", MonikerReadI64); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadI8", MonikerReadI8); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadSgl", MonikerReadSgl); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadU16", MonikerReadU16); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadU32", MonikerReadU32); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadU64", MonikerReadU64); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadU8", MonikerReadU8); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteArrayBool", MonikerWriteArrayBool); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteArrayDbl", MonikerWriteArrayDbl); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteArrayI16", MonikerWriteArrayI16); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteArrayI32", MonikerWriteArrayI32); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteArrayI64", MonikerWriteArrayI64); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteArrayI8", MonikerWriteArrayI8); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteArraySgl", MonikerWriteArraySgl); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteArrayU16", MonikerWriteArrayU16); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteArrayU32", MonikerWriteArrayU32); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteArrayU64", MonikerWriteArrayU64); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteArrayU8", MonikerWriteArrayU8); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteBool", MonikerWriteBool); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteDbl", MonikerWriteDbl); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteI16", MonikerWriteI16); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteI32", MonikerWriteI32); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteI64", MonikerWriteI64); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteI8", MonikerWriteI8); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteSgl", MonikerWriteSgl); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteU16", MonikerWriteU16); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteU32", MonikerWriteU32); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteU64", MonikerWriteU64); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteU8", MonikerWriteU8); -} + { + } + + NiFpgaService::~NiFpgaService() + { + } + + // 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; + } + + void RegisterMonikerEndpoints() + { + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadArrayBool", MonikerReadArrayBool); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadArrayDbl", MonikerReadArrayDbl); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadArrayI16", MonikerReadArrayI16); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadArrayI32", MonikerReadArrayI32); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadArrayI64", MonikerReadArrayI64); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadArrayI8", MonikerReadArrayI8); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadArraySgl", MonikerReadArraySgl); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadArrayU16", MonikerReadArrayU16); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadArrayU32", MonikerReadArrayU32); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadArrayU64", MonikerReadArrayU64); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadArrayU8", MonikerReadArrayU8); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadBool", MonikerReadBool); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadDbl", MonikerReadDbl); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadI16", MonikerReadI16); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadI32", MonikerReadI32); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadI64", MonikerReadI64); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadI8", MonikerReadI8); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadSgl", MonikerReadSgl); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadU16", MonikerReadU16); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadU32", MonikerReadU32); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadU64", MonikerReadU64); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadU8", MonikerReadU8); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteArrayBool", MonikerWriteArrayBool); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteArrayDbl", MonikerWriteArrayDbl); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteArrayI16", MonikerWriteArrayI16); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteArrayI32", MonikerWriteArrayI32); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteArrayI64", MonikerWriteArrayI64); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteArrayI8", MonikerWriteArrayI8); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteArraySgl", MonikerWriteArraySgl); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteArrayU16", MonikerWriteArrayU16); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteArrayU32", MonikerWriteArrayU32); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteArrayU64", MonikerWriteArrayU64); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteArrayU8", MonikerWriteArrayU8); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteBool", MonikerWriteBool); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteDbl", MonikerWriteDbl); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteI16", MonikerWriteI16); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteI32", MonikerWriteI32); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteI64", MonikerWriteI64); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteI8", MonikerWriteI8); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteSgl", MonikerWriteSgl); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteU16", MonikerWriteU16); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteU32", MonikerWriteU32); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteU64", MonikerWriteU64); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteU8", MonikerWriteU8); + } ::grpc::Status MonikerReadArrayBool(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadArrayBoolData* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto session = function_data->session; - auto indicator = function_data->indicator; - auto size = function_data->size; - std::vector array(size, NiFpga_Bool()); + MonikerReadArrayBoolData* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto session = function_data->session; + auto indicator = function_data->indicator; + auto size = function_data->size; + std::vector array(size, NiFpga_Bool()); - auto status = library->ReadArrayBool(session, indicator, array.data(), size); + auto status = library->ReadArrayBool(session, indicator, array.data(), size); - if (status >= 0) { - response->set_status(status); - convert_to_grpc(array, response->mutable_array()); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + if (status >= 0) + { + response->set_status(status); + convert_to_grpc(array, response->mutable_array()); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadArrayDbl(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadArrayDblData* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto session = function_data->session; - auto indicator = function_data->indicator; - auto size = function_data->size; - response->mutable_array()->Resize(size, 0); - double* array = response->mutable_array()->mutable_data(); + MonikerReadArrayDblData* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto session = function_data->session; + auto indicator = function_data->indicator; + auto size = function_data->size; + response->mutable_array()->Resize(size, 0); + double* array = response->mutable_array()->mutable_data(); - auto status = library->ReadArrayDbl(session, indicator, array, size); + auto status = library->ReadArrayDbl(session, indicator, array, size); - if (status >= 0) { - response->set_status(status); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + if (status >= 0) + { + response->set_status(status); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadArrayI16(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadArrayI16Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto session = function_data->session; - auto indicator = function_data->indicator; - auto size = function_data->size; - std::vector array(size); - - auto status = library->ReadArrayI16(session, indicator, array.data(), size); - - if (status >= 0) { - response->set_status(status); - response->mutable_array()->Clear(); - response->mutable_array()->Reserve(size); - std::transform( - array.begin(), - array.begin() + size, - google::protobuf::RepeatedFieldBackInserter(response->mutable_array()), - [&](auto x) { - return x; - }); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + MonikerReadArrayI16Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto session = function_data->session; + auto indicator = function_data->indicator; + auto size = function_data->size; + std::vector array(size); + + auto status = library->ReadArrayI16(session, indicator, array.data(), size); + + if (status >= 0) + { + response->set_status(status); + response->mutable_array()->Clear(); + response->mutable_array()->Reserve(size); + std::transform( + array.begin(), + array.begin() + size, + google::protobuf::RepeatedFieldBackInserter(response->mutable_array()), + [&](auto x) { + return x; + }); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadArrayI32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadArrayI32Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto session = function_data->session; - auto indicator = function_data->indicator; - auto size = function_data->size; - response->mutable_array()->Resize(size, 0); - int32_t* array = response->mutable_array()->mutable_data(); + MonikerReadArrayI32Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto session = function_data->session; + auto indicator = function_data->indicator; + auto size = function_data->size; + response->mutable_array()->Resize(size, 0); + int32_t* array = response->mutable_array()->mutable_data(); - auto status = library->ReadArrayI32(session, indicator, array, size); + auto status = library->ReadArrayI32(session, indicator, array, size); - if (status >= 0) { - response->set_status(status); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + if (status >= 0) + { + response->set_status(status); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadArrayI64(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadArrayI64Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto session = function_data->session; - auto indicator = function_data->indicator; - auto size = function_data->size; - response->mutable_array()->Resize(size, 0); - int64_t* array = response->mutable_array()->mutable_data(); + MonikerReadArrayI64Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto session = function_data->session; + auto indicator = function_data->indicator; + auto size = function_data->size; + response->mutable_array()->Resize(size, 0); + int64_t* array = response->mutable_array()->mutable_data(); - auto status = library->ReadArrayI64(session, indicator, array, size); + auto status = library->ReadArrayI64(session, indicator, array, size); - if (status >= 0) { - response->set_status(status); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + if (status >= 0) + { + response->set_status(status); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadArrayI8(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadArrayI8Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto session = function_data->session; - auto indicator = function_data->indicator; - auto size = function_data->size; - std::vector array(size); - - auto status = library->ReadArrayI8(session, indicator, array.data(), size); - - if (status >= 0) { - response->set_status(status); - response->mutable_array()->Clear(); - response->mutable_array()->Reserve(size); - std::transform( - array.begin(), - array.begin() + size, - google::protobuf::RepeatedFieldBackInserter(response->mutable_array()), - [&](auto x) { - return x; - }); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + MonikerReadArrayI8Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto session = function_data->session; + auto indicator = function_data->indicator; + auto size = function_data->size; + std::vector array(size); + + auto status = library->ReadArrayI8(session, indicator, array.data(), size); + + if (status >= 0) + { + response->set_status(status); + response->mutable_array()->Clear(); + response->mutable_array()->Reserve(size); + std::transform( + array.begin(), + array.begin() + size, + google::protobuf::RepeatedFieldBackInserter(response->mutable_array()), + [&](auto x) { + return x; + }); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadArraySgl(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadArraySglData* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto session = function_data->session; - auto indicator = function_data->indicator; - auto size = function_data->size; - response->mutable_array()->Resize(size, 0); - float* array = response->mutable_array()->mutable_data(); + MonikerReadArraySglData* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto session = function_data->session; + auto indicator = function_data->indicator; + auto size = function_data->size; + response->mutable_array()->Resize(size, 0); + float* array = response->mutable_array()->mutable_data(); - auto status = library->ReadArraySgl(session, indicator, array, size); + auto status = library->ReadArraySgl(session, indicator, array, size); - if (status >= 0) { - response->set_status(status); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + if (status >= 0) + { + response->set_status(status); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadArrayU16(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadArrayU16Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto session = function_data->session; - auto indicator = function_data->indicator; - auto size = function_data->size; - std::vector array(size); - - auto status = library->ReadArrayU16(session, indicator, array.data(), size); - - if (status >= 0) { - response->set_status(status); - response->mutable_array()->Clear(); - response->mutable_array()->Reserve(size); - std::transform( - array.begin(), - array.begin() + size, - google::protobuf::RepeatedFieldBackInserter(response->mutable_array()), - [&](auto x) { - return x; - }); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + MonikerReadArrayU16Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto session = function_data->session; + auto indicator = function_data->indicator; + auto size = function_data->size; + std::vector array(size); + + auto status = library->ReadArrayU16(session, indicator, array.data(), size); + + if (status >= 0) + { + response->set_status(status); + response->mutable_array()->Clear(); + response->mutable_array()->Reserve(size); + std::transform( + array.begin(), + array.begin() + size, + google::protobuf::RepeatedFieldBackInserter(response->mutable_array()), + [&](auto x) { + return x; + }); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadArrayU32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadArrayU32Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto session = function_data->session; - auto indicator = function_data->indicator; - auto size = function_data->size; - response->mutable_array()->Resize(size, 0); - uint32_t* array = response->mutable_array()->mutable_data(); + MonikerReadArrayU32Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto session = function_data->session; + auto indicator = function_data->indicator; + auto size = function_data->size; + response->mutable_array()->Resize(size, 0); + uint32_t* array = response->mutable_array()->mutable_data(); - auto status = library->ReadArrayU32(session, indicator, array, size); + auto status = library->ReadArrayU32(session, indicator, array, size); - if (status >= 0) { - response->set_status(status); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + if (status >= 0) + { + response->set_status(status); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadArrayU64(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadArrayU64Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto session = function_data->session; - auto indicator = function_data->indicator; - auto size = function_data->size; - response->mutable_array()->Resize(size, 0); - uint64_t* array = response->mutable_array()->mutable_data(); + MonikerReadArrayU64Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto session = function_data->session; + auto indicator = function_data->indicator; + auto size = function_data->size; + response->mutable_array()->Resize(size, 0); + uint64_t* array = response->mutable_array()->mutable_data(); - auto status = library->ReadArrayU64(session, indicator, array, size); + auto status = library->ReadArrayU64(session, indicator, array, size); - if (status >= 0) { - response->set_status(status); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + if (status >= 0) + { + response->set_status(status); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadArrayU8(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadArrayU8Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto session = function_data->session; - auto indicator = function_data->indicator; - auto size = function_data->size; - std::vector array(size); - - auto status = library->ReadArrayU8(session, indicator, array.data(), size); - - if (status >= 0) { - response->set_status(status); - response->mutable_array()->Clear(); - response->mutable_array()->Reserve(size); - std::transform( - array.begin(), - array.begin() + size, - google::protobuf::RepeatedFieldBackInserter(response->mutable_array()), - [&](auto x) { - return x; - }); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + MonikerReadArrayU8Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto session = function_data->session; + auto indicator = function_data->indicator; + auto size = function_data->size; + std::vector array(size); + + auto status = library->ReadArrayU8(session, indicator, array.data(), size); + + if (status >= 0) + { + response->set_status(status); + response->mutable_array()->Clear(); + response->mutable_array()->Reserve(size); + std::transform( + array.begin(), + array.begin() + size, + google::protobuf::RepeatedFieldBackInserter(response->mutable_array()), + [&](auto x) { + return x; + }); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadBool(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadBoolData* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto session = function_data->session; - auto indicator = function_data->indicator; - NiFpga_Bool value{}; + MonikerReadBoolData* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto session = function_data->session; + auto indicator = function_data->indicator; + NiFpga_Bool value {}; - auto status = library->ReadBool(session, indicator, &value); + auto status = library->ReadBool(session, indicator, &value); - if (status >= 0) { - response->set_status(status); - response->set_value(value); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + if (status >= 0) + { + response->set_status(status); + response->set_value(value); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadDbl(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadDblData* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto session = function_data->session; - auto indicator = function_data->indicator; - double value{}; + MonikerReadDblData* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto session = function_data->session; + auto indicator = function_data->indicator; + double value {}; - auto status = library->ReadDbl(session, indicator, &value); + auto status = library->ReadDbl(session, indicator, &value); - if (status >= 0) { - response->set_status(status); - response->set_value(value); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + if (status >= 0) + { + response->set_status(status); + response->set_value(value); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadI16(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadI16Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto session = function_data->session; - auto indicator = function_data->indicator; - int16_t value{}; + MonikerReadI16Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto session = function_data->session; + auto indicator = function_data->indicator; + int16_t value {}; - auto status = library->ReadI16(session, indicator, &value); + auto status = library->ReadI16(session, indicator, &value); - if (status >= 0) { - response->set_status(status); - response->set_value(value); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + if (status >= 0) + { + response->set_status(status); + response->set_value(value); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadI32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadI32Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto session = function_data->session; - auto indicator = function_data->indicator; - int32_t value{}; + MonikerReadI32Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto session = function_data->session; + auto indicator = function_data->indicator; + int32_t value {}; - auto status = library->ReadI32(session, indicator, &value); + auto status = library->ReadI32(session, indicator, &value); - if (status >= 0) { - response->set_status(status); - response->set_value(value); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + if (status >= 0) + { + response->set_status(status); + response->set_value(value); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadI64(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadI64Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto session = function_data->session; - auto indicator = function_data->indicator; - int64_t value{}; + MonikerReadI64Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto session = function_data->session; + auto indicator = function_data->indicator; + int64_t value {}; - auto status = library->ReadI64(session, indicator, &value); + auto status = library->ReadI64(session, indicator, &value); - if (status >= 0) { - response->set_status(status); - response->set_value(value); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + if (status >= 0) + { + response->set_status(status); + response->set_value(value); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadI8(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadI8Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto session = function_data->session; - auto indicator = function_data->indicator; - int8_t value{}; + MonikerReadI8Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto session = function_data->session; + auto indicator = function_data->indicator; + int8_t value {}; - auto status = library->ReadI8(session, indicator, &value); + auto status = library->ReadI8(session, indicator, &value); - if (status >= 0) { - response->set_status(status); - response->set_value(value); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + if (status >= 0) + { + response->set_status(status); + response->set_value(value); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadSgl(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadSglData* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto session = function_data->session; - auto indicator = function_data->indicator; - float value{}; + MonikerReadSglData* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto session = function_data->session; + auto indicator = function_data->indicator; + float value {}; - auto status = library->ReadSgl(session, indicator, &value); + auto status = library->ReadSgl(session, indicator, &value); - if (status >= 0) { - response->set_status(status); - response->set_value(value); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + if (status >= 0) + { + response->set_status(status); + response->set_value(value); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadU16(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadU16Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto session = function_data->session; - auto indicator = function_data->indicator; - uint16_t value{}; + MonikerReadU16Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto session = function_data->session; + auto indicator = function_data->indicator; + uint16_t value {}; - auto status = library->ReadU16(session, indicator, &value); + auto status = library->ReadU16(session, indicator, &value); - if (status >= 0) { - response->set_status(status); - response->set_value(value); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + if (status >= 0) + { + response->set_status(status); + response->set_value(value); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadU32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadU32Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto session = function_data->session; - auto indicator = function_data->indicator; - uint32_t value{}; + MonikerReadU32Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto session = function_data->session; + auto indicator = function_data->indicator; + uint32_t value {}; - auto status = library->ReadU32(session, indicator, &value); + auto status = library->ReadU32(session, indicator, &value); - if (status >= 0) { - response->set_status(status); - response->set_value(value); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + if (status >= 0) + { + response->set_status(status); + response->set_value(value); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadU64(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadU64Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto session = function_data->session; - auto indicator = function_data->indicator; - uint64_t value{}; + MonikerReadU64Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto session = function_data->session; + auto indicator = function_data->indicator; + uint64_t value {}; - auto status = library->ReadU64(session, indicator, &value); + auto status = library->ReadU64(session, indicator, &value); - if (status >= 0) { - response->set_status(status); - response->set_value(value); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + if (status >= 0) + { + response->set_status(status); + response->set_value(value); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerReadU8(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerReadU8Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto session = function_data->session; - auto indicator = function_data->indicator; - uint8_t value{}; + MonikerReadU8Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto session = function_data->session; + auto indicator = function_data->indicator; + uint8_t value {}; - auto status = library->ReadU8(session, indicator, &value); + auto status = library->ReadU8(session, indicator, &value); - if (status >= 0) { - response->set_status(status); - response->set_value(value); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + if (status >= 0) + { + response->set_status(status); + response->set_value(value); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteArrayBool(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteArrayBoolData* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto session = function_data->session; - auto control = function_data->control; + MonikerWriteArrayBoolData* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto session = function_data->session; + auto control = function_data->control; - ArrayBoolData arraybooldata_message; - packedData.UnpackTo(&arraybooldata_message); + ArrayBoolData arraybooldata_message; + packedData.UnpackTo(&arraybooldata_message); + + auto data_array = arraybooldata_message.value(); + std::vector array(data_array.begin(), data_array.end()); + auto size = data_array.size(); - auto data_array = arraybooldata_message.value(); - std::vector array(data_array.begin(), data_array.end()); - auto size = data_array.size(); + auto status = library->WriteArrayBool(session, control, array.data(), size); - auto status = library->WriteArrayBool(session, control, array.data(), size); - - if (status < 0) { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteArrayDbl(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteArrayDblData* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto session = function_data->session; - auto control = function_data->control; + MonikerWriteArrayDblData* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto session = function_data->session; + auto control = function_data->control; - ArrayDoubleData arraydoubledata_message; - packedData.UnpackTo(&arraydoubledata_message); + ArrayDoubleData arraydoubledata_message; + packedData.UnpackTo(&arraydoubledata_message); + + auto data_array = arraydoubledata_message.value(); + auto array = const_cast(arraydoubledata_message.value().data()); + auto size = data_array.size(); - auto data_array = arraydoubledata_message.value(); - auto array = const_cast(arraydoubledata_message.value().data()); - auto size = data_array.size(); + auto status = library->WriteArrayDbl(session, control, array, size); - auto status = library->WriteArrayDbl(session, control, array, size); - - if (status < 0) { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteArrayI16(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteArrayI16Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto session = function_data->session; - auto control = function_data->control; - - ArrayI32Data arrayi32data_message; - packedData.UnpackTo(&arrayi32data_message); - - auto data_array = arrayi32data_message.value(); - auto array = std::vector(); - auto size = data_array.size(); - array.reserve(size); - std::transform( + MonikerWriteArrayI16Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto session = function_data->session; + auto control = function_data->control; + + ArrayI32Data arrayi32data_message; + packedData.UnpackTo(&arrayi32data_message); + + auto data_array = arrayi32data_message.value(); + auto array = std::vector(); + auto size = data_array.size(); + array.reserve(size); + std::transform( data_array.begin(), data_array.end(), std::back_inserter(array), @@ -1032,76 +1121,79 @@ ::grpc::Status MonikerWriteArrayI16(void* data, google::protobuf::Arena& arena, return static_cast(x); }); - auto status = library->WriteArrayI16(session, control, array.data(), size); + auto status = library->WriteArrayI16(session, control, array.data(), size); - if (status < 0) { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteArrayI32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteArrayI32Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto session = function_data->session; - auto control = function_data->control; + MonikerWriteArrayI32Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto session = function_data->session; + auto control = function_data->control; - ArrayI32Data arrayi32data_message; - packedData.UnpackTo(&arrayi32data_message); + ArrayI32Data arrayi32data_message; + packedData.UnpackTo(&arrayi32data_message); + + auto data_array = arrayi32data_message.value(); + auto array = const_cast(arrayi32data_message.value().data()); + auto size = data_array.size(); - auto data_array = arrayi32data_message.value(); - auto array = const_cast(arrayi32data_message.value().data()); - auto size = data_array.size(); + auto status = library->WriteArrayI32(session, control, array, size); - auto status = library->WriteArrayI32(session, control, array, size); - - if (status < 0) { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteArrayI64(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteArrayI64Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto session = function_data->session; - auto control = function_data->control; + MonikerWriteArrayI64Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto session = function_data->session; + auto control = function_data->control; - ArrayI64Data arrayi64data_message; - packedData.UnpackTo(&arrayi64data_message); + ArrayI64Data arrayi64data_message; + packedData.UnpackTo(&arrayi64data_message); + + auto data_array = arrayi64data_message.value(); + auto array = const_cast(arrayi64data_message.value().data()); + auto size = data_array.size(); - auto data_array = arrayi64data_message.value(); - auto array = const_cast(arrayi64data_message.value().data()); - auto size = data_array.size(); + auto status = library->WriteArrayI64(session, control, array, size); - auto status = library->WriteArrayI64(session, control, array, size); - - if (status < 0) { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteArrayI8(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteArrayI8Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto session = function_data->session; - auto control = function_data->control; - - ArrayI32Data arrayi32data_message; - packedData.UnpackTo(&arrayi32data_message); - - auto data_array = arrayi32data_message.value(); - auto array = std::vector(); - auto size = data_array.size(); - array.reserve(size); - std::transform( + MonikerWriteArrayI8Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto session = function_data->session; + auto control = function_data->control; + + ArrayI32Data arrayi32data_message; + packedData.UnpackTo(&arrayi32data_message); + + auto data_array = arrayi32data_message.value(); + auto array = std::vector(); + auto size = data_array.size(); + array.reserve(size); + std::transform( data_array.begin(), data_array.end(), std::back_inserter(array), @@ -1113,53 +1205,55 @@ ::grpc::Status MonikerWriteArrayI8(void* data, google::protobuf::Arena& arena, g return static_cast(x); }); - auto status = library->WriteArrayI8(session, control, array.data(), size); + auto status = library->WriteArrayI8(session, control, array.data(), size); - if (status < 0) { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteArraySgl(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteArraySglData* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto session = function_data->session; - auto control = function_data->control; + MonikerWriteArraySglData* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto session = function_data->session; + auto control = function_data->control; - ArrayFloatData arrayfloatdata_message; - packedData.UnpackTo(&arrayfloatdata_message); + ArrayFloatData arrayfloatdata_message; + packedData.UnpackTo(&arrayfloatdata_message); + + auto data_array = arrayfloatdata_message.value(); + auto array = const_cast(arrayfloatdata_message.value().data()); + auto size = data_array.size(); - auto data_array = arrayfloatdata_message.value(); - auto array = const_cast(arrayfloatdata_message.value().data()); - auto size = data_array.size(); + auto status = library->WriteArraySgl(session, control, array, size); - auto status = library->WriteArraySgl(session, control, array, size); - - if (status < 0) { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteArrayU16(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteArrayU16Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto session = function_data->session; - auto control = function_data->control; - - ArrayU32Data arrayu32data_message; - packedData.UnpackTo(&arrayu32data_message); - - auto data_array = arrayu32data_message.value(); - auto array = std::vector(); - auto size = data_array.size(); - array.reserve(size); - std::transform( + MonikerWriteArrayU16Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto session = function_data->session; + auto control = function_data->control; + + ArrayU32Data arrayu32data_message; + packedData.UnpackTo(&arrayu32data_message); + + auto data_array = arrayu32data_message.value(); + auto array = std::vector(); + auto size = data_array.size(); + array.reserve(size); + std::transform( data_array.begin(), data_array.end(), std::back_inserter(array), @@ -1171,76 +1265,79 @@ ::grpc::Status MonikerWriteArrayU16(void* data, google::protobuf::Arena& arena, return static_cast(x); }); - auto status = library->WriteArrayU16(session, control, array.data(), size); + auto status = library->WriteArrayU16(session, control, array.data(), size); - if (status < 0) { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteArrayU32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteArrayU32Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto session = function_data->session; - auto control = function_data->control; + MonikerWriteArrayU32Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto session = function_data->session; + auto control = function_data->control; - ArrayU32Data arrayu32data_message; - packedData.UnpackTo(&arrayu32data_message); + ArrayU32Data arrayu32data_message; + packedData.UnpackTo(&arrayu32data_message); + + auto data_array = arrayu32data_message.value(); + auto array = const_cast(arrayu32data_message.value().data()); + auto size = data_array.size(); - auto data_array = arrayu32data_message.value(); - auto array = const_cast(arrayu32data_message.value().data()); - auto size = data_array.size(); + auto status = library->WriteArrayU32(session, control, array, size); - auto status = library->WriteArrayU32(session, control, array, size); - - if (status < 0) { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteArrayU64(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteArrayU64Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto session = function_data->session; - auto control = function_data->control; + MonikerWriteArrayU64Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto session = function_data->session; + auto control = function_data->control; - ArrayU64Data arrayu64data_message; - packedData.UnpackTo(&arrayu64data_message); + ArrayU64Data arrayu64data_message; + packedData.UnpackTo(&arrayu64data_message); + + auto data_array = arrayu64data_message.value(); + auto array = const_cast(arrayu64data_message.value().data()); + auto size = data_array.size(); - auto data_array = arrayu64data_message.value(); - auto array = const_cast(arrayu64data_message.value().data()); - auto size = data_array.size(); + auto status = library->WriteArrayU64(session, control, array, size); - auto status = library->WriteArrayU64(session, control, array, size); - - if (status < 0) { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteArrayU8(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteArrayU8Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto session = function_data->session; - auto control = function_data->control; - - ArrayU32Data arrayu32data_message; - packedData.UnpackTo(&arrayu32data_message); - - auto data_array = arrayu32data_message.value(); - auto array = std::vector(); - auto size = data_array.size(); - array.reserve(size); - std::transform( + MonikerWriteArrayU8Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto session = function_data->session; + auto control = function_data->control; + + ArrayU32Data arrayu32data_message; + packedData.UnpackTo(&arrayu32data_message); + + auto data_array = arrayu32data_message.value(); + auto array = std::vector(); + auto size = data_array.size(); + array.reserve(size); + std::transform( data_array.begin(), data_array.end(), std::back_inserter(array), @@ -1252,4341 +1349,4355 @@ ::grpc::Status MonikerWriteArrayU8(void* data, google::protobuf::Arena& arena, g return static_cast(x); }); - auto status = library->WriteArrayU8(session, control, array.data(), size); + auto status = library->WriteArrayU8(session, control, array.data(), size); - if (status < 0) { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteBool(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteBoolData* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto session = function_data->session; - auto control = function_data->control; + MonikerWriteBoolData* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto session = function_data->session; + auto control = function_data->control; - BoolData booldata_message; - packedData.UnpackTo(&booldata_message); - auto value = booldata_message.value(); + BoolData booldata_message; + packedData.UnpackTo(&booldata_message); + auto value = booldata_message.value(); - auto status = library->WriteBool(session, control, value); + auto status = library->WriteBool(session, control, value); - if (status < 0) { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteDbl(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteDblData* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto session = function_data->session; - auto control = function_data->control; + MonikerWriteDblData* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto session = function_data->session; + auto control = function_data->control; - DoubleData doubledata_message; - packedData.UnpackTo(&doubledata_message); - auto value = doubledata_message.value(); + DoubleData doubledata_message; + packedData.UnpackTo(&doubledata_message); + auto value = doubledata_message.value(); - auto status = library->WriteDbl(session, control, value); + auto status = library->WriteDbl(session, control, value); - if (status < 0) { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteI16(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteI16Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto session = function_data->session; - auto control = function_data->control; - - I32Data i32data_message; - packedData.UnpackTo(&i32data_message); - auto value = i32data_message.value(); - if (value < std::numeric_limits::min() || value > std::numeric_limits::max()) { - std::string message("value " + std::to_string(value) + " doesn't fit in datatype int16_t"); - throw nidevice_grpc::ValueOutOfRangeException(message); - } + MonikerWriteI16Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto session = function_data->session; + auto control = function_data->control; + + I32Data i32data_message; + packedData.UnpackTo(&i32data_message); + auto value = i32data_message.value(); + if (value < std::numeric_limits::min() || value > std::numeric_limits::max()) { + std::string message("value " + std::to_string(value) + " doesn't fit in datatype int16_t"); + throw nidevice_grpc::ValueOutOfRangeException(message); + } - auto status = library->WriteI16(session, control, value); + auto status = library->WriteI16(session, control, value); - if (status < 0) { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteI32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteI32Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto session = function_data->session; - auto control = function_data->control; + MonikerWriteI32Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto session = function_data->session; + auto control = function_data->control; - I32Data i32data_message; - packedData.UnpackTo(&i32data_message); - auto value = i32data_message.value(); + I32Data i32data_message; + packedData.UnpackTo(&i32data_message); + auto value = i32data_message.value(); - auto status = library->WriteI32(session, control, value); + auto status = library->WriteI32(session, control, value); - if (status < 0) { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteI64(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteI64Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto session = function_data->session; - auto control = function_data->control; + MonikerWriteI64Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto session = function_data->session; + auto control = function_data->control; - I64Data i64data_message; - packedData.UnpackTo(&i64data_message); - auto value = i64data_message.value(); + I64Data i64data_message; + packedData.UnpackTo(&i64data_message); + auto value = i64data_message.value(); - auto status = library->WriteI64(session, control, value); + auto status = library->WriteI64(session, control, value); - if (status < 0) { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteI8(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteI8Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto session = function_data->session; - auto control = function_data->control; - - I32Data i32data_message; - packedData.UnpackTo(&i32data_message); - auto value = i32data_message.value(); - if (value < std::numeric_limits::min() || value > std::numeric_limits::max()) { - std::string message("value " + std::to_string(value) + " doesn't fit in datatype int8_t"); - throw nidevice_grpc::ValueOutOfRangeException(message); - } + MonikerWriteI8Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto session = function_data->session; + auto control = function_data->control; + + I32Data i32data_message; + packedData.UnpackTo(&i32data_message); + auto value = i32data_message.value(); + if (value < std::numeric_limits::min() || value > std::numeric_limits::max()) { + std::string message("value " + std::to_string(value) + " doesn't fit in datatype int8_t"); + throw nidevice_grpc::ValueOutOfRangeException(message); + } - auto status = library->WriteI8(session, control, value); + auto status = library->WriteI8(session, control, value); - if (status < 0) { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteSgl(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteSglData* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto session = function_data->session; - auto control = function_data->control; + MonikerWriteSglData* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto session = function_data->session; + auto control = function_data->control; - FloatData floatdata_message; - packedData.UnpackTo(&floatdata_message); - auto value = floatdata_message.value(); + FloatData floatdata_message; + packedData.UnpackTo(&floatdata_message); + auto value = floatdata_message.value(); - auto status = library->WriteSgl(session, control, value); + auto status = library->WriteSgl(session, control, value); - if (status < 0) { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteU16(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteU16Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto session = function_data->session; - auto control = function_data->control; - - U32Data u32data_message; - packedData.UnpackTo(&u32data_message); - auto value = u32data_message.value(); - if (value < std::numeric_limits::min() || value > std::numeric_limits::max()) { - std::string message("value " + std::to_string(value) + " doesn't fit in datatype uint16_t"); - throw nidevice_grpc::ValueOutOfRangeException(message); - } + MonikerWriteU16Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto session = function_data->session; + auto control = function_data->control; + + U32Data u32data_message; + packedData.UnpackTo(&u32data_message); + auto value = u32data_message.value(); + if (value < std::numeric_limits::min() || value > std::numeric_limits::max()) { + std::string message("value " + std::to_string(value) + " doesn't fit in datatype uint16_t"); + throw nidevice_grpc::ValueOutOfRangeException(message); + } - auto status = library->WriteU16(session, control, value); + auto status = library->WriteU16(session, control, value); - if (status < 0) { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteU32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteU32Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto session = function_data->session; - auto control = function_data->control; + MonikerWriteU32Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto session = function_data->session; + auto control = function_data->control; - U32Data u32data_message; - packedData.UnpackTo(&u32data_message); - auto value = u32data_message.value(); + U32Data u32data_message; + packedData.UnpackTo(&u32data_message); + auto value = u32data_message.value(); - auto status = library->WriteU32(session, control, value); + auto status = library->WriteU32(session, control, value); - if (status < 0) { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteU64(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteU64Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto session = function_data->session; - auto control = function_data->control; + MonikerWriteU64Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto session = function_data->session; + auto control = function_data->control; - U64Data u64data_message; - packedData.UnpackTo(&u64data_message); - auto value = u64data_message.value(); + U64Data u64data_message; + packedData.UnpackTo(&u64data_message); + auto value = u64data_message.value(); - auto status = library->WriteU64(session, control, value); + auto status = library->WriteU64(session, control, value); - if (status < 0) { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } ::grpc::Status MonikerWriteU8(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteU8Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto session = function_data->session; - auto control = function_data->control; + MonikerWriteU8Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto session = function_data->session; + auto control = function_data->control; + + U32Data u32data_message; + packedData.UnpackTo(&u32data_message); + auto value = u32data_message.value(); + if (value < std::numeric_limits::min() || value > std::numeric_limits::max()) { + std::string message("value " + std::to_string(value) + " doesn't fit in datatype uint8_t"); + throw nidevice_grpc::ValueOutOfRangeException(message); + } - U32Data u32data_message; - packedData.UnpackTo(&u32data_message); - auto value = u32data_message.value(); - if (value < std::numeric_limits::min() || value > std::numeric_limits::max()) { - std::string message("value " + std::to_string(value) + " doesn't fit in datatype uint8_t"); - throw nidevice_grpc::ValueOutOfRangeException(message); - } - - auto status = library->WriteU8(session, control, value); - - if (status < 0) { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; -} + auto status = library->WriteU8(session, control, value); -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::Abort(::grpc::ServerContext* context, const AbortRequest* request, AbortResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - auto status = library_->Abort(session); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } - response->set_status(status); return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::AcknowledgeIrqs(::grpc::ServerContext* context, const AcknowledgeIrqsRequest* request, AcknowledgeIrqsResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t irqs = request->irqs(); - auto status = library_->AcknowledgeIrqs(session, irqs); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::Abort(::grpc::ServerContext* context, const AbortRequest* request, AbortResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + auto status = library_->Abort(session); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::Close(::grpc::ServerContext* context, const CloseRequest* request, CloseResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t attribute; - switch (request->attribute_enum_case()) { - case nifpga_grpc::CloseRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::AcknowledgeIrqs(::grpc::ServerContext* context, const AcknowledgeIrqsRequest* request, AcknowledgeIrqsResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t irqs = request->irqs(); + auto status = library_->AcknowledgeIrqs(session, irqs); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); } - case nifpga_grpc::CloseRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - break; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::Close(::grpc::ServerContext* context, const CloseRequest* request, CloseResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t attribute; + switch (request->attribute_enum_case()) { + case nifpga_grpc::CloseRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + break; + } + case nifpga_grpc::CloseRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + break; + } + case nifpga_grpc::CloseRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nifpga_grpc::CloseRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + session_repository_->remove_session(session_grpc_session.name()); + auto status = library_->Close(session, attribute); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); } + response->set_status(status); + return ::grpc::Status::OK; } - - session_repository_->remove_session(session_grpc_session.name()); - auto status = library_->Close(session, attribute); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::CommitFifoConfiguration(::grpc::ServerContext* context, const CommitFifoConfigurationRequest* request, CommitFifoConfigurationResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - auto status = library_->CommitFifoConfiguration(session, fifo); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::CommitFifoConfiguration(::grpc::ServerContext* context, const CommitFifoConfigurationRequest* request, CommitFifoConfigurationResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + auto status = library_->CommitFifoConfiguration(session, fifo); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ConfigureFifo(::grpc::ServerContext* context, const ConfigureFifoRequest* request, ConfigureFifoResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - size_t depth = request->depth(); - auto status = library_->ConfigureFifo(session, fifo, depth); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ConfigureFifo(::grpc::ServerContext* context, const ConfigureFifoRequest* request, ConfigureFifoResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + size_t depth = request->depth(); + auto status = library_->ConfigureFifo(session, fifo, depth); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ConfigureFifo2(::grpc::ServerContext* context, const ConfigureFifo2Request* request, ConfigureFifo2Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - size_t requested_depth = request->requested_depth(); - size_t actual_depth{}; - auto status = library_->ConfigureFifo2(session, fifo, requested_depth, &actual_depth); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_actual_depth(actual_depth); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ConfigureFifo2(::grpc::ServerContext* context, const ConfigureFifo2Request* request, ConfigureFifo2Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + size_t requested_depth = request->requested_depth(); + size_t actual_depth {}; + auto status = library_->ConfigureFifo2(session, fifo, requested_depth, &actual_depth); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_actual_depth(actual_depth); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::Download(::grpc::ServerContext* context, const DownloadRequest* request, DownloadResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - auto status = library_->Download(session); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::Download(::grpc::ServerContext* context, const DownloadRequest* request, DownloadResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + auto status = library_->Download(session); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::FindFifo(::grpc::ServerContext* context, const FindFifoRequest* request, FindFifoResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - auto fifo_name_mbcs = convert_from_grpc(request->fifo_name()); - char* fifo_name = (char*)fifo_name_mbcs.c_str(); - uint32_t fifo_number{}; - auto status = library_->FindFifo(session, fifo_name, &fifo_number); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_fifo_number(fifo_number); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::FindFifo(::grpc::ServerContext* context, const FindFifoRequest* request, FindFifoResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + auto fifo_name_mbcs = convert_from_grpc(request->fifo_name()); + char* fifo_name = (char*)fifo_name_mbcs.c_str(); + uint32_t fifo_number {}; + auto status = library_->FindFifo(session, fifo_name, &fifo_number); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_fifo_number(fifo_number); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::FindRegister(::grpc::ServerContext* context, const FindRegisterRequest* request, FindRegisterResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - auto register_name_mbcs = convert_from_grpc(request->register_name()); - char* register_name = (char*)register_name_mbcs.c_str(); - uint32_t register_offset{}; - auto status = library_->FindRegister(session, register_name, ®ister_offset); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_register_offset(register_offset); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::FindRegister(::grpc::ServerContext* context, const FindRegisterRequest* request, FindRegisterResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + auto register_name_mbcs = convert_from_grpc(request->register_name()); + char* register_name = (char*)register_name_mbcs.c_str(); + uint32_t register_offset {}; + auto status = library_->FindRegister(session, register_name, ®ister_offset); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_register_offset(register_offset); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::GetBitfileSignature(::grpc::ServerContext* context, const GetBitfileSignatureRequest* request, GetBitfileSignatureResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t signature{}; - size_t signature_size{}; - auto status = library_->GetBitfileSignature(session, &signature, &signature_size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_signature(signature); - response->set_signature_size(signature_size); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::GetBitfileSignature(::grpc::ServerContext* context, const GetBitfileSignatureRequest* request, GetBitfileSignatureResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t signature {}; + size_t signature_size {}; + auto status = library_->GetBitfileSignature(session, &signature, &signature_size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_signature(signature); + response->set_signature_size(signature_size); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::GetFifoPropertyI32(::grpc::ServerContext* context, const GetFifoPropertyI32Request* request, GetFifoPropertyI32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - NiFpga_FifoProperty property; - switch (request->property_enum_case()) { - case nifpga_grpc::GetFifoPropertyI32Request::PropertyEnumCase::kProperty: { - property = static_cast(request->property()); - break; - } - case nifpga_grpc::GetFifoPropertyI32Request::PropertyEnumCase::kPropertyRaw: { - property = static_cast(request->property_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::GetFifoPropertyI32(::grpc::ServerContext* context, const GetFifoPropertyI32Request* request, GetFifoPropertyI32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + NiFpga_FifoProperty property; + switch (request->property_enum_case()) { + case nifpga_grpc::GetFifoPropertyI32Request::PropertyEnumCase::kProperty: { + property = static_cast(request->property()); + break; + } + case nifpga_grpc::GetFifoPropertyI32Request::PropertyEnumCase::kPropertyRaw: { + property = static_cast(request->property_raw()); + break; + } + case nifpga_grpc::GetFifoPropertyI32Request::PropertyEnumCase::PROPERTY_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for property was not specified or out of range"); + break; + } } - case nifpga_grpc::GetFifoPropertyI32Request::PropertyEnumCase::PROPERTY_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for property was not specified or out of range"); - break; + + int32_t value {}; + auto status = library_->GetFifoPropertyI32(session, fifo, property, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; } - - int32_t value{}; - auto status = library_->GetFifoPropertyI32(session, fifo, property, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::GetFifoPropertyI64(::grpc::ServerContext* context, const GetFifoPropertyI64Request* request, GetFifoPropertyI64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - NiFpga_FifoProperty property; - switch (request->property_enum_case()) { - case nifpga_grpc::GetFifoPropertyI64Request::PropertyEnumCase::kProperty: { - property = static_cast(request->property()); - break; - } - case nifpga_grpc::GetFifoPropertyI64Request::PropertyEnumCase::kPropertyRaw: { - property = static_cast(request->property_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::GetFifoPropertyI64(::grpc::ServerContext* context, const GetFifoPropertyI64Request* request, GetFifoPropertyI64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + NiFpga_FifoProperty property; + switch (request->property_enum_case()) { + case nifpga_grpc::GetFifoPropertyI64Request::PropertyEnumCase::kProperty: { + property = static_cast(request->property()); + break; + } + case nifpga_grpc::GetFifoPropertyI64Request::PropertyEnumCase::kPropertyRaw: { + property = static_cast(request->property_raw()); + break; + } + case nifpga_grpc::GetFifoPropertyI64Request::PropertyEnumCase::PROPERTY_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for property was not specified or out of range"); + break; + } } - case nifpga_grpc::GetFifoPropertyI64Request::PropertyEnumCase::PROPERTY_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for property was not specified or out of range"); - break; + + int64_t value {}; + auto status = library_->GetFifoPropertyI64(session, fifo, property, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; } - - int64_t value{}; - auto status = library_->GetFifoPropertyI64(session, fifo, property, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::GetFifoPropertyU32(::grpc::ServerContext* context, const GetFifoPropertyU32Request* request, GetFifoPropertyU32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - NiFpga_FifoProperty property; - switch (request->property_enum_case()) { - case nifpga_grpc::GetFifoPropertyU32Request::PropertyEnumCase::kProperty: { - property = static_cast(request->property()); - break; - } - case nifpga_grpc::GetFifoPropertyU32Request::PropertyEnumCase::kPropertyRaw: { - property = static_cast(request->property_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::GetFifoPropertyU32(::grpc::ServerContext* context, const GetFifoPropertyU32Request* request, GetFifoPropertyU32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + NiFpga_FifoProperty property; + switch (request->property_enum_case()) { + case nifpga_grpc::GetFifoPropertyU32Request::PropertyEnumCase::kProperty: { + property = static_cast(request->property()); + break; + } + case nifpga_grpc::GetFifoPropertyU32Request::PropertyEnumCase::kPropertyRaw: { + property = static_cast(request->property_raw()); + break; + } + case nifpga_grpc::GetFifoPropertyU32Request::PropertyEnumCase::PROPERTY_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for property was not specified or out of range"); + break; + } } - case nifpga_grpc::GetFifoPropertyU32Request::PropertyEnumCase::PROPERTY_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for property was not specified or out of range"); - break; + + uint32_t value {}; + auto status = library_->GetFifoPropertyU32(session, fifo, property, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; } - - uint32_t value{}; - auto status = library_->GetFifoPropertyU32(session, fifo, property, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::GetFifoPropertyU64(::grpc::ServerContext* context, const GetFifoPropertyU64Request* request, GetFifoPropertyU64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - NiFpga_FifoProperty property; - switch (request->property_enum_case()) { - case nifpga_grpc::GetFifoPropertyU64Request::PropertyEnumCase::kProperty: { - property = static_cast(request->property()); - break; - } - case nifpga_grpc::GetFifoPropertyU64Request::PropertyEnumCase::kPropertyRaw: { - property = static_cast(request->property_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::GetFifoPropertyU64(::grpc::ServerContext* context, const GetFifoPropertyU64Request* request, GetFifoPropertyU64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + NiFpga_FifoProperty property; + switch (request->property_enum_case()) { + case nifpga_grpc::GetFifoPropertyU64Request::PropertyEnumCase::kProperty: { + property = static_cast(request->property()); + break; + } + case nifpga_grpc::GetFifoPropertyU64Request::PropertyEnumCase::kPropertyRaw: { + property = static_cast(request->property_raw()); + break; + } + case nifpga_grpc::GetFifoPropertyU64Request::PropertyEnumCase::PROPERTY_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for property was not specified or out of range"); + break; + } } - case nifpga_grpc::GetFifoPropertyU64Request::PropertyEnumCase::PROPERTY_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for property was not specified or out of range"); - break; + + uint64_t value {}; + auto status = library_->GetFifoPropertyU64(session, fifo, property, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; } - - uint64_t value{}; - auto status = library_->GetFifoPropertyU64(session, fifo, property, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::GetFpgaViState(::grpc::ServerContext* context, const GetFpgaViStateRequest* request, GetFpgaViStateResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t state{}; - auto status = library_->GetFpgaViState(session, &state); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_state(static_cast(state)); - response->set_state_raw(state); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::GetFpgaViState(::grpc::ServerContext* context, const GetFpgaViStateRequest* request, GetFpgaViStateResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t state {}; + auto status = library_->GetFpgaViState(session, &state); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_state(static_cast(state)); + response->set_state_raw(state); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::Open(::grpc::ServerContext* context, const OpenRequest* request, OpenResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto bitfile_mbcs = convert_from_grpc(request->bitfile()); - char* bitfile = (char*)bitfile_mbcs.c_str(); - auto signature_mbcs = convert_from_grpc(request->signature()); - char* signature = (char*)signature_mbcs.c_str(); - auto resource_mbcs = convert_from_grpc(request->resource()); - char* resource = (char*)resource_mbcs.c_str(); - uint32_t attribute; - switch (request->attribute_enum_case()) { - case nifpga_grpc::OpenRequest::AttributeEnumCase::kAttributeMapped: { - auto attribute_imap_it = openattribute_input_map_.find(request->attribute_mapped()); - if (attribute_imap_it == openattribute_input_map_.end()) { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute_mapped was not specified or out of range."); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::Open(::grpc::ServerContext* context, const OpenRequest* request, OpenResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto bitfile_mbcs = convert_from_grpc(request->bitfile()); + char* bitfile = (char*)bitfile_mbcs.c_str(); + auto signature_mbcs = convert_from_grpc(request->signature()); + char* signature = (char*)signature_mbcs.c_str(); + auto resource_mbcs = convert_from_grpc(request->resource()); + char* resource = (char*)resource_mbcs.c_str(); + uint32_t attribute; + switch (request->attribute_enum_case()) { + case nifpga_grpc::OpenRequest::AttributeEnumCase::kAttributeMapped: { + auto attribute_imap_it = openattribute_input_map_.find(request->attribute_mapped()); + if (attribute_imap_it == openattribute_input_map_.end()) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute_mapped was not specified or out of range."); + } + attribute = static_cast(attribute_imap_it->second); + break; + } + case nifpga_grpc::OpenRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + break; + } + case nifpga_grpc::OpenRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; } - attribute = static_cast(attribute_imap_it->second); - break; - } - case nifpga_grpc::OpenRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - break; } - case nifpga_grpc::OpenRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + auto initialization_behavior = request->initialization_behavior(); + + bool new_session_initialized {}; + auto init_lambda = [&] () { + NiFpga_Session session; + auto status = library_->Open(bitfile, signature, resource, attribute, &session); + return std::make_tuple(status, session); + }; + std::string grpc_device_session_name = request->session_name(); + // Capture the library shared_ptr by value. Do not capture `this` or any references. + LibrarySharedPtr library = library_; + auto cleanup_lambda = [library] (NiFpga_Session id) { library->Close(id, 0); }; + int status = session_repository_->add_session(grpc_device_session_name, init_lambda, cleanup_lambda, initialization_behavior, &new_session_initialized); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, 0); } + response->set_status(status); + response->mutable_session()->set_name(grpc_device_session_name); + response->set_new_session_initialized(new_session_initialized); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - - auto initialization_behavior = request->initialization_behavior(); - - bool new_session_initialized{}; - auto init_lambda = [&]() { - NiFpga_Session session; - auto status = library_->Open(bitfile, signature, resource, attribute, &session); - return std::make_tuple(status, session); - }; - std::string grpc_device_session_name = request->session_name(); - // Capture the library shared_ptr by value. Do not capture `this` or any references. - LibrarySharedPtr library = library_; - auto cleanup_lambda = [library](NiFpga_Session id) { library->Close(id, 0); }; - int status = session_repository_->add_session(grpc_device_session_name, init_lambda, cleanup_lambda, initialization_behavior, &new_session_initialized); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, 0); - } - response->set_status(status); - response->mutable_session()->set_name(grpc_device_session_name); - response->set_new_session_initialized(new_session_initialized); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReadArrayBool(::grpc::ServerContext* context, const ReadArrayBoolRequest* request, ReadArrayBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + size_t size = request->size(); + std::vector array(size, NiFpga_Bool()); + auto status = library_->ReadArrayBool(session, indicator, array.data(), size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + convert_to_grpc(array, response->mutable_array()); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReadArrayBool(::grpc::ServerContext* context, const ReadArrayBoolRequest* request, ReadArrayBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - size_t size = request->size(); - std::vector array(size, NiFpga_Bool()); - auto status = library_->ReadArrayBool(session, indicator, array.data(), size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginReadArrayBool(::grpc::ServerContext* context, const BeginReadArrayBoolRequest* request, BeginReadArrayBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + size_t size = request->size(); + + auto data = std::make_unique(); + data->session = session; + data->indicator = indicator; + data->size = size; + data->library = std::shared_ptr(library_); + + data->response.mutable_array()->Reserve(request->size()); + data->response.mutable_array()->Resize(request->size(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayBool", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - convert_to_grpc(array, response->mutable_array()); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReadArrayDbl(::grpc::ServerContext* context, const ReadArrayDblRequest* request, ReadArrayDblResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + size_t size = request->size(); + response->mutable_array()->Resize(size, 0); + double* array = response->mutable_array()->mutable_data(); + auto status = library_->ReadArrayDbl(session, indicator, array, size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginReadArrayBool(::grpc::ServerContext* context, const BeginReadArrayBoolRequest* request, BeginReadArrayBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - size_t size = request->size(); - - auto data = std::make_unique(); - data->session = session; - data->indicator = indicator; - data->size = size; - data->library = std::shared_ptr(library_); - - data->response.mutable_array()->Reserve(request->size()); - data->response.mutable_array()->Resize(request->size(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayBool", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginReadArrayDbl(::grpc::ServerContext* context, const BeginReadArrayDblRequest* request, BeginReadArrayDblResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + size_t size = request->size(); + + auto data = std::make_unique(); + data->session = session; + data->indicator = indicator; + data->size = size; + data->library = std::shared_ptr(library_); + + data->response.mutable_array()->Reserve(request->size()); + data->response.mutable_array()->Resize(request->size(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayDbl", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReadArrayI16(::grpc::ServerContext* context, const ReadArrayI16Request* request, ReadArrayI16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + size_t size = request->size(); + std::vector array(size); + auto status = library_->ReadArrayI16(session, indicator, array.data(), size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->mutable_array()->Clear(); + response->mutable_array()->Reserve(size); + std::transform( + array.begin(), + array.begin() + size, + google::protobuf::RepeatedFieldBackInserter(response->mutable_array()), + [&](auto x) { + return x; + }); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReadArrayDbl(::grpc::ServerContext* context, const ReadArrayDblRequest* request, ReadArrayDblResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - size_t size = request->size(); - response->mutable_array()->Resize(size, 0); - double* array = response->mutable_array()->mutable_data(); - auto status = library_->ReadArrayDbl(session, indicator, array, size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginReadArrayI16(::grpc::ServerContext* context, const BeginReadArrayI16Request* request, BeginReadArrayI16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + size_t size = request->size(); + + auto data = std::make_unique(); + data->session = session; + data->indicator = indicator; + data->size = size; + data->library = std::shared_ptr(library_); + + data->response.mutable_array()->Reserve(request->size()); + data->response.mutable_array()->Resize(request->size(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayI16", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReadArrayI32(::grpc::ServerContext* context, const ReadArrayI32Request* request, ReadArrayI32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + size_t size = request->size(); + response->mutable_array()->Resize(size, 0); + int32_t* array = response->mutable_array()->mutable_data(); + auto status = library_->ReadArrayI32(session, indicator, array, size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginReadArrayDbl(::grpc::ServerContext* context, const BeginReadArrayDblRequest* request, BeginReadArrayDblResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - size_t size = request->size(); - - auto data = std::make_unique(); - data->session = session; - data->indicator = indicator; - data->size = size; - data->library = std::shared_ptr(library_); - - data->response.mutable_array()->Reserve(request->size()); - data->response.mutable_array()->Resize(request->size(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayDbl", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginReadArrayI32(::grpc::ServerContext* context, const BeginReadArrayI32Request* request, BeginReadArrayI32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + size_t size = request->size(); + + auto data = std::make_unique(); + data->session = session; + data->indicator = indicator; + data->size = size; + data->library = std::shared_ptr(library_); + + data->response.mutable_array()->Reserve(request->size()); + data->response.mutable_array()->Resize(request->size(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayI32", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReadArrayI64(::grpc::ServerContext* context, const ReadArrayI64Request* request, ReadArrayI64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + size_t size = request->size(); + response->mutable_array()->Resize(size, 0); + int64_t* array = response->mutable_array()->mutable_data(); + auto status = library_->ReadArrayI64(session, indicator, array, size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReadArrayI16(::grpc::ServerContext* context, const ReadArrayI16Request* request, ReadArrayI16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - size_t size = request->size(); - std::vector array(size); - auto status = library_->ReadArrayI16(session, indicator, array.data(), size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginReadArrayI64(::grpc::ServerContext* context, const BeginReadArrayI64Request* request, BeginReadArrayI64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + size_t size = request->size(); + + auto data = std::make_unique(); + data->session = session; + data->indicator = indicator; + data->size = size; + data->library = std::shared_ptr(library_); + + data->response.mutable_array()->Reserve(request->size()); + data->response.mutable_array()->Resize(request->size(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayI64", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - response->mutable_array()->Clear(); - response->mutable_array()->Reserve(size); - std::transform( - array.begin(), - array.begin() + size, - google::protobuf::RepeatedFieldBackInserter(response->mutable_array()), - [&](auto x) { - return x; - }); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReadArrayI8(::grpc::ServerContext* context, const ReadArrayI8Request* request, ReadArrayI8Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + size_t size = request->size(); + std::vector array(size); + auto status = library_->ReadArrayI8(session, indicator, array.data(), size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->mutable_array()->Clear(); + response->mutable_array()->Reserve(size); + std::transform( + array.begin(), + array.begin() + size, + google::protobuf::RepeatedFieldBackInserter(response->mutable_array()), + [&](auto x) { + return x; + }); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginReadArrayI16(::grpc::ServerContext* context, const BeginReadArrayI16Request* request, BeginReadArrayI16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - size_t size = request->size(); - - auto data = std::make_unique(); - data->session = session; - data->indicator = indicator; - data->size = size; - data->library = std::shared_ptr(library_); - - data->response.mutable_array()->Reserve(request->size()); - data->response.mutable_array()->Resize(request->size(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayI16", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReadArrayI32(::grpc::ServerContext* context, const ReadArrayI32Request* request, ReadArrayI32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - size_t size = request->size(); - response->mutable_array()->Resize(size, 0); - int32_t* array = response->mutable_array()->mutable_data(); - auto status = library_->ReadArrayI32(session, indicator, array, size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginReadArrayI8(::grpc::ServerContext* context, const BeginReadArrayI8Request* request, BeginReadArrayI8Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginReadArrayI32(::grpc::ServerContext* context, const BeginReadArrayI32Request* request, BeginReadArrayI32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - size_t size = request->size(); - - auto data = std::make_unique(); - data->session = session; - data->indicator = indicator; - data->size = size; - data->library = std::shared_ptr(library_); - - data->response.mutable_array()->Reserve(request->size()); - data->response.mutable_array()->Resize(request->size(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayI32", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReadArrayI64(::grpc::ServerContext* context, const ReadArrayI64Request* request, ReadArrayI64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - size_t size = request->size(); - response->mutable_array()->Resize(size, 0); - int64_t* array = response->mutable_array()->mutable_data(); - auto status = library_->ReadArrayI64(session, indicator, array, size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + size_t size = request->size(); + + auto data = std::make_unique(); + data->session = session; + data->indicator = indicator; + data->size = size; + data->library = std::shared_ptr(library_); + + data->response.mutable_array()->Reserve(request->size()); + data->response.mutable_array()->Resize(request->size(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayI8", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginReadArrayI64(::grpc::ServerContext* context, const BeginReadArrayI64Request* request, BeginReadArrayI64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - size_t size = request->size(); - - auto data = std::make_unique(); - data->session = session; - data->indicator = indicator; - data->size = size; - data->library = std::shared_ptr(library_); - - data->response.mutable_array()->Reserve(request->size()); - data->response.mutable_array()->Resize(request->size(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayI64", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReadArrayI8(::grpc::ServerContext* context, const ReadArrayI8Request* request, ReadArrayI8Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - size_t size = request->size(); - std::vector array(size); - auto status = library_->ReadArrayI8(session, indicator, array.data(), size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - response->mutable_array()->Clear(); - response->mutable_array()->Reserve(size); - std::transform( - array.begin(), - array.begin() + size, - google::protobuf::RepeatedFieldBackInserter(response->mutable_array()), - [&](auto x) { - return x; - }); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginReadArrayI8(::grpc::ServerContext* context, const BeginReadArrayI8Request* request, BeginReadArrayI8Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - size_t size = request->size(); - - auto data = std::make_unique(); - data->session = session; - data->indicator = indicator; - data->size = size; - data->library = std::shared_ptr(library_); - - data->response.mutable_array()->Reserve(request->size()); - data->response.mutable_array()->Resize(request->size(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayI8", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReadArraySgl(::grpc::ServerContext* context, const ReadArraySglRequest* request, ReadArraySglResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - size_t size = request->size(); - response->mutable_array()->Resize(size, 0); - float* array = response->mutable_array()->mutable_data(); - auto status = library_->ReadArraySgl(session, indicator, array, size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReadArraySgl(::grpc::ServerContext* context, const ReadArraySglRequest* request, ReadArraySglResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginReadArraySgl(::grpc::ServerContext* context, const BeginReadArraySglRequest* request, BeginReadArraySglResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - size_t size = request->size(); - - auto data = std::make_unique(); - data->session = session; - data->indicator = indicator; - data->size = size; - data->library = std::shared_ptr(library_); - - data->response.mutable_array()->Reserve(request->size()); - data->response.mutable_array()->Resize(request->size(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArraySgl", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReadArrayU16(::grpc::ServerContext* context, const ReadArrayU16Request* request, ReadArrayU16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - size_t size = request->size(); - std::vector array(size); - auto status = library_->ReadArrayU16(session, indicator, array.data(), size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + size_t size = request->size(); + response->mutable_array()->Resize(size, 0); + float* array = response->mutable_array()->mutable_data(); + auto status = library_->ReadArraySgl(session, indicator, array, size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; } - response->set_status(status); - response->mutable_array()->Clear(); - response->mutable_array()->Reserve(size); - std::transform( - array.begin(), - array.begin() + size, - google::protobuf::RepeatedFieldBackInserter(response->mutable_array()), - [&](auto x) { - return x; - }); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginReadArrayU16(::grpc::ServerContext* context, const BeginReadArrayU16Request* request, BeginReadArrayU16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - size_t size = request->size(); - - auto data = std::make_unique(); - data->session = session; - data->indicator = indicator; - data->size = size; - data->library = std::shared_ptr(library_); - - data->response.mutable_array()->Reserve(request->size()); - data->response.mutable_array()->Resize(request->size(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayU16", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReadArrayU32(::grpc::ServerContext* context, const ReadArrayU32Request* request, ReadArrayU32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - size_t size = request->size(); - response->mutable_array()->Resize(size, 0); - uint32_t* array = response->mutable_array()->mutable_data(); - auto status = library_->ReadArrayU32(session, indicator, array, size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginReadArrayU32(::grpc::ServerContext* context, const BeginReadArrayU32Request* request, BeginReadArrayU32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - size_t size = request->size(); - - auto data = std::make_unique(); - data->session = session; - data->indicator = indicator; - data->size = size; - data->library = std::shared_ptr(library_); - - data->response.mutable_array()->Reserve(request->size()); - data->response.mutable_array()->Resize(request->size(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayU32", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReadArrayU64(::grpc::ServerContext* context, const ReadArrayU64Request* request, ReadArrayU64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - size_t size = request->size(); - response->mutable_array()->Resize(size, 0); - uint64_t* array = response->mutable_array()->mutable_data(); - auto status = library_->ReadArrayU64(session, indicator, array, size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginReadArraySgl(::grpc::ServerContext* context, const BeginReadArraySglRequest* request, BeginReadArraySglResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginReadArrayU64(::grpc::ServerContext* context, const BeginReadArrayU64Request* request, BeginReadArrayU64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - size_t size = request->size(); - - auto data = std::make_unique(); - data->session = session; - data->indicator = indicator; - data->size = size; - data->library = std::shared_ptr(library_); - - data->response.mutable_array()->Reserve(request->size()); - data->response.mutable_array()->Resize(request->size(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayU64", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReadArrayU8(::grpc::ServerContext* context, const ReadArrayU8Request* request, ReadArrayU8Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - size_t size = request->size(); - std::vector array(size); - auto status = library_->ReadArrayU8(session, indicator, array.data(), size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + size_t size = request->size(); + + auto data = std::make_unique(); + data->session = session; + data->indicator = indicator; + data->size = size; + data->library = std::shared_ptr(library_); + + data->response.mutable_array()->Reserve(request->size()); + data->response.mutable_array()->Resize(request->size(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArraySgl", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - response->mutable_array()->Clear(); - response->mutable_array()->Reserve(size); - std::transform( - array.begin(), - array.begin() + size, - google::protobuf::RepeatedFieldBackInserter(response->mutable_array()), - [&](auto x) { - return x; - }); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginReadArrayU8(::grpc::ServerContext* context, const BeginReadArrayU8Request* request, BeginReadArrayU8Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - size_t size = request->size(); - - auto data = std::make_unique(); - data->session = session; - data->indicator = indicator; - data->size = size; - data->library = std::shared_ptr(library_); - - data->response.mutable_array()->Reserve(request->size()); - data->response.mutable_array()->Resize(request->size(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayU8", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReadBool(::grpc::ServerContext* context, const ReadBoolRequest* request, ReadBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - NiFpga_Bool value{}; - auto status = library_->ReadBool(session, indicator, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginReadBool(::grpc::ServerContext* context, const BeginReadBoolRequest* request, BeginReadBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - - auto data = std::make_unique(); - data->session = session; - data->indicator = indicator; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadBool", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReadDbl(::grpc::ServerContext* context, const ReadDblRequest* request, ReadDblResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - double value{}; - auto status = library_->ReadDbl(session, indicator, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReadArrayU16(::grpc::ServerContext* context, const ReadArrayU16Request* request, ReadArrayU16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + size_t size = request->size(); + std::vector array(size); + auto status = library_->ReadArrayU16(session, indicator, array.data(), size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->mutable_array()->Clear(); + response->mutable_array()->Reserve(size); + std::transform( + array.begin(), + array.begin() + size, + google::protobuf::RepeatedFieldBackInserter(response->mutable_array()), + [&](auto x) { + return x; + }); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginReadDbl(::grpc::ServerContext* context, const BeginReadDblRequest* request, BeginReadDblResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - - auto data = std::make_unique(); - data->session = session; - data->indicator = indicator; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadDbl", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginReadArrayU16(::grpc::ServerContext* context, const BeginReadArrayU16Request* request, BeginReadArrayU16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + size_t size = request->size(); + + auto data = std::make_unique(); + data->session = session; + data->indicator = indicator; + data->size = size; + data->library = std::shared_ptr(library_); + + data->response.mutable_array()->Reserve(request->size()); + data->response.mutable_array()->Resize(request->size(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayU16", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReadFifoBool(::grpc::ServerContext* context, const ReadFifoBoolRequest* request, ReadFifoBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - size_t number_of_elements = request->number_of_elements(); - uint32_t timeout = request->timeout(); - std::vector data(number_of_elements, NiFpga_Bool()); - size_t elements_remaining{}; - auto status = library_->ReadFifoBool(session, fifo, data.data(), number_of_elements, timeout, &elements_remaining); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - convert_to_grpc(data, response->mutable_data()); - response->set_elements_remaining(elements_remaining); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReadArrayU32(::grpc::ServerContext* context, const ReadArrayU32Request* request, ReadArrayU32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + size_t size = request->size(); + response->mutable_array()->Resize(size, 0); + uint32_t* array = response->mutable_array()->mutable_data(); + auto status = library_->ReadArrayU32(session, indicator, array, size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReadFifoDbl(::grpc::ServerContext* context, const ReadFifoDblRequest* request, ReadFifoDblResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - size_t number_of_elements = request->number_of_elements(); - uint32_t timeout = request->timeout(); - response->mutable_data()->Resize(number_of_elements, 0); - double* data = response->mutable_data()->mutable_data(); - size_t elements_remaining{}; - auto status = library_->ReadFifoDbl(session, fifo, data, number_of_elements, timeout, &elements_remaining); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_elements_remaining(elements_remaining); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginReadArrayU32(::grpc::ServerContext* context, const BeginReadArrayU32Request* request, BeginReadArrayU32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + size_t size = request->size(); + + auto data = std::make_unique(); + data->session = session; + data->indicator = indicator; + data->size = size; + data->library = std::shared_ptr(library_); + + data->response.mutable_array()->Reserve(request->size()); + data->response.mutable_array()->Resize(request->size(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayU32", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReadFifoI16(::grpc::ServerContext* context, const ReadFifoI16Request* request, ReadFifoI16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - size_t number_of_elements = request->number_of_elements(); - uint32_t timeout = request->timeout(); - std::vector data(number_of_elements); - size_t elements_remaining{}; - auto status = library_->ReadFifoI16(session, fifo, data.data(), number_of_elements, timeout, &elements_remaining); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->mutable_data()->Clear(); - response->mutable_data()->Reserve(number_of_elements); - std::transform( - data.begin(), - data.begin() + number_of_elements, - google::protobuf::RepeatedFieldBackInserter(response->mutable_data()), - [&](auto x) { - return x; - }); - response->set_elements_remaining(elements_remaining); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReadArrayU64(::grpc::ServerContext* context, const ReadArrayU64Request* request, ReadArrayU64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + size_t size = request->size(); + response->mutable_array()->Resize(size, 0); + uint64_t* array = response->mutable_array()->mutable_data(); + auto status = library_->ReadArrayU64(session, indicator, array, size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReadFifoI32(::grpc::ServerContext* context, const ReadFifoI32Request* request, ReadFifoI32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - size_t number_of_elements = request->number_of_elements(); - uint32_t timeout = request->timeout(); - response->mutable_data()->Resize(number_of_elements, 0); - int32_t* data = response->mutable_data()->mutable_data(); - size_t elements_remaining{}; - auto status = library_->ReadFifoI32(session, fifo, data, number_of_elements, timeout, &elements_remaining); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_elements_remaining(elements_remaining); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginReadArrayU64(::grpc::ServerContext* context, const BeginReadArrayU64Request* request, BeginReadArrayU64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + size_t size = request->size(); + + auto data = std::make_unique(); + data->session = session; + data->indicator = indicator; + data->size = size; + data->library = std::shared_ptr(library_); + + data->response.mutable_array()->Reserve(request->size()); + data->response.mutable_array()->Resize(request->size(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayU64", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReadFifoI64(::grpc::ServerContext* context, const ReadFifoI64Request* request, ReadFifoI64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - size_t number_of_elements = request->number_of_elements(); - uint32_t timeout = request->timeout(); - response->mutable_data()->Resize(number_of_elements, 0); - int64_t* data = response->mutable_data()->mutable_data(); - size_t elements_remaining{}; - auto status = library_->ReadFifoI64(session, fifo, data, number_of_elements, timeout, &elements_remaining); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_elements_remaining(elements_remaining); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReadArrayU8(::grpc::ServerContext* context, const ReadArrayU8Request* request, ReadArrayU8Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + size_t size = request->size(); + std::vector array(size); + auto status = library_->ReadArrayU8(session, indicator, array.data(), size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->mutable_array()->Clear(); + response->mutable_array()->Reserve(size); + std::transform( + array.begin(), + array.begin() + size, + google::protobuf::RepeatedFieldBackInserter(response->mutable_array()), + [&](auto x) { + return x; + }); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReadFifoI8(::grpc::ServerContext* context, const ReadFifoI8Request* request, ReadFifoI8Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - size_t number_of_elements = request->number_of_elements(); - uint32_t timeout = request->timeout(); - std::vector data(number_of_elements); - size_t elements_remaining{}; - auto status = library_->ReadFifoI8(session, fifo, data.data(), number_of_elements, timeout, &elements_remaining); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->mutable_data()->Clear(); - response->mutable_data()->Reserve(number_of_elements); - std::transform( - data.begin(), - data.begin() + number_of_elements, - google::protobuf::RepeatedFieldBackInserter(response->mutable_data()), - [&](auto x) { - return x; - }); - response->set_elements_remaining(elements_remaining); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginReadArrayU8(::grpc::ServerContext* context, const BeginReadArrayU8Request* request, BeginReadArrayU8Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + size_t size = request->size(); + + auto data = std::make_unique(); + data->session = session; + data->indicator = indicator; + data->size = size; + data->library = std::shared_ptr(library_); + + data->response.mutable_array()->Reserve(request->size()); + data->response.mutable_array()->Resize(request->size(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadArrayU8", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReadFifoSgl(::grpc::ServerContext* context, const ReadFifoSglRequest* request, ReadFifoSglResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - size_t number_of_elements = request->number_of_elements(); - uint32_t timeout = request->timeout(); - response->mutable_data()->Resize(number_of_elements, 0); - float* data = response->mutable_data()->mutable_data(); - size_t elements_remaining{}; - auto status = library_->ReadFifoSgl(session, fifo, data, number_of_elements, timeout, &elements_remaining); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_elements_remaining(elements_remaining); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReadBool(::grpc::ServerContext* context, const ReadBoolRequest* request, ReadBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + NiFpga_Bool value {}; + auto status = library_->ReadBool(session, indicator, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReadFifoU16(::grpc::ServerContext* context, const ReadFifoU16Request* request, ReadFifoU16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - size_t number_of_elements = request->number_of_elements(); - uint32_t timeout = request->timeout(); - std::vector data(number_of_elements); - size_t elements_remaining{}; - auto status = library_->ReadFifoU16(session, fifo, data.data(), number_of_elements, timeout, &elements_remaining); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->mutable_data()->Clear(); - response->mutable_data()->Reserve(number_of_elements); - std::transform( - data.begin(), - data.begin() + number_of_elements, - google::protobuf::RepeatedFieldBackInserter(response->mutable_data()), - [&](auto x) { - return x; - }); - response->set_elements_remaining(elements_remaining); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginReadBool(::grpc::ServerContext* context, const BeginReadBoolRequest* request, BeginReadBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + + auto data = std::make_unique(); + data->session = session; + data->indicator = indicator; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadBool", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReadFifoU32(::grpc::ServerContext* context, const ReadFifoU32Request* request, ReadFifoU32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - size_t number_of_elements = request->number_of_elements(); - uint32_t timeout = request->timeout(); - response->mutable_data()->Resize(number_of_elements, 0); - uint32_t* data = response->mutable_data()->mutable_data(); - size_t elements_remaining{}; - auto status = library_->ReadFifoU32(session, fifo, data, number_of_elements, timeout, &elements_remaining); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_elements_remaining(elements_remaining); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReadDbl(::grpc::ServerContext* context, const ReadDblRequest* request, ReadDblResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + double value {}; + auto status = library_->ReadDbl(session, indicator, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReadFifoU64(::grpc::ServerContext* context, const ReadFifoU64Request* request, ReadFifoU64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - size_t number_of_elements = request->number_of_elements(); - uint32_t timeout = request->timeout(); - response->mutable_data()->Resize(number_of_elements, 0); - uint64_t* data = response->mutable_data()->mutable_data(); - size_t elements_remaining{}; - auto status = library_->ReadFifoU64(session, fifo, data, number_of_elements, timeout, &elements_remaining); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_elements_remaining(elements_remaining); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginReadDbl(::grpc::ServerContext* context, const BeginReadDblRequest* request, BeginReadDblResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + + auto data = std::make_unique(); + data->session = session; + data->indicator = indicator; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadDbl", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReadFifoU8(::grpc::ServerContext* context, const ReadFifoU8Request* request, ReadFifoU8Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - size_t number_of_elements = request->number_of_elements(); - uint32_t timeout = request->timeout(); - std::vector data(number_of_elements); - size_t elements_remaining{}; - auto status = library_->ReadFifoU8(session, fifo, data.data(), number_of_elements, timeout, &elements_remaining); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->mutable_data()->Clear(); - response->mutable_data()->Reserve(number_of_elements); - std::transform( - data.begin(), - data.begin() + number_of_elements, - google::protobuf::RepeatedFieldBackInserter(response->mutable_data()), - [&](auto x) { - return x; - }); - response->set_elements_remaining(elements_remaining); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReadFifoBool(::grpc::ServerContext* context, const ReadFifoBoolRequest* request, ReadFifoBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + size_t number_of_elements = request->number_of_elements(); + uint32_t timeout = request->timeout(); + std::vector data(number_of_elements, NiFpga_Bool()); + size_t elements_remaining {}; + auto status = library_->ReadFifoBool(session, fifo, data.data(), number_of_elements, timeout, &elements_remaining); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + convert_to_grpc(data, response->mutable_data()); + response->set_elements_remaining(elements_remaining); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReadI16(::grpc::ServerContext* context, const ReadI16Request* request, ReadI16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - int16_t value{}; - auto status = library_->ReadI16(session, indicator, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReadFifoDbl(::grpc::ServerContext* context, const ReadFifoDblRequest* request, ReadFifoDblResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + size_t number_of_elements = request->number_of_elements(); + uint32_t timeout = request->timeout(); + response->mutable_data()->Resize(number_of_elements, 0); + double* data = response->mutable_data()->mutable_data(); + size_t elements_remaining {}; + auto status = library_->ReadFifoDbl(session, fifo, data, number_of_elements, timeout, &elements_remaining); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_elements_remaining(elements_remaining); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginReadI16(::grpc::ServerContext* context, const BeginReadI16Request* request, BeginReadI16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - - auto data = std::make_unique(); - data->session = session; - data->indicator = indicator; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadI16", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReadFifoI16(::grpc::ServerContext* context, const ReadFifoI16Request* request, ReadFifoI16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + size_t number_of_elements = request->number_of_elements(); + uint32_t timeout = request->timeout(); + std::vector data(number_of_elements); + size_t elements_remaining {}; + auto status = library_->ReadFifoI16(session, fifo, data.data(), number_of_elements, timeout, &elements_remaining); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->mutable_data()->Clear(); + response->mutable_data()->Reserve(number_of_elements); + std::transform( + data.begin(), + data.begin() + number_of_elements, + google::protobuf::RepeatedFieldBackInserter(response->mutable_data()), + [&](auto x) { + return x; + }); + response->set_elements_remaining(elements_remaining); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReadI32(::grpc::ServerContext* context, const ReadI32Request* request, ReadI32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - int32_t value{}; - auto status = library_->ReadI32(session, indicator, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReadFifoI32(::grpc::ServerContext* context, const ReadFifoI32Request* request, ReadFifoI32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + size_t number_of_elements = request->number_of_elements(); + uint32_t timeout = request->timeout(); + response->mutable_data()->Resize(number_of_elements, 0); + int32_t* data = response->mutable_data()->mutable_data(); + size_t elements_remaining {}; + auto status = library_->ReadFifoI32(session, fifo, data, number_of_elements, timeout, &elements_remaining); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_elements_remaining(elements_remaining); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginReadI32(::grpc::ServerContext* context, const BeginReadI32Request* request, BeginReadI32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - - auto data = std::make_unique(); - data->session = session; - data->indicator = indicator; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadI32", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReadFifoI64(::grpc::ServerContext* context, const ReadFifoI64Request* request, ReadFifoI64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + size_t number_of_elements = request->number_of_elements(); + uint32_t timeout = request->timeout(); + response->mutable_data()->Resize(number_of_elements, 0); + int64_t* data = response->mutable_data()->mutable_data(); + size_t elements_remaining {}; + auto status = library_->ReadFifoI64(session, fifo, data, number_of_elements, timeout, &elements_remaining); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_elements_remaining(elements_remaining); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReadI64(::grpc::ServerContext* context, const ReadI64Request* request, ReadI64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - int64_t value{}; - auto status = library_->ReadI64(session, indicator, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReadFifoI8(::grpc::ServerContext* context, const ReadFifoI8Request* request, ReadFifoI8Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + size_t number_of_elements = request->number_of_elements(); + uint32_t timeout = request->timeout(); + std::vector data(number_of_elements); + size_t elements_remaining {}; + auto status = library_->ReadFifoI8(session, fifo, data.data(), number_of_elements, timeout, &elements_remaining); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->mutable_data()->Clear(); + response->mutable_data()->Reserve(number_of_elements); + std::transform( + data.begin(), + data.begin() + number_of_elements, + google::protobuf::RepeatedFieldBackInserter(response->mutable_data()), + [&](auto x) { + return x; + }); + response->set_elements_remaining(elements_remaining); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginReadI64(::grpc::ServerContext* context, const BeginReadI64Request* request, BeginReadI64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - - auto data = std::make_unique(); - data->session = session; - data->indicator = indicator; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadI64", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReadFifoSgl(::grpc::ServerContext* context, const ReadFifoSglRequest* request, ReadFifoSglResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + size_t number_of_elements = request->number_of_elements(); + uint32_t timeout = request->timeout(); + response->mutable_data()->Resize(number_of_elements, 0); + float* data = response->mutable_data()->mutable_data(); + size_t elements_remaining {}; + auto status = library_->ReadFifoSgl(session, fifo, data, number_of_elements, timeout, &elements_remaining); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_elements_remaining(elements_remaining); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReadI8(::grpc::ServerContext* context, const ReadI8Request* request, ReadI8Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - int8_t value{}; - auto status = library_->ReadI8(session, indicator, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReadFifoU16(::grpc::ServerContext* context, const ReadFifoU16Request* request, ReadFifoU16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + size_t number_of_elements = request->number_of_elements(); + uint32_t timeout = request->timeout(); + std::vector data(number_of_elements); + size_t elements_remaining {}; + auto status = library_->ReadFifoU16(session, fifo, data.data(), number_of_elements, timeout, &elements_remaining); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->mutable_data()->Clear(); + response->mutable_data()->Reserve(number_of_elements); + std::transform( + data.begin(), + data.begin() + number_of_elements, + google::protobuf::RepeatedFieldBackInserter(response->mutable_data()), + [&](auto x) { + return x; + }); + response->set_elements_remaining(elements_remaining); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginReadI8(::grpc::ServerContext* context, const BeginReadI8Request* request, BeginReadI8Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - - auto data = std::make_unique(); - data->session = session; - data->indicator = indicator; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadI8", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReadFifoU32(::grpc::ServerContext* context, const ReadFifoU32Request* request, ReadFifoU32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + size_t number_of_elements = request->number_of_elements(); + uint32_t timeout = request->timeout(); + response->mutable_data()->Resize(number_of_elements, 0); + uint32_t* data = response->mutable_data()->mutable_data(); + size_t elements_remaining {}; + auto status = library_->ReadFifoU32(session, fifo, data, number_of_elements, timeout, &elements_remaining); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_elements_remaining(elements_remaining); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReadSgl(::grpc::ServerContext* context, const ReadSglRequest* request, ReadSglResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - float value{}; - auto status = library_->ReadSgl(session, indicator, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReadFifoU64(::grpc::ServerContext* context, const ReadFifoU64Request* request, ReadFifoU64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + size_t number_of_elements = request->number_of_elements(); + uint32_t timeout = request->timeout(); + response->mutable_data()->Resize(number_of_elements, 0); + uint64_t* data = response->mutable_data()->mutable_data(); + size_t elements_remaining {}; + auto status = library_->ReadFifoU64(session, fifo, data, number_of_elements, timeout, &elements_remaining); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_elements_remaining(elements_remaining); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginReadSgl(::grpc::ServerContext* context, const BeginReadSglRequest* request, BeginReadSglResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - - auto data = std::make_unique(); - data->session = session; - data->indicator = indicator; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadSgl", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReadFifoU8(::grpc::ServerContext* context, const ReadFifoU8Request* request, ReadFifoU8Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + size_t number_of_elements = request->number_of_elements(); + uint32_t timeout = request->timeout(); + std::vector data(number_of_elements); + size_t elements_remaining {}; + auto status = library_->ReadFifoU8(session, fifo, data.data(), number_of_elements, timeout, &elements_remaining); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->mutable_data()->Clear(); + response->mutable_data()->Reserve(number_of_elements); + std::transform( + data.begin(), + data.begin() + number_of_elements, + google::protobuf::RepeatedFieldBackInserter(response->mutable_data()), + [&](auto x) { + return x; + }); + response->set_elements_remaining(elements_remaining); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReadU16(::grpc::ServerContext* context, const ReadU16Request* request, ReadU16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - uint16_t value{}; - auto status = library_->ReadU16(session, indicator, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReadI16(::grpc::ServerContext* context, const ReadI16Request* request, ReadI16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + int16_t value {}; + auto status = library_->ReadI16(session, indicator, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginReadU16(::grpc::ServerContext* context, const BeginReadU16Request* request, BeginReadU16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - - auto data = std::make_unique(); - data->session = session; - data->indicator = indicator; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadU16", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginReadI16(::grpc::ServerContext* context, const BeginReadI16Request* request, BeginReadI16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + + auto data = std::make_unique(); + data->session = session; + data->indicator = indicator; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadI16", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReadU32(::grpc::ServerContext* context, const ReadU32Request* request, ReadU32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - uint32_t value{}; - auto status = library_->ReadU32(session, indicator, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReadI32(::grpc::ServerContext* context, const ReadI32Request* request, ReadI32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + int32_t value {}; + auto status = library_->ReadI32(session, indicator, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginReadI32(::grpc::ServerContext* context, const BeginReadI32Request* request, BeginReadI32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + + auto data = std::make_unique(); + data->session = session; + data->indicator = indicator; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadI32", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginReadU32(::grpc::ServerContext* context, const BeginReadU32Request* request, BeginReadU32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - - auto data = std::make_unique(); - data->session = session; - data->indicator = indicator; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadU32", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReadI64(::grpc::ServerContext* context, const ReadI64Request* request, ReadI64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + int64_t value {}; + auto status = library_->ReadI64(session, indicator, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginReadI64(::grpc::ServerContext* context, const BeginReadI64Request* request, BeginReadI64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + + auto data = std::make_unique(); + data->session = session; + data->indicator = indicator; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadI64", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReadU64(::grpc::ServerContext* context, const ReadU64Request* request, ReadU64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - uint64_t value{}; - auto status = library_->ReadU64(session, indicator, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReadI8(::grpc::ServerContext* context, const ReadI8Request* request, ReadI8Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + int8_t value {}; + auto status = library_->ReadI8(session, indicator, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginReadI8(::grpc::ServerContext* context, const BeginReadI8Request* request, BeginReadI8Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + + auto data = std::make_unique(); + data->session = session; + data->indicator = indicator; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadI8", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginReadU64(::grpc::ServerContext* context, const BeginReadU64Request* request, BeginReadU64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - - auto data = std::make_unique(); - data->session = session; - data->indicator = indicator; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadU64", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReadSgl(::grpc::ServerContext* context, const ReadSglRequest* request, ReadSglResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + float value {}; + auto status = library_->ReadSgl(session, indicator, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginReadSgl(::grpc::ServerContext* context, const BeginReadSglRequest* request, BeginReadSglResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + + auto data = std::make_unique(); + data->session = session; + data->indicator = indicator; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadSgl", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReadU8(::grpc::ServerContext* context, const ReadU8Request* request, ReadU8Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - uint8_t value{}; - auto status = library_->ReadU8(session, indicator, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReadU16(::grpc::ServerContext* context, const ReadU16Request* request, ReadU16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + uint16_t value {}; + auto status = library_->ReadU16(session, indicator, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginReadU16(::grpc::ServerContext* context, const BeginReadU16Request* request, BeginReadU16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + + auto data = std::make_unique(); + data->session = session; + data->indicator = indicator; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadU16", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginReadU8(::grpc::ServerContext* context, const BeginReadU8Request* request, BeginReadU8Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t indicator = request->indicator(); - - auto data = std::make_unique(); - data->session = session; - data->indicator = indicator; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadU8", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReadU32(::grpc::ServerContext* context, const ReadU32Request* request, ReadU32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + uint32_t value {}; + auto status = library_->ReadU32(session, indicator, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginReadU32(::grpc::ServerContext* context, const BeginReadU32Request* request, BeginReadU32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + + auto data = std::make_unique(); + data->session = session; + data->indicator = indicator; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadU32", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::ReleaseFifoElements(::grpc::ServerContext* context, const ReleaseFifoElementsRequest* request, ReleaseFifoElementsResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - size_t elements = request->elements(); - auto status = library_->ReleaseFifoElements(session, fifo, elements); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReadU64(::grpc::ServerContext* context, const ReadU64Request* request, ReadU64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + uint64_t value {}; + auto status = library_->ReadU64(session, indicator, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginReadU64(::grpc::ServerContext* context, const BeginReadU64Request* request, BeginReadU64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + + auto data = std::make_unique(); + data->session = session; + data->indicator = indicator; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadU64", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::Reset(::grpc::ServerContext* context, const ResetRequest* request, ResetResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReadU8(::grpc::ServerContext* context, const ReadU8Request* request, ReadU8Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + uint8_t value {}; + auto status = library_->ReadU8(session, indicator, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - auto status = library_->Reset(session); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginReadU8(::grpc::ServerContext* context, const BeginReadU8Request* request, BeginReadU8Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t indicator = request->indicator(); + + auto data = std::make_unique(); + data->session = session; + data->indicator = indicator; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadU8", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::ReleaseFifoElements(::grpc::ServerContext* context, const ReleaseFifoElementsRequest* request, ReleaseFifoElementsResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + size_t elements = request->elements(); + auto status = library_->ReleaseFifoElements(session, fifo, elements); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::Run(::grpc::ServerContext* context, const RunRequest* request, RunResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t attribute; - switch (request->attribute_enum_case()) { - case nifpga_grpc::RunRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::Reset(::grpc::ServerContext* context, const ResetRequest* request, ResetResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + auto status = library_->Reset(session); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); } - case nifpga_grpc::RunRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - break; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::Run(::grpc::ServerContext* context, const RunRequest* request, RunResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t attribute; + switch (request->attribute_enum_case()) { + case nifpga_grpc::RunRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + break; + } + case nifpga_grpc::RunRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + break; + } + case nifpga_grpc::RunRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nifpga_grpc::RunRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + auto status = library_->Run(session, attribute); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); } + response->set_status(status); + return ::grpc::Status::OK; } - - auto status = library_->Run(session, attribute); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::SetFifoPropertyI32(::grpc::ServerContext* context, const SetFifoPropertyI32Request* request, SetFifoPropertyI32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - NiFpga_FifoProperty property; - switch (request->property_enum_case()) { - case nifpga_grpc::SetFifoPropertyI32Request::PropertyEnumCase::kProperty: { - property = static_cast(request->property()); - break; - } - case nifpga_grpc::SetFifoPropertyI32Request::PropertyEnumCase::kPropertyRaw: { - property = static_cast(request->property_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::SetFifoPropertyI32(::grpc::ServerContext* context, const SetFifoPropertyI32Request* request, SetFifoPropertyI32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + NiFpga_FifoProperty property; + switch (request->property_enum_case()) { + case nifpga_grpc::SetFifoPropertyI32Request::PropertyEnumCase::kProperty: { + property = static_cast(request->property()); + break; + } + case nifpga_grpc::SetFifoPropertyI32Request::PropertyEnumCase::kPropertyRaw: { + property = static_cast(request->property_raw()); + break; + } + case nifpga_grpc::SetFifoPropertyI32Request::PropertyEnumCase::PROPERTY_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for property was not specified or out of range"); + break; + } } - case nifpga_grpc::SetFifoPropertyI32Request::PropertyEnumCase::PROPERTY_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for property was not specified or out of range"); - break; + + int32_t value = request->value(); + auto status = library_->SetFifoPropertyI32(session, fifo, property, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); } + response->set_status(status); + return ::grpc::Status::OK; } - - int32_t value = request->value(); - auto status = library_->SetFifoPropertyI32(session, fifo, property, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::SetFifoPropertyI64(::grpc::ServerContext* context, const SetFifoPropertyI64Request* request, SetFifoPropertyI64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - NiFpga_FifoProperty property; - switch (request->property_enum_case()) { - case nifpga_grpc::SetFifoPropertyI64Request::PropertyEnumCase::kProperty: { - property = static_cast(request->property()); - break; - } - case nifpga_grpc::SetFifoPropertyI64Request::PropertyEnumCase::kPropertyRaw: { - property = static_cast(request->property_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::SetFifoPropertyI64(::grpc::ServerContext* context, const SetFifoPropertyI64Request* request, SetFifoPropertyI64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + NiFpga_FifoProperty property; + switch (request->property_enum_case()) { + case nifpga_grpc::SetFifoPropertyI64Request::PropertyEnumCase::kProperty: { + property = static_cast(request->property()); + break; + } + case nifpga_grpc::SetFifoPropertyI64Request::PropertyEnumCase::kPropertyRaw: { + property = static_cast(request->property_raw()); + break; + } + case nifpga_grpc::SetFifoPropertyI64Request::PropertyEnumCase::PROPERTY_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for property was not specified or out of range"); + break; + } } - case nifpga_grpc::SetFifoPropertyI64Request::PropertyEnumCase::PROPERTY_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for property was not specified or out of range"); - break; + + int64_t value = request->value(); + auto status = library_->SetFifoPropertyI64(session, fifo, property, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); } + response->set_status(status); + return ::grpc::Status::OK; } - - int64_t value = request->value(); - auto status = library_->SetFifoPropertyI64(session, fifo, property, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::SetFifoPropertyU32(::grpc::ServerContext* context, const SetFifoPropertyU32Request* request, SetFifoPropertyU32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - NiFpga_FifoProperty property; - switch (request->property_enum_case()) { - case nifpga_grpc::SetFifoPropertyU32Request::PropertyEnumCase::kProperty: { - property = static_cast(request->property()); - break; - } - case nifpga_grpc::SetFifoPropertyU32Request::PropertyEnumCase::kPropertyRaw: { - property = static_cast(request->property_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::SetFifoPropertyU32(::grpc::ServerContext* context, const SetFifoPropertyU32Request* request, SetFifoPropertyU32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + NiFpga_FifoProperty property; + switch (request->property_enum_case()) { + case nifpga_grpc::SetFifoPropertyU32Request::PropertyEnumCase::kProperty: { + property = static_cast(request->property()); + break; + } + case nifpga_grpc::SetFifoPropertyU32Request::PropertyEnumCase::kPropertyRaw: { + property = static_cast(request->property_raw()); + break; + } + case nifpga_grpc::SetFifoPropertyU32Request::PropertyEnumCase::PROPERTY_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for property was not specified or out of range"); + break; + } } - case nifpga_grpc::SetFifoPropertyU32Request::PropertyEnumCase::PROPERTY_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for property was not specified or out of range"); - break; + + uint32_t value = request->value(); + auto status = library_->SetFifoPropertyU32(session, fifo, property, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); } + response->set_status(status); + return ::grpc::Status::OK; } - - uint32_t value = request->value(); - auto status = library_->SetFifoPropertyU32(session, fifo, property, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::SetFifoPropertyU64(::grpc::ServerContext* context, const SetFifoPropertyU64Request* request, SetFifoPropertyU64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - NiFpga_FifoProperty property; - switch (request->property_enum_case()) { - case nifpga_grpc::SetFifoPropertyU64Request::PropertyEnumCase::kProperty: { - property = static_cast(request->property()); - break; - } - case nifpga_grpc::SetFifoPropertyU64Request::PropertyEnumCase::kPropertyRaw: { - property = static_cast(request->property_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::SetFifoPropertyU64(::grpc::ServerContext* context, const SetFifoPropertyU64Request* request, SetFifoPropertyU64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + NiFpga_FifoProperty property; + switch (request->property_enum_case()) { + case nifpga_grpc::SetFifoPropertyU64Request::PropertyEnumCase::kProperty: { + property = static_cast(request->property()); + break; + } + case nifpga_grpc::SetFifoPropertyU64Request::PropertyEnumCase::kPropertyRaw: { + property = static_cast(request->property_raw()); + break; + } + case nifpga_grpc::SetFifoPropertyU64Request::PropertyEnumCase::PROPERTY_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for property was not specified or out of range"); + break; + } } - case nifpga_grpc::SetFifoPropertyU64Request::PropertyEnumCase::PROPERTY_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for property was not specified or out of range"); - break; + + uint64_t value = request->value(); + auto status = library_->SetFifoPropertyU64(session, fifo, property, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); } + response->set_status(status); + return ::grpc::Status::OK; } - - uint64_t value = request->value(); - auto status = library_->SetFifoPropertyU64(session, fifo, property, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::StartFifo(::grpc::ServerContext* context, const StartFifoRequest* request, StartFifoResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - auto status = library_->StartFifo(session, fifo); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::StartFifo(::grpc::ServerContext* context, const StartFifoRequest* request, StartFifoResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + auto status = library_->StartFifo(session, fifo); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::StopFifo(::grpc::ServerContext* context, const StopFifoRequest* request, StopFifoResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - auto status = library_->StopFifo(session, fifo); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::StopFifo(::grpc::ServerContext* context, const StopFifoRequest* request, StopFifoResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + auto status = library_->StopFifo(session, fifo); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::UnreserveFifo(::grpc::ServerContext* context, const UnreserveFifoRequest* request, UnreserveFifoResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - auto status = library_->UnreserveFifo(session, fifo); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::UnreserveFifo(::grpc::ServerContext* context, const UnreserveFifoRequest* request, UnreserveFifoResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + auto status = library_->UnreserveFifo(session, fifo); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WaitOnIrqs(::grpc::ServerContext* context, const WaitOnIrqsRequest* request, WaitOnIrqsResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t irqs = request->irqs(); - uint32_t timeout = request->timeout(); - NiFpga_IrqContext irq_context{}; - uint32_t irqs_asserted{}; - NiFpga_Bool timed_out{}; - auto status = library_->WaitOnIrqs(session, &irq_context, irqs, timeout, &irqs_asserted, &timed_out); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_irqs_asserted(irqs_asserted); - response->set_timed_out(timed_out); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WaitOnIrqs(::grpc::ServerContext* context, const WaitOnIrqsRequest* request, WaitOnIrqsResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t irqs = request->irqs(); + uint32_t timeout = request->timeout(); + NiFpga_IrqContext irq_context {}; + uint32_t irqs_asserted {}; + NiFpga_Bool timed_out {}; + auto status = library_->WaitOnIrqs(session, &irq_context, irqs, timeout, &irqs_asserted, &timed_out); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_irqs_asserted(irqs_asserted); + response->set_timed_out(timed_out); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WriteArrayBool(::grpc::ServerContext* context, const WriteArrayBoolRequest* request, WriteArrayBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - auto array = convert_from_grpc(request->array()); - size_t size = static_cast(request->array().size()); - auto status = library_->WriteArrayBool(session, control, array.data(), size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WriteArrayBool(::grpc::ServerContext* context, const WriteArrayBoolRequest* request, WriteArrayBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + auto array = convert_from_grpc(request->array()); + size_t size = static_cast(request->array().size()); + auto status = library_->WriteArrayBool(session, control, array.data(), size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginWriteArrayBool(::grpc::ServerContext* context, const BeginWriteArrayBoolRequest* request, BeginWriteArrayBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - - auto data = std::make_unique(); - data->session = session; - data->control = control; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayBool", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginWriteArrayBool(::grpc::ServerContext* context, const BeginWriteArrayBoolRequest* request, BeginWriteArrayBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + + auto data = std::make_unique(); + data->session = session; + data->control = control; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayBool", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WriteArrayDbl(::grpc::ServerContext* context, const WriteArrayDblRequest* request, WriteArrayDblResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - auto array = const_cast(request->array().data()); - size_t size = static_cast(request->array().size()); - auto status = library_->WriteArrayDbl(session, control, array, size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WriteArrayDbl(::grpc::ServerContext* context, const WriteArrayDblRequest* request, WriteArrayDblResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + auto array = const_cast(request->array().data()); + size_t size = static_cast(request->array().size()); + auto status = library_->WriteArrayDbl(session, control, array, size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginWriteArrayDbl(::grpc::ServerContext* context, const BeginWriteArrayDblRequest* request, BeginWriteArrayDblResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - - auto data = std::make_unique(); - data->session = session; - data->control = control; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayDbl", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginWriteArrayDbl(::grpc::ServerContext* context, const BeginWriteArrayDblRequest* request, BeginWriteArrayDblResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + + auto data = std::make_unique(); + data->session = session; + data->control = control; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayDbl", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WriteArrayI16(::grpc::ServerContext* context, const WriteArrayI16Request* request, WriteArrayI16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - auto array_raw = request->array(); - auto array = std::vector(); - array.reserve(array_raw.size()); - std::transform( + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WriteArrayI16(::grpc::ServerContext* context, const WriteArrayI16Request* request, WriteArrayI16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + auto array_raw = request->array(); + auto array = std::vector(); + array.reserve(array_raw.size()); + std::transform( array_raw.begin(), array_raw.end(), std::back_inserter(array), [](auto x) { - if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { - std::string message("value "); - message.append(std::to_string(x)); - message.append(" doesn't fit in datatype "); - message.append("int16_t"); - throw nidevice_grpc::ValueOutOfRangeException(message); - } - return static_cast(x); + if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { + std::string message("value "); + message.append(std::to_string(x)); + message.append(" doesn't fit in datatype "); + message.append("int16_t"); + throw nidevice_grpc::ValueOutOfRangeException(message); + } + return static_cast(x); }); - size_t size = static_cast(request->array().size()); - auto status = library_->WriteArrayI16(session, control, array.data(), size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + size_t size = static_cast(request->array().size()); + auto status = library_->WriteArrayI16(session, control, array.data(), size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginWriteArrayI16(::grpc::ServerContext* context, const BeginWriteArrayI16Request* request, BeginWriteArrayI16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - - auto data = std::make_unique(); - data->session = session; - data->control = control; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayI16", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginWriteArrayI16(::grpc::ServerContext* context, const BeginWriteArrayI16Request* request, BeginWriteArrayI16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + + auto data = std::make_unique(); + data->session = session; + data->control = control; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayI16", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WriteArrayI32(::grpc::ServerContext* context, const WriteArrayI32Request* request, WriteArrayI32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - auto array = const_cast(request->array().data()); - size_t size = static_cast(request->array().size()); - auto status = library_->WriteArrayI32(session, control, array, size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WriteArrayI32(::grpc::ServerContext* context, const WriteArrayI32Request* request, WriteArrayI32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + auto array = const_cast(request->array().data()); + size_t size = static_cast(request->array().size()); + auto status = library_->WriteArrayI32(session, control, array, size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginWriteArrayI32(::grpc::ServerContext* context, const BeginWriteArrayI32Request* request, BeginWriteArrayI32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - - auto data = std::make_unique(); - data->session = session; - data->control = control; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayI32", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginWriteArrayI32(::grpc::ServerContext* context, const BeginWriteArrayI32Request* request, BeginWriteArrayI32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + + auto data = std::make_unique(); + data->session = session; + data->control = control; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayI32", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WriteArrayI64(::grpc::ServerContext* context, const WriteArrayI64Request* request, WriteArrayI64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - auto array = const_cast(request->array().data()); - size_t size = static_cast(request->array().size()); - auto status = library_->WriteArrayI64(session, control, array, size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WriteArrayI64(::grpc::ServerContext* context, const WriteArrayI64Request* request, WriteArrayI64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + auto array = const_cast(request->array().data()); + size_t size = static_cast(request->array().size()); + auto status = library_->WriteArrayI64(session, control, array, size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginWriteArrayI64(::grpc::ServerContext* context, const BeginWriteArrayI64Request* request, BeginWriteArrayI64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - - auto data = std::make_unique(); - data->session = session; - data->control = control; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayI64", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginWriteArrayI64(::grpc::ServerContext* context, const BeginWriteArrayI64Request* request, BeginWriteArrayI64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + + auto data = std::make_unique(); + data->session = session; + data->control = control; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayI64", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WriteArrayI8(::grpc::ServerContext* context, const WriteArrayI8Request* request, WriteArrayI8Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - auto array_raw = request->array(); - auto array = std::vector(); - array.reserve(array_raw.size()); - std::transform( + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WriteArrayI8(::grpc::ServerContext* context, const WriteArrayI8Request* request, WriteArrayI8Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + auto array_raw = request->array(); + auto array = std::vector(); + array.reserve(array_raw.size()); + std::transform( array_raw.begin(), array_raw.end(), std::back_inserter(array), [](auto x) { - if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { - std::string message("value "); - message.append(std::to_string(x)); - message.append(" doesn't fit in datatype "); - message.append("int8_t"); - throw nidevice_grpc::ValueOutOfRangeException(message); - } - return static_cast(x); + if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { + std::string message("value "); + message.append(std::to_string(x)); + message.append(" doesn't fit in datatype "); + message.append("int8_t"); + throw nidevice_grpc::ValueOutOfRangeException(message); + } + return static_cast(x); }); - size_t size = static_cast(request->array().size()); - auto status = library_->WriteArrayI8(session, control, array.data(), size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + size_t size = static_cast(request->array().size()); + auto status = library_->WriteArrayI8(session, control, array.data(), size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginWriteArrayI8(::grpc::ServerContext* context, const BeginWriteArrayI8Request* request, BeginWriteArrayI8Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - - auto data = std::make_unique(); - data->session = session; - data->control = control; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayI8", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginWriteArrayI8(::grpc::ServerContext* context, const BeginWriteArrayI8Request* request, BeginWriteArrayI8Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + + auto data = std::make_unique(); + data->session = session; + data->control = control; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayI8", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WriteArraySgl(::grpc::ServerContext* context, const WriteArraySglRequest* request, WriteArraySglResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - auto array = const_cast(request->array().data()); - size_t size = static_cast(request->array().size()); - auto status = library_->WriteArraySgl(session, control, array, size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WriteArraySgl(::grpc::ServerContext* context, const WriteArraySglRequest* request, WriteArraySglResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + auto array = const_cast(request->array().data()); + size_t size = static_cast(request->array().size()); + auto status = library_->WriteArraySgl(session, control, array, size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginWriteArraySgl(::grpc::ServerContext* context, const BeginWriteArraySglRequest* request, BeginWriteArraySglResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - - auto data = std::make_unique(); - data->session = session; - data->control = control; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArraySgl", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginWriteArraySgl(::grpc::ServerContext* context, const BeginWriteArraySglRequest* request, BeginWriteArraySglResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + + auto data = std::make_unique(); + data->session = session; + data->control = control; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArraySgl", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WriteArrayU16(::grpc::ServerContext* context, const WriteArrayU16Request* request, WriteArrayU16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - auto array_raw = request->array(); - auto array = std::vector(); - array.reserve(array_raw.size()); - std::transform( + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WriteArrayU16(::grpc::ServerContext* context, const WriteArrayU16Request* request, WriteArrayU16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + auto array_raw = request->array(); + auto array = std::vector(); + array.reserve(array_raw.size()); + std::transform( array_raw.begin(), array_raw.end(), std::back_inserter(array), [](auto x) { - if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { - std::string message("value "); - message.append(std::to_string(x)); - message.append(" doesn't fit in datatype "); - message.append("uint16_t"); - throw nidevice_grpc::ValueOutOfRangeException(message); - } - return static_cast(x); + if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { + std::string message("value "); + message.append(std::to_string(x)); + message.append(" doesn't fit in datatype "); + message.append("uint16_t"); + throw nidevice_grpc::ValueOutOfRangeException(message); + } + return static_cast(x); }); - size_t size = static_cast(request->array().size()); - auto status = library_->WriteArrayU16(session, control, array.data(), size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + size_t size = static_cast(request->array().size()); + auto status = library_->WriteArrayU16(session, control, array.data(), size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginWriteArrayU16(::grpc::ServerContext* context, const BeginWriteArrayU16Request* request, BeginWriteArrayU16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - - auto data = std::make_unique(); - data->session = session; - data->control = control; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayU16", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginWriteArrayU16(::grpc::ServerContext* context, const BeginWriteArrayU16Request* request, BeginWriteArrayU16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + + auto data = std::make_unique(); + data->session = session; + data->control = control; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayU16", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WriteArrayU32(::grpc::ServerContext* context, const WriteArrayU32Request* request, WriteArrayU32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - auto array = const_cast(request->array().data()); - size_t size = static_cast(request->array().size()); - auto status = library_->WriteArrayU32(session, control, array, size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WriteArrayU32(::grpc::ServerContext* context, const WriteArrayU32Request* request, WriteArrayU32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + auto array = const_cast(request->array().data()); + size_t size = static_cast(request->array().size()); + auto status = library_->WriteArrayU32(session, control, array, size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginWriteArrayU32(::grpc::ServerContext* context, const BeginWriteArrayU32Request* request, BeginWriteArrayU32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - - auto data = std::make_unique(); - data->session = session; - data->control = control; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayU32", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginWriteArrayU32(::grpc::ServerContext* context, const BeginWriteArrayU32Request* request, BeginWriteArrayU32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + + auto data = std::make_unique(); + data->session = session; + data->control = control; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayU32", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WriteArrayU64(::grpc::ServerContext* context, const WriteArrayU64Request* request, WriteArrayU64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - auto array = const_cast(request->array().data()); - size_t size = static_cast(request->array().size()); - auto status = library_->WriteArrayU64(session, control, array, size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WriteArrayU64(::grpc::ServerContext* context, const WriteArrayU64Request* request, WriteArrayU64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + auto array = const_cast(request->array().data()); + size_t size = static_cast(request->array().size()); + auto status = library_->WriteArrayU64(session, control, array, size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginWriteArrayU64(::grpc::ServerContext* context, const BeginWriteArrayU64Request* request, BeginWriteArrayU64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - - auto data = std::make_unique(); - data->session = session; - data->control = control; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayU64", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginWriteArrayU64(::grpc::ServerContext* context, const BeginWriteArrayU64Request* request, BeginWriteArrayU64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + + auto data = std::make_unique(); + data->session = session; + data->control = control; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayU64", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WriteArrayU8(::grpc::ServerContext* context, const WriteArrayU8Request* request, WriteArrayU8Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - auto array_raw = request->array(); - auto array = std::vector(); - array.reserve(array_raw.size()); - std::transform( + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WriteArrayU8(::grpc::ServerContext* context, const WriteArrayU8Request* request, WriteArrayU8Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + auto array_raw = request->array(); + auto array = std::vector(); + array.reserve(array_raw.size()); + std::transform( array_raw.begin(), array_raw.end(), std::back_inserter(array), [](auto x) { - if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { - std::string message("value "); - message.append(std::to_string(x)); - message.append(" doesn't fit in datatype "); - message.append("uint8_t"); - throw nidevice_grpc::ValueOutOfRangeException(message); - } - return static_cast(x); + if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { + std::string message("value "); + message.append(std::to_string(x)); + message.append(" doesn't fit in datatype "); + message.append("uint8_t"); + throw nidevice_grpc::ValueOutOfRangeException(message); + } + return static_cast(x); }); - size_t size = static_cast(request->array().size()); - auto status = library_->WriteArrayU8(session, control, array.data(), size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + size_t size = static_cast(request->array().size()); + auto status = library_->WriteArrayU8(session, control, array.data(), size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginWriteArrayU8(::grpc::ServerContext* context, const BeginWriteArrayU8Request* request, BeginWriteArrayU8Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - - auto data = std::make_unique(); - data->session = session; - data->control = control; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayU8", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginWriteArrayU8(::grpc::ServerContext* context, const BeginWriteArrayU8Request* request, BeginWriteArrayU8Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + + auto data = std::make_unique(); + data->session = session; + data->control = control; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteArrayU8", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WriteBool(::grpc::ServerContext* context, const WriteBoolRequest* request, WriteBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - NiFpga_Bool value = request->value(); - auto status = library_->WriteBool(session, control, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WriteBool(::grpc::ServerContext* context, const WriteBoolRequest* request, WriteBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + NiFpga_Bool value = request->value(); + auto status = library_->WriteBool(session, control, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginWriteBool(::grpc::ServerContext* context, const BeginWriteBoolRequest* request, BeginWriteBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - - auto data = std::make_unique(); - data->session = session; - data->control = control; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteBool", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginWriteBool(::grpc::ServerContext* context, const BeginWriteBoolRequest* request, BeginWriteBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + + auto data = std::make_unique(); + data->session = session; + data->control = control; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteBool", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WriteDbl(::grpc::ServerContext* context, const WriteDblRequest* request, WriteDblResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - double value = request->value(); - auto status = library_->WriteDbl(session, control, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WriteDbl(::grpc::ServerContext* context, const WriteDblRequest* request, WriteDblResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + double value = request->value(); + auto status = library_->WriteDbl(session, control, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginWriteDbl(::grpc::ServerContext* context, const BeginWriteDblRequest* request, BeginWriteDblResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - - auto data = std::make_unique(); - data->session = session; - data->control = control; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteDbl", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginWriteDbl(::grpc::ServerContext* context, const BeginWriteDblRequest* request, BeginWriteDblResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + + auto data = std::make_unique(); + data->session = session; + data->control = control; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteDbl", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WriteFifoBool(::grpc::ServerContext* context, const WriteFifoBoolRequest* request, WriteFifoBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - auto data = convert_from_grpc(request->data()); - size_t number_of_elements = static_cast(request->data().size()); - uint32_t timeout = request->timeout(); - size_t empty_elements_remaining{}; - auto status = library_->WriteFifoBool(session, fifo, data.data(), number_of_elements, timeout, &empty_elements_remaining); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_empty_elements_remaining(empty_elements_remaining); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WriteFifoBool(::grpc::ServerContext* context, const WriteFifoBoolRequest* request, WriteFifoBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + auto data = convert_from_grpc(request->data()); + size_t number_of_elements = static_cast(request->data().size()); + uint32_t timeout = request->timeout(); + size_t empty_elements_remaining {}; + auto status = library_->WriteFifoBool(session, fifo, data.data(), number_of_elements, timeout, &empty_elements_remaining); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_empty_elements_remaining(empty_elements_remaining); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WriteFifoDbl(::grpc::ServerContext* context, const WriteFifoDblRequest* request, WriteFifoDblResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - auto data = const_cast(request->data().data()); - size_t number_of_elements = static_cast(request->data().size()); - uint32_t timeout = request->timeout(); - size_t empty_elements_remaining{}; - auto status = library_->WriteFifoDbl(session, fifo, data, number_of_elements, timeout, &empty_elements_remaining); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_empty_elements_remaining(empty_elements_remaining); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WriteFifoDbl(::grpc::ServerContext* context, const WriteFifoDblRequest* request, WriteFifoDblResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + auto data = const_cast(request->data().data()); + size_t number_of_elements = static_cast(request->data().size()); + uint32_t timeout = request->timeout(); + size_t empty_elements_remaining {}; + auto status = library_->WriteFifoDbl(session, fifo, data, number_of_elements, timeout, &empty_elements_remaining); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_empty_elements_remaining(empty_elements_remaining); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WriteFifoI16(::grpc::ServerContext* context, const WriteFifoI16Request* request, WriteFifoI16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - auto data_raw = request->data(); - auto data = std::vector(); - data.reserve(data_raw.size()); - std::transform( + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WriteFifoI16(::grpc::ServerContext* context, const WriteFifoI16Request* request, WriteFifoI16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + auto data_raw = request->data(); + auto data = std::vector(); + data.reserve(data_raw.size()); + std::transform( data_raw.begin(), data_raw.end(), std::back_inserter(data), [](auto x) { - if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { - std::string message("value "); - message.append(std::to_string(x)); - message.append(" doesn't fit in datatype "); - message.append("int16_t"); - throw nidevice_grpc::ValueOutOfRangeException(message); - } - return static_cast(x); + if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { + std::string message("value "); + message.append(std::to_string(x)); + message.append(" doesn't fit in datatype "); + message.append("int16_t"); + throw nidevice_grpc::ValueOutOfRangeException(message); + } + return static_cast(x); }); - size_t number_of_elements = static_cast(request->data().size()); - uint32_t timeout = request->timeout(); - size_t empty_elements_remaining{}; - auto status = library_->WriteFifoI16(session, fifo, data.data(), number_of_elements, timeout, &empty_elements_remaining); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + size_t number_of_elements = static_cast(request->data().size()); + uint32_t timeout = request->timeout(); + size_t empty_elements_remaining {}; + auto status = library_->WriteFifoI16(session, fifo, data.data(), number_of_elements, timeout, &empty_elements_remaining); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_empty_elements_remaining(empty_elements_remaining); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - response->set_empty_elements_remaining(empty_elements_remaining); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WriteFifoI32(::grpc::ServerContext* context, const WriteFifoI32Request* request, WriteFifoI32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - auto data = const_cast(request->data().data()); - size_t number_of_elements = static_cast(request->data().size()); - uint32_t timeout = request->timeout(); - size_t empty_elements_remaining{}; - auto status = library_->WriteFifoI32(session, fifo, data, number_of_elements, timeout, &empty_elements_remaining); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_empty_elements_remaining(empty_elements_remaining); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WriteFifoI32(::grpc::ServerContext* context, const WriteFifoI32Request* request, WriteFifoI32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + auto data = const_cast(request->data().data()); + size_t number_of_elements = static_cast(request->data().size()); + uint32_t timeout = request->timeout(); + size_t empty_elements_remaining {}; + auto status = library_->WriteFifoI32(session, fifo, data, number_of_elements, timeout, &empty_elements_remaining); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_empty_elements_remaining(empty_elements_remaining); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WriteFifoI64(::grpc::ServerContext* context, const WriteFifoI64Request* request, WriteFifoI64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - auto data = const_cast(request->data().data()); - size_t number_of_elements = static_cast(request->data().size()); - uint32_t timeout = request->timeout(); - size_t empty_elements_remaining{}; - auto status = library_->WriteFifoI64(session, fifo, data, number_of_elements, timeout, &empty_elements_remaining); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_empty_elements_remaining(empty_elements_remaining); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WriteFifoI64(::grpc::ServerContext* context, const WriteFifoI64Request* request, WriteFifoI64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + auto data = const_cast(request->data().data()); + size_t number_of_elements = static_cast(request->data().size()); + uint32_t timeout = request->timeout(); + size_t empty_elements_remaining {}; + auto status = library_->WriteFifoI64(session, fifo, data, number_of_elements, timeout, &empty_elements_remaining); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_empty_elements_remaining(empty_elements_remaining); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WriteFifoI8(::grpc::ServerContext* context, const WriteFifoI8Request* request, WriteFifoI8Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - auto data_raw = request->data(); - auto data = std::vector(); - data.reserve(data_raw.size()); - std::transform( + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WriteFifoI8(::grpc::ServerContext* context, const WriteFifoI8Request* request, WriteFifoI8Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + auto data_raw = request->data(); + auto data = std::vector(); + data.reserve(data_raw.size()); + std::transform( data_raw.begin(), data_raw.end(), std::back_inserter(data), [](auto x) { - if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { - std::string message("value "); - message.append(std::to_string(x)); - message.append(" doesn't fit in datatype "); - message.append("int8_t"); - throw nidevice_grpc::ValueOutOfRangeException(message); - } - return static_cast(x); + if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { + std::string message("value "); + message.append(std::to_string(x)); + message.append(" doesn't fit in datatype "); + message.append("int8_t"); + throw nidevice_grpc::ValueOutOfRangeException(message); + } + return static_cast(x); }); - size_t number_of_elements = static_cast(request->data().size()); - uint32_t timeout = request->timeout(); - size_t empty_elements_remaining{}; - auto status = library_->WriteFifoI8(session, fifo, data.data(), number_of_elements, timeout, &empty_elements_remaining); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + size_t number_of_elements = static_cast(request->data().size()); + uint32_t timeout = request->timeout(); + size_t empty_elements_remaining {}; + auto status = library_->WriteFifoI8(session, fifo, data.data(), number_of_elements, timeout, &empty_elements_remaining); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_empty_elements_remaining(empty_elements_remaining); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - response->set_empty_elements_remaining(empty_elements_remaining); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WriteFifoSgl(::grpc::ServerContext* context, const WriteFifoSglRequest* request, WriteFifoSglResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - auto data = const_cast(request->data().data()); - size_t number_of_elements = static_cast(request->data().size()); - uint32_t timeout = request->timeout(); - size_t empty_elements_remaining{}; - auto status = library_->WriteFifoSgl(session, fifo, data, number_of_elements, timeout, &empty_elements_remaining); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_empty_elements_remaining(empty_elements_remaining); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WriteFifoSgl(::grpc::ServerContext* context, const WriteFifoSglRequest* request, WriteFifoSglResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + auto data = const_cast(request->data().data()); + size_t number_of_elements = static_cast(request->data().size()); + uint32_t timeout = request->timeout(); + size_t empty_elements_remaining {}; + auto status = library_->WriteFifoSgl(session, fifo, data, number_of_elements, timeout, &empty_elements_remaining); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_empty_elements_remaining(empty_elements_remaining); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WriteFifoU16(::grpc::ServerContext* context, const WriteFifoU16Request* request, WriteFifoU16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - auto data_raw = request->data(); - auto data = std::vector(); - data.reserve(data_raw.size()); - std::transform( + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WriteFifoU16(::grpc::ServerContext* context, const WriteFifoU16Request* request, WriteFifoU16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + auto data_raw = request->data(); + auto data = std::vector(); + data.reserve(data_raw.size()); + std::transform( data_raw.begin(), data_raw.end(), std::back_inserter(data), [](auto x) { - if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { - std::string message("value "); - message.append(std::to_string(x)); - message.append(" doesn't fit in datatype "); - message.append("uint16_t"); - throw nidevice_grpc::ValueOutOfRangeException(message); - } - return static_cast(x); + if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { + std::string message("value "); + message.append(std::to_string(x)); + message.append(" doesn't fit in datatype "); + message.append("uint16_t"); + throw nidevice_grpc::ValueOutOfRangeException(message); + } + return static_cast(x); }); - size_t number_of_elements = static_cast(request->data().size()); - uint32_t timeout = request->timeout(); - size_t empty_elements_remaining{}; - auto status = library_->WriteFifoU16(session, fifo, data.data(), number_of_elements, timeout, &empty_elements_remaining); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + size_t number_of_elements = static_cast(request->data().size()); + uint32_t timeout = request->timeout(); + size_t empty_elements_remaining {}; + auto status = library_->WriteFifoU16(session, fifo, data.data(), number_of_elements, timeout, &empty_elements_remaining); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_empty_elements_remaining(empty_elements_remaining); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - response->set_empty_elements_remaining(empty_elements_remaining); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WriteFifoU32(::grpc::ServerContext* context, const WriteFifoU32Request* request, WriteFifoU32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - auto data = const_cast(request->data().data()); - size_t number_of_elements = static_cast(request->data().size()); - uint32_t timeout = request->timeout(); - size_t empty_elements_remaining{}; - auto status = library_->WriteFifoU32(session, fifo, data, number_of_elements, timeout, &empty_elements_remaining); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_empty_elements_remaining(empty_elements_remaining); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WriteFifoU32(::grpc::ServerContext* context, const WriteFifoU32Request* request, WriteFifoU32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + auto data = const_cast(request->data().data()); + size_t number_of_elements = static_cast(request->data().size()); + uint32_t timeout = request->timeout(); + size_t empty_elements_remaining {}; + auto status = library_->WriteFifoU32(session, fifo, data, number_of_elements, timeout, &empty_elements_remaining); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_empty_elements_remaining(empty_elements_remaining); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WriteFifoU64(::grpc::ServerContext* context, const WriteFifoU64Request* request, WriteFifoU64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - auto data = const_cast(request->data().data()); - size_t number_of_elements = static_cast(request->data().size()); - uint32_t timeout = request->timeout(); - size_t empty_elements_remaining{}; - auto status = library_->WriteFifoU64(session, fifo, data, number_of_elements, timeout, &empty_elements_remaining); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - response->set_empty_elements_remaining(empty_elements_remaining); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WriteFifoU64(::grpc::ServerContext* context, const WriteFifoU64Request* request, WriteFifoU64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + auto data = const_cast(request->data().data()); + size_t number_of_elements = static_cast(request->data().size()); + uint32_t timeout = request->timeout(); + size_t empty_elements_remaining {}; + auto status = library_->WriteFifoU64(session, fifo, data, number_of_elements, timeout, &empty_elements_remaining); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_empty_elements_remaining(empty_elements_remaining); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WriteFifoU8(::grpc::ServerContext* context, const WriteFifoU8Request* request, WriteFifoU8Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t fifo = request->fifo(); - auto data_raw = request->data(); - auto data = std::vector(); - data.reserve(data_raw.size()); - std::transform( + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WriteFifoU8(::grpc::ServerContext* context, const WriteFifoU8Request* request, WriteFifoU8Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t fifo = request->fifo(); + auto data_raw = request->data(); + auto data = std::vector(); + data.reserve(data_raw.size()); + std::transform( data_raw.begin(), data_raw.end(), std::back_inserter(data), [](auto x) { - if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { - std::string message("value "); - message.append(std::to_string(x)); - message.append(" doesn't fit in datatype "); - message.append("uint8_t"); - throw nidevice_grpc::ValueOutOfRangeException(message); - } - return static_cast(x); + if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { + std::string message("value "); + message.append(std::to_string(x)); + message.append(" doesn't fit in datatype "); + message.append("uint8_t"); + throw nidevice_grpc::ValueOutOfRangeException(message); + } + return static_cast(x); }); - size_t number_of_elements = static_cast(request->data().size()); - uint32_t timeout = request->timeout(); - size_t empty_elements_remaining{}; - auto status = library_->WriteFifoU8(session, fifo, data.data(), number_of_elements, timeout, &empty_elements_remaining); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + size_t number_of_elements = static_cast(request->data().size()); + uint32_t timeout = request->timeout(); + size_t empty_elements_remaining {}; + auto status = library_->WriteFifoU8(session, fifo, data.data(), number_of_elements, timeout, &empty_elements_remaining); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + response->set_empty_elements_remaining(empty_elements_remaining); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - response->set_empty_elements_remaining(empty_elements_remaining); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WriteI16(::grpc::ServerContext* context, const WriteI16Request* request, WriteI16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - auto value_raw = request->value(); - if (value_raw < std::numeric_limits::min() || value_raw > std::numeric_limits::max()) { - std::string message("value "); - message.append(std::to_string(value_raw)); - message.append(" doesn't fit in datatype "); - message.append("int16_t"); - throw nidevice_grpc::ValueOutOfRangeException(message); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WriteI16(::grpc::ServerContext* context, const WriteI16Request* request, WriteI16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - auto value = static_cast(value_raw); + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + auto value_raw = request->value(); + if (value_raw < std::numeric_limits::min() || value_raw > std::numeric_limits::max()) { + std::string message("value "); + message.append(std::to_string(value_raw)); + message.append(" doesn't fit in datatype "); + message.append("int16_t"); + throw nidevice_grpc::ValueOutOfRangeException(message); + } + auto value = static_cast(value_raw); - auto status = library_->WriteI16(session, control, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + auto status = library_->WriteI16(session, control, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginWriteI16(::grpc::ServerContext* context, const BeginWriteI16Request* request, BeginWriteI16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - - auto data = std::make_unique(); - data->session = session; - data->control = control; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteI16", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginWriteI16(::grpc::ServerContext* context, const BeginWriteI16Request* request, BeginWriteI16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + + auto data = std::make_unique(); + data->session = session; + data->control = control; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteI16", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WriteI32(::grpc::ServerContext* context, const WriteI32Request* request, WriteI32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - int32_t value = request->value(); - auto status = library_->WriteI32(session, control, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WriteI32(::grpc::ServerContext* context, const WriteI32Request* request, WriteI32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + int32_t value = request->value(); + auto status = library_->WriteI32(session, control, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginWriteI32(::grpc::ServerContext* context, const BeginWriteI32Request* request, BeginWriteI32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - - auto data = std::make_unique(); - data->session = session; - data->control = control; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteI32", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginWriteI32(::grpc::ServerContext* context, const BeginWriteI32Request* request, BeginWriteI32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + + auto data = std::make_unique(); + data->session = session; + data->control = control; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteI32", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WriteI64(::grpc::ServerContext* context, const WriteI64Request* request, WriteI64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - int64_t value = request->value(); - auto status = library_->WriteI64(session, control, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WriteI64(::grpc::ServerContext* context, const WriteI64Request* request, WriteI64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + int64_t value = request->value(); + auto status = library_->WriteI64(session, control, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginWriteI64(::grpc::ServerContext* context, const BeginWriteI64Request* request, BeginWriteI64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - - auto data = std::make_unique(); - data->session = session; - data->control = control; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteI64", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginWriteI64(::grpc::ServerContext* context, const BeginWriteI64Request* request, BeginWriteI64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + + auto data = std::make_unique(); + data->session = session; + data->control = control; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteI64", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WriteI8(::grpc::ServerContext* context, const WriteI8Request* request, WriteI8Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - auto value_raw = request->value(); - if (value_raw < std::numeric_limits::min() || value_raw > std::numeric_limits::max()) { - std::string message("value "); - message.append(std::to_string(value_raw)); - message.append(" doesn't fit in datatype "); - message.append("int8_t"); - throw nidevice_grpc::ValueOutOfRangeException(message); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WriteI8(::grpc::ServerContext* context, const WriteI8Request* request, WriteI8Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - auto value = static_cast(value_raw); + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + auto value_raw = request->value(); + if (value_raw < std::numeric_limits::min() || value_raw > std::numeric_limits::max()) { + std::string message("value "); + message.append(std::to_string(value_raw)); + message.append(" doesn't fit in datatype "); + message.append("int8_t"); + throw nidevice_grpc::ValueOutOfRangeException(message); + } + auto value = static_cast(value_raw); - auto status = library_->WriteI8(session, control, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + auto status = library_->WriteI8(session, control, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginWriteI8(::grpc::ServerContext* context, const BeginWriteI8Request* request, BeginWriteI8Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - - auto data = std::make_unique(); - data->session = session; - data->control = control; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteI8", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginWriteI8(::grpc::ServerContext* context, const BeginWriteI8Request* request, BeginWriteI8Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + + auto data = std::make_unique(); + data->session = session; + data->control = control; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteI8", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WriteSgl(::grpc::ServerContext* context, const WriteSglRequest* request, WriteSglResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - float value = request->value(); - auto status = library_->WriteSgl(session, control, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WriteSgl(::grpc::ServerContext* context, const WriteSglRequest* request, WriteSglResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + float value = request->value(); + auto status = library_->WriteSgl(session, control, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginWriteSgl(::grpc::ServerContext* context, const BeginWriteSglRequest* request, BeginWriteSglResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - - auto data = std::make_unique(); - data->session = session; - data->control = control; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteSgl", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginWriteSgl(::grpc::ServerContext* context, const BeginWriteSglRequest* request, BeginWriteSglResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + + auto data = std::make_unique(); + data->session = session; + data->control = control; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteSgl", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WriteU16(::grpc::ServerContext* context, const WriteU16Request* request, WriteU16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - auto value_raw = request->value(); - if (value_raw < std::numeric_limits::min() || value_raw > std::numeric_limits::max()) { - std::string message("value "); - message.append(std::to_string(value_raw)); - message.append(" doesn't fit in datatype "); - message.append("uint16_t"); - throw nidevice_grpc::ValueOutOfRangeException(message); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WriteU16(::grpc::ServerContext* context, const WriteU16Request* request, WriteU16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - auto value = static_cast(value_raw); + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + auto value_raw = request->value(); + if (value_raw < std::numeric_limits::min() || value_raw > std::numeric_limits::max()) { + std::string message("value "); + message.append(std::to_string(value_raw)); + message.append(" doesn't fit in datatype "); + message.append("uint16_t"); + throw nidevice_grpc::ValueOutOfRangeException(message); + } + auto value = static_cast(value_raw); - auto status = library_->WriteU16(session, control, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + auto status = library_->WriteU16(session, control, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginWriteU16(::grpc::ServerContext* context, const BeginWriteU16Request* request, BeginWriteU16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - - auto data = std::make_unique(); - data->session = session; - data->control = control; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteU16", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginWriteU16(::grpc::ServerContext* context, const BeginWriteU16Request* request, BeginWriteU16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + + auto data = std::make_unique(); + data->session = session; + data->control = control; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteU16", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WriteU32(::grpc::ServerContext* context, const WriteU32Request* request, WriteU32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - uint32_t value = request->value(); - auto status = library_->WriteU32(session, control, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WriteU32(::grpc::ServerContext* context, const WriteU32Request* request, WriteU32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + uint32_t value = request->value(); + auto status = library_->WriteU32(session, control, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginWriteU32(::grpc::ServerContext* context, const BeginWriteU32Request* request, BeginWriteU32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - - auto data = std::make_unique(); - data->session = session; - data->control = control; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteU32", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginWriteU32(::grpc::ServerContext* context, const BeginWriteU32Request* request, BeginWriteU32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + + auto data = std::make_unique(); + data->session = session; + data->control = control; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteU32", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WriteU64(::grpc::ServerContext* context, const WriteU64Request* request, WriteU64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - uint64_t value = request->value(); - auto status = library_->WriteU64(session, control, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WriteU64(::grpc::ServerContext* context, const WriteU64Request* request, WriteU64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + uint64_t value = request->value(); + auto status = library_->WriteU64(session, control, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginWriteU64(::grpc::ServerContext* context, const BeginWriteU64Request* request, BeginWriteU64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - - auto data = std::make_unique(); - data->session = session; - data->control = control; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteU64", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginWriteU64(::grpc::ServerContext* context, const BeginWriteU64Request* request, BeginWriteU64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + + auto data = std::make_unique(); + data->session = session; + data->control = control; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteU64", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::WriteU8(::grpc::ServerContext* context, const WriteU8Request* request, WriteU8Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - auto value_raw = request->value(); - if (value_raw < std::numeric_limits::min() || value_raw > std::numeric_limits::max()) { - std::string message("value "); - message.append(std::to_string(value_raw)); - message.append(" doesn't fit in datatype "); - message.append("uint8_t"); - throw nidevice_grpc::ValueOutOfRangeException(message); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::WriteU8(::grpc::ServerContext* context, const WriteU8Request* request, WriteU8Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - auto value = static_cast(value_raw); + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + auto value_raw = request->value(); + if (value_raw < std::numeric_limits::min() || value_raw > std::numeric_limits::max()) { + std::string message("value "); + message.append(std::to_string(value_raw)); + message.append(" doesn't fit in datatype "); + message.append("uint8_t"); + throw nidevice_grpc::ValueOutOfRangeException(message); + } + auto value = static_cast(value_raw); - auto status = library_->WriteU8(session, control, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + auto status = library_->WriteU8(session, control, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForNiFpga_Session(context, status, session); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiFpgaService::BeginWriteU8(::grpc::ServerContext* context, const BeginWriteU8Request* request, BeginWriteU8Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_grpc_session = request->session(); - NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); - uint32_t control = request->control(); - - auto data = std::make_unique(); - data->session = session; - data->control = control; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteU8", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiFpgaService::BeginWriteU8(::grpc::ServerContext* context, const BeginWriteU8Request* request, BeginWriteU8Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_grpc_session = request->session(); + NiFpga_Session session = session_repository_->access_session(session_grpc_session.name()); + uint32_t control = request->control(); + + auto data = std::make_unique(); + data->session = session; + data->control = control; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteU8", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -NiFpgaFeatureToggles::NiFpgaFeatureToggles( + + NiFpgaFeatureToggles::NiFpgaFeatureToggles( const nidevice_grpc::FeatureToggles& feature_toggles) : is_enabled( - feature_toggles.is_feature_enabled("nifpga", CodeReadiness::kRelease)) -{ -} -} // namespace nifpga_grpc + feature_toggles.is_feature_enabled("nifpga", CodeReadiness::kRelease)) + { + } +} // namespace nifpga_grpc + diff --git a/source/codegen/common_helpers.py b/source/codegen/common_helpers.py index fdb42bb64..8af239e75 100644 --- a/source/codegen/common_helpers.py +++ b/source/codegen/common_helpers.py @@ -1236,7 +1236,7 @@ def get_data_moniker_request_message_type(begin_function_name: str) -> str: Input expected is Begin* streaming API name. """ - return f"{begin_function_name.replace('Begin', '')}StreamingRequest" + return f"{begin_function_name.replace('Begin', 'Moniker')}Request" def get_data_moniker_response_message_type(begin_function_name: str) -> str: @@ -1244,7 +1244,7 @@ def get_data_moniker_response_message_type(begin_function_name: str) -> str: Input expected is Begin* streaming API name. """ - return f"{begin_function_name.replace('Begin', '')}StreamingResponse" + return f"{begin_function_name.replace('Begin', 'Moniker')}Response" def get_data_moniker_function_parameters(function: dict) -> Tuple[List[dict], List[dict]]: diff --git a/source/tests/integration/ni_fake_fpga_streaming_tests.cpp b/source/tests/integration/ni_fake_fpga_streaming_tests.cpp index 6382a101f..99d8f4edf 100644 --- a/source/tests/integration/ni_fake_fpga_streaming_tests.cpp +++ b/source/tests/integration/ni_fake_fpga_streaming_tests.cpp @@ -1,21 +1,22 @@ -#include -#include "../generated/nifpga/nifpga_client.h" -#include +#include <../generated/nifpga/nifpga_mock_library.h> +#include +#include #include -#include #include -#include -#include -#include -#include <../generated/nifpga/nifpga_mock_library.h> +#include +#include +#include +#include #include +#include #include +#include #include -#include -#include -#include + #include +#include "../generated/nifpga/nifpga_client.h" + namespace ni { namespace tests { namespace integration { @@ -42,22 +43,22 @@ class NiFakeFpgaStreamingTests : public ::testing::Test { std::atomic shutdown_{false}; public: - NiFakeFpgaStreamingTests() - { - session_repository_ = std::make_shared(); - library_ = std::make_shared(); - auto ni_fpga_session_repository = std::make_shared>(session_repository_); - fpgaService_ = std::make_shared(library_, ni_fpga_session_repository, FeatureToggles({}, CodeReadiness::kNextRelease)); - moniker_service_ = std::make_shared(); - server_ = start_server(); - nifpga_grpc::RegisterMonikerEndpoints(); - stub_ = nifpga_grpc::NiFpga::NewStub(server_->InProcessChannel(::grpc::ChannelArguments())); - moniker_service_stub_ = ni::data_monikers::DataMoniker::NewStub(server_->InProcessChannel(::grpc::ChannelArguments())); - Mock::AllowLeak(library_.get()); - - // TODO: Implement sideband socket thread when we could support testing sideband streaming inprocess - // sideband_socket_thread_ = new std::thread(RunSidebandSocketsAccept, "localhost", 50055); - } + NiFakeFpgaStreamingTests() + { + session_repository_ = std::make_shared(); + library_ = std::make_shared(); + auto ni_fpga_session_repository = std::make_shared>(session_repository_); + fpgaService_ = std::make_shared(library_, ni_fpga_session_repository, FeatureToggles({}, CodeReadiness::kNextRelease)); + moniker_service_ = std::make_shared(); + server_ = start_server(); + nifpga_grpc::RegisterMonikerEndpoints(); + stub_ = nifpga_grpc::NiFpga::NewStub(server_->InProcessChannel(::grpc::ChannelArguments())); + moniker_service_stub_ = ni::data_monikers::DataMoniker::NewStub(server_->InProcessChannel(::grpc::ChannelArguments())); + Mock::AllowLeak(library_.get()); + + // TODO: Implement sideband socket thread when we could support testing sideband streaming inprocess + // sideband_socket_thread_ = new std::thread(RunSidebandSocketsAccept, "localhost", 50055); + } virtual ~NiFakeFpgaStreamingTests() { @@ -87,7 +88,6 @@ class NiFakeFpgaStreamingTests : public ::testing::Test { return library_; } - std::unique_ptr<::grpc::Server> start_server() { ::grpc::ServerBuilder builder; @@ -130,11 +130,10 @@ TEST_F(NiFakeFpgaStreamingTests, StreamRead_scalar) auto stream = moniker_stub().get()->StreamRead(&moniker_context, read_requests); - for (int i = 0; i < 5; i++) - { + for (int i = 0; i < 5; i++) { // Read data - nifpga_grpc::ReadI32StreamingResponse read_value_i32; - nifpga_grpc::ReadI64StreamingResponse read_value_i64; + nifpga_grpc::MonikerReadI32Response read_value_i32; + nifpga_grpc::MonikerReadI64Response read_value_i64; ni::data_monikers::MonikerReadResponse read_result; stream->Read(&read_result); @@ -171,7 +170,6 @@ TEST_F(NiFakeFpgaStreamingTests, StreamRead_Array) auto begin_read_i64_response = nifpga_grpc::experimental::client::begin_read_array_i64(stub(), *session, 0, 9); auto read_moniker_i64 = new ni::data_monikers::Moniker(begin_read_i64_response.moniker()); - grpc::ClientContext moniker_context; ni::data_monikers::MonikerList read_requests; read_requests.mutable_read_monikers()->AddAllocated(read_moniker_i32); @@ -181,8 +179,8 @@ TEST_F(NiFakeFpgaStreamingTests, StreamRead_Array) for (int i = 0; i < 5; i++) { // Read data - nifpga_grpc::ReadArrayI32StreamingResponse read_values_i32; - nifpga_grpc::ReadArrayI64StreamingResponse read_values_i64; + nifpga_grpc::MonikerReadArrayI32Response read_values_i32; + nifpga_grpc::MonikerReadArrayI64Response read_values_i64; ni::data_monikers::MonikerReadResponse read_result; stream->Read(&read_result); @@ -199,7 +197,7 @@ TEST_F(NiFakeFpgaStreamingTests, StreamRead_Array) } TEST_F(NiFakeFpgaStreamingTests, StreamWrite_Array) -{ +{ // create some setup for writing auto session = std::make_unique(); std::vector data_int_i32 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; @@ -227,7 +225,6 @@ TEST_F(NiFakeFpgaStreamingTests, StreamWrite_Array) write_request.mutable_monikers()->mutable_write_monikers()->AddAllocated(write_moniker_i32); write_request.mutable_monikers()->mutable_write_monikers()->AddAllocated(write_moniker_i64); - auto write_stream = moniker_stub().get()->StreamWrite(&moniker_context); write_stream->Write(write_request); @@ -244,7 +241,6 @@ TEST_F(NiFakeFpgaStreamingTests, StreamWrite_Array) write_data_request.mutable_data()->add_values()->PackFrom(write_values_array_i64); write_stream->Write(write_data_request); - } write_stream->WritesDone(); @@ -264,7 +260,7 @@ TEST_F(NiFakeFpgaStreamingTests, StreamReadWrite_Array) // Set expectation on the mocked fpga lib method. EXPECT_CALL(*library(), WriteArrayI32(_, control, _, write_size_i32)) - .With(Args<2,3>(ElementsAreArray(write_data_int32))) + .With(Args<2, 3>(ElementsAreArray(write_data_int32))) .WillRepeatedly(::testing::Return(0)); EXPECT_CALL(*library(), WriteArrayI64(_, control, _, write_size_i64)) .With(Args<2, 3>(ElementsAreArray(write_data_int64))) @@ -288,7 +284,7 @@ TEST_F(NiFakeFpgaStreamingTests, StreamReadWrite_Array) auto begin_write_i64_response = nifpga_grpc::experimental::client::begin_write_array_i64(stub(), *session, control); auto write_moniker_i64 = new ni::data_monikers::Moniker(begin_write_i64_response.moniker()); - // Dont worry about deleting read_moniker_i32 and read_moniker_i64 since AddAllocated takes ownership of the ptr being passed in ensuring its destruction. + // Dont worry about deleting read_moniker_i32 and read_moniker_i64 since AddAllocated takes ownership of the ptr being passed in ensuring its destruction. auto begin_read_i32_array__response = nifpga_grpc::experimental::client::begin_read_array_i32(stub(), *session, 0, read_data_int32.size()); auto read_moniker_i32 = new ni::data_monikers::Moniker(begin_read_i32_array__response.moniker()); auto begin_read_i64_response = nifpga_grpc::experimental::client::begin_read_array_i64(stub(), *session, 0, read_data_int64.size()); @@ -301,7 +297,6 @@ TEST_F(NiFakeFpgaStreamingTests, StreamReadWrite_Array) write_request.mutable_monikers()->mutable_write_monikers()->AddAllocated(write_moniker_i32); write_request.mutable_monikers()->mutable_write_monikers()->AddAllocated(write_moniker_i64); - auto write_stream = moniker_stub().get()->StreamReadWrite(&moniker_context); write_stream->Write(write_request); @@ -319,8 +314,8 @@ TEST_F(NiFakeFpgaStreamingTests, StreamReadWrite_Array) write_stream->Write(write_data_request); - nifpga_grpc::ReadArrayI32StreamingResponse read_values_i32; - nifpga_grpc::ReadArrayI64StreamingResponse read_values_i64; + nifpga_grpc::MonikerReadArrayI32Response read_values_i32; + nifpga_grpc::MonikerReadArrayI64Response read_values_i64; ni::data_monikers::MonikerReadResponse read_result; write_stream->Read(&read_result); @@ -405,8 +400,8 @@ TEST_F(NiFakeFpgaStreamingTests, DISABLED_SidebandStreamReadWrite_Array) WriteSidebandMessage(sideband_token, write_data_request); - nifpga_grpc::ReadArrayI32StreamingResponse read_values_i32; - nifpga_grpc::ReadArrayI64StreamingResponse read_values_i64; + nifpga_grpc::MonikerReadArrayI32Response read_values_i32; + nifpga_grpc::MonikerReadArrayI64Response read_values_i64; ni::data_monikers::SidebandReadResponse read_result; ReadSidebandMessage(sideband_token, &read_result); From 0cfff780a64d137671db703fb9b75594dccf0286 Mon Sep 17 00:00:00 2001 From: Raghav Rawat Date: Tue, 26 Nov 2024 20:24:35 +0530 Subject: [PATCH 20/25] cleanup --- generated/nidaqmx/nidaqmx.proto | 39 +- generated/nidaqmx/nidaqmx_service.cpp | 42398 +++++++++-------- source/codegen/metadata/nidaqmx/functions.py | 2 + 3 files changed, 21414 insertions(+), 21025 deletions(-) diff --git a/generated/nidaqmx/nidaqmx.proto b/generated/nidaqmx/nidaqmx.proto index 279db727a..716e79568 100644 --- a/generated/nidaqmx/nidaqmx.proto +++ b/generated/nidaqmx/nidaqmx.proto @@ -11058,12 +11058,12 @@ message BeginWriteCtrFreqResponse { ni.data_monikers.Moniker moniker = 2; } -message WriteCtrFreqStreamingRequest { +message MonikerWriteCtrFreqRequest { repeated double frequency = 1; repeated double duty_cycle = 2; } -message WriteCtrFreqStreamingResponse { +message MonikerWriteCtrFreqResponse { int32 status = 1; int32 num_samps_per_chan_written = 2; } @@ -11091,12 +11091,12 @@ message BeginWriteCtrFreqScalarResponse { ni.data_monikers.Moniker moniker = 2; } -message WriteCtrFreqScalarStreamingRequest { +message MonikerWriteCtrFreqScalarRequest { double frequency = 1; double duty_cycle = 2; } -message WriteCtrFreqScalarStreamingResponse { +message MonikerWriteCtrFreqScalarResponse { int32 status = 1; } @@ -11134,12 +11134,12 @@ message BeginWriteCtrTicksResponse { ni.data_monikers.Moniker moniker = 2; } -message WriteCtrTicksStreamingRequest { +message MonikerWriteCtrTicksRequest { repeated uint32 high_ticks = 1; repeated uint32 low_ticks = 2; } -message WriteCtrTicksStreamingResponse { +message MonikerWriteCtrTicksResponse { int32 status = 1; int32 num_samps_per_chan_written = 2; } @@ -11167,12 +11167,12 @@ message BeginWriteCtrTicksScalarResponse { ni.data_monikers.Moniker moniker = 2; } -message WriteCtrTicksScalarStreamingRequest { +message MonikerWriteCtrTicksScalarRequest { uint32 high_ticks = 1; uint32 low_ticks = 2; } -message WriteCtrTicksScalarStreamingResponse { +message MonikerWriteCtrTicksScalarResponse { int32 status = 1; } @@ -11210,12 +11210,12 @@ message BeginWriteCtrTimeResponse { ni.data_monikers.Moniker moniker = 2; } -message WriteCtrTimeStreamingRequest { +message MonikerWriteCtrTimeRequest { repeated double high_time = 1; repeated double low_time = 2; } -message WriteCtrTimeStreamingResponse { +message MonikerWriteCtrTimeResponse { int32 status = 1; int32 num_samps_per_chan_written = 2; } @@ -11243,12 +11243,12 @@ message BeginWriteCtrTimeScalarResponse { ni.data_monikers.Moniker moniker = 2; } -message WriteCtrTimeScalarStreamingRequest { +message MonikerWriteCtrTimeScalarRequest { double high_time = 1; double low_time = 2; } -message WriteCtrTimeScalarStreamingResponse { +message MonikerWriteCtrTimeScalarResponse { int32 status = 1; } @@ -11285,11 +11285,11 @@ message BeginWriteDigitalLinesResponse { ni.data_monikers.Moniker moniker = 2; } -message WriteDigitalLinesStreamingRequest { +message MonikerWriteDigitalLinesRequest { bytes write_array = 1; } -message WriteDigitalLinesStreamingResponse { +message MonikerWriteDigitalLinesResponse { int32 status = 1; int32 samps_per_chan_written = 2; } @@ -11441,11 +11441,11 @@ message BeginWriteDigitalU8Response { ni.data_monikers.Moniker moniker = 2; } -message WriteDigitalU8StreamingRequest { +message MonikerWriteDigitalU8Request { bytes write_array = 1; } -message WriteDigitalU8StreamingResponse { +message MonikerWriteDigitalU8Response { int32 status = 1; int32 samps_per_chan_written = 2; } @@ -11472,15 +11472,14 @@ message BeginWriteRawRequest { message BeginWriteRawResponse { int32 status = 1; - int32 samps_per_chan_written = 2; - ni.data_monikers.Moniker moniker = 3; + ni.data_monikers.Moniker moniker = 2; } -message WriteRawStreamingRequest { +message MonikerWriteRawRequest { bytes write_array = 1; } -message WriteRawStreamingResponse { +message MonikerWriteRawResponse { int32 status = 1; int32 samps_per_chan_written = 2; } diff --git a/generated/nidaqmx/nidaqmx_service.cpp b/generated/nidaqmx/nidaqmx_service.cpp index 261e9c043..6670c122d 100644 --- a/generated/nidaqmx/nidaqmx_service.cpp +++ b/generated/nidaqmx/nidaqmx_service.cpp @@ -1,4 +1,4 @@ - +test //--------------------------------------------------------------------- // This file is automatically generated. All manual edits will be lost. //--------------------------------------------------------------------- @@ -6,23070 +6,23458 @@ //--------------------------------------------------------------------- #include "nidaqmx_service.h" -#include -#include -#include -#include - -#include +#include #include #include -#include +#include #include - +#include +#include +#include #include "nidaqmx_library.h" +#include namespace nidaqmx_grpc { -using nidevice_grpc::converters::allocate_output_storage; -using nidevice_grpc::converters::calculate_linked_array_size; -using nidevice_grpc::converters::convert_from_grpc; -using nidevice_grpc::converters::convert_to_grpc; -using nidevice_grpc::converters::MatchState; - -struct MonikerReadAnalogF64Data { - TaskHandle task; - int32 num_samps_per_chan; - float64 timeout; - int32 fill_mode; - uInt32 array_size_in_samps; - bool32* reserved; - nidaqmx_grpc::MonikerReadAnalogF64Response response; - std::shared_ptr library; -}; - -struct MonikerReadAnalogScalarF64Data { - TaskHandle task; - float64 timeout; - bool32* reserved; - nidaqmx_grpc::MonikerReadAnalogScalarF64Response response; - std::shared_ptr library; -}; - -struct MonikerReadBinaryI16Data { - TaskHandle task; - int32 num_samps_per_chan; - float64 timeout; - int32 fill_mode; - uInt32 array_size_in_samps; - bool32* reserved; - nidaqmx_grpc::MonikerReadBinaryI16Response response; - std::shared_ptr library; -}; - -struct MonikerReadBinaryI32Data { - TaskHandle task; - int32 num_samps_per_chan; - float64 timeout; - int32 fill_mode; - uInt32 array_size_in_samps; - bool32* reserved; - nidaqmx_grpc::MonikerReadBinaryI32Response response; - std::shared_ptr library; -}; - -struct MonikerReadBinaryU16Data { - TaskHandle task; - int32 num_samps_per_chan; - float64 timeout; - int32 fill_mode; - uInt32 array_size_in_samps; - bool32* reserved; - nidaqmx_grpc::MonikerReadBinaryU16Response response; - std::shared_ptr library; -}; - -struct MonikerReadBinaryU32Data { - TaskHandle task; - int32 num_samps_per_chan; - float64 timeout; - int32 fill_mode; - uInt32 array_size_in_samps; - bool32* reserved; - nidaqmx_grpc::MonikerReadBinaryU32Response response; - std::shared_ptr library; -}; - -struct MonikerReadCounterF64Data { - TaskHandle task; - int32 num_samps_per_chan; - float64 timeout; - uInt32 array_size_in_samps; - bool32* reserved; - nidaqmx_grpc::MonikerReadCounterF64Response response; - std::shared_ptr library; -}; - -struct MonikerReadCounterF64ExData { - TaskHandle task; - int32 num_samps_per_chan; - float64 timeout; - int32 fill_mode; - uInt32 array_size_in_samps; - bool32* reserved; - nidaqmx_grpc::MonikerReadCounterF64ExResponse response; - std::shared_ptr library; -}; - -struct MonikerReadCounterScalarF64Data { - TaskHandle task; - float64 timeout; - bool32* reserved; - nidaqmx_grpc::MonikerReadCounterScalarF64Response response; - std::shared_ptr library; -}; - -struct MonikerReadCounterScalarU32Data { - TaskHandle task; - float64 timeout; - bool32* reserved; - nidaqmx_grpc::MonikerReadCounterScalarU32Response response; - std::shared_ptr library; -}; - -struct MonikerReadCounterU32Data { - TaskHandle task; - int32 num_samps_per_chan; - float64 timeout; - uInt32 array_size_in_samps; - bool32* reserved; - nidaqmx_grpc::MonikerReadCounterU32Response response; - std::shared_ptr library; -}; - -struct MonikerReadCounterU32ExData { - TaskHandle task; - int32 num_samps_per_chan; - float64 timeout; - int32 fill_mode; - uInt32 array_size_in_samps; - bool32* reserved; - nidaqmx_grpc::MonikerReadCounterU32ExResponse response; - std::shared_ptr library; -}; - -struct MonikerReadCtrFreqData { - TaskHandle task; - int32 num_samps_per_chan; - float64 timeout; - int32 interleaved; - uInt32 array_size_in_samps; - bool32* reserved; - nidaqmx_grpc::MonikerReadCtrFreqResponse response; - std::shared_ptr library; -}; - -struct MonikerReadCtrFreqScalarData { - TaskHandle task; - float64 timeout; - bool32* reserved; - nidaqmx_grpc::MonikerReadCtrFreqScalarResponse response; - std::shared_ptr library; -}; - -struct MonikerReadCtrTicksData { - TaskHandle task; - int32 num_samps_per_chan; - float64 timeout; - int32 interleaved; - uInt32 array_size_in_samps; - bool32* reserved; - nidaqmx_grpc::MonikerReadCtrTicksResponse response; - std::shared_ptr library; -}; - -struct MonikerReadCtrTicksScalarData { - TaskHandle task; - float64 timeout; - bool32* reserved; - nidaqmx_grpc::MonikerReadCtrTicksScalarResponse response; - std::shared_ptr library; -}; - -struct MonikerReadCtrTimeData { - TaskHandle task; - int32 num_samps_per_chan; - float64 timeout; - int32 interleaved; - uInt32 array_size_in_samps; - bool32* reserved; - nidaqmx_grpc::MonikerReadCtrTimeResponse response; - std::shared_ptr library; -}; - -struct MonikerReadCtrTimeScalarData { - TaskHandle task; - float64 timeout; - bool32* reserved; - nidaqmx_grpc::MonikerReadCtrTimeScalarResponse response; - std::shared_ptr library; -}; - -struct MonikerReadDigitalLinesData { - TaskHandle task; - int32 num_samps_per_chan; - float64 timeout; - int32 fill_mode; - uInt32 array_size_in_bytes; - bool32* reserved; - nidaqmx_grpc::MonikerReadDigitalLinesResponse response; - std::shared_ptr library; -}; - -struct MonikerReadDigitalScalarU32Data { - TaskHandle task; - float64 timeout; - bool32* reserved; - nidaqmx_grpc::MonikerReadDigitalScalarU32Response response; - std::shared_ptr library; -}; - -struct MonikerReadDigitalU16Data { - TaskHandle task; - int32 num_samps_per_chan; - float64 timeout; - int32 fill_mode; - uInt32 array_size_in_samps; - bool32* reserved; - nidaqmx_grpc::MonikerReadDigitalU16Response response; - std::shared_ptr library; -}; - -struct MonikerReadDigitalU32Data { - TaskHandle task; - int32 num_samps_per_chan; - float64 timeout; - int32 fill_mode; - uInt32 array_size_in_samps; - bool32* reserved; - nidaqmx_grpc::MonikerReadDigitalU32Response response; - std::shared_ptr library; -}; - -struct MonikerReadDigitalU8Data { - TaskHandle task; - int32 num_samps_per_chan; - float64 timeout; - int32 fill_mode; - uInt32 array_size_in_samps; - bool32* reserved; - nidaqmx_grpc::MonikerReadDigitalU8Response response; - std::shared_ptr library; -}; - -struct MonikerReadPowerBinaryI16Data { - TaskHandle task; - int32 num_samps_per_chan; - float64 timeout; - int32 fill_mode; - uInt32 array_size_in_samps; - bool32* reserved; - nidaqmx_grpc::MonikerReadPowerBinaryI16Response response; - std::shared_ptr library; -}; - -struct MonikerReadPowerF64Data { - TaskHandle task; - int32 num_samps_per_chan; - float64 timeout; - int32 fill_mode; - uInt32 array_size_in_samps; - bool32* reserved; - nidaqmx_grpc::MonikerReadPowerF64Response response; - std::shared_ptr library; -}; - -struct MonikerReadPowerScalarF64Data { - TaskHandle task; - float64 timeout; - bool32* reserved; - nidaqmx_grpc::MonikerReadPowerScalarF64Response response; - std::shared_ptr library; -}; - -struct MonikerReadRawData { - TaskHandle task; - int32 num_samps_per_chan; - float64 timeout; - uInt32 array_size_in_bytes; - bool32* reserved; - nidaqmx_grpc::MonikerReadRawResponse response; - std::shared_ptr library; -}; - -struct MonikerWaitForNextSampleClockData { - TaskHandle task; - float64 timeout; - nidaqmx_grpc::MonikerWaitForNextSampleClockResponse response; - std::shared_ptr library; -}; - -struct MonikerWriteAnalogF64Data { - TaskHandle task; - int32 num_samps_per_chan; - bool32 auto_start; - float64 timeout; - int32 data_layout; - bool32* reserved; - nidaqmx_grpc::MonikerWriteAnalogF64Request request; - nidaqmx_grpc::MonikerWriteAnalogF64Response response; - std::shared_ptr library; -}; - -struct MonikerWriteAnalogScalarF64Data { - TaskHandle task; - bool32 auto_start; - float64 timeout; - bool32* reserved; - nidaqmx_grpc::MonikerWriteAnalogScalarF64Request request; - nidaqmx_grpc::MonikerWriteAnalogScalarF64Response response; - std::shared_ptr library; -}; - -struct MonikerWriteBinaryI16Data { - TaskHandle task; - int32 num_samps_per_chan; - bool32 auto_start; - float64 timeout; - int32 data_layout; - bool32* reserved; - nidaqmx_grpc::MonikerWriteBinaryI16Request request; - nidaqmx_grpc::MonikerWriteBinaryI16Response response; - std::shared_ptr library; -}; - -struct MonikerWriteBinaryI32Data { - TaskHandle task; - int32 num_samps_per_chan; - bool32 auto_start; - float64 timeout; - int32 data_layout; - bool32* reserved; - nidaqmx_grpc::MonikerWriteBinaryI32Request request; - nidaqmx_grpc::MonikerWriteBinaryI32Response response; - std::shared_ptr library; -}; - -struct MonikerWriteBinaryU16Data { - TaskHandle task; - int32 num_samps_per_chan; - bool32 auto_start; - float64 timeout; - int32 data_layout; - bool32* reserved; - nidaqmx_grpc::MonikerWriteBinaryU16Request request; - nidaqmx_grpc::MonikerWriteBinaryU16Response response; - std::shared_ptr library; -}; - -struct MonikerWriteBinaryU32Data { - TaskHandle task; - int32 num_samps_per_chan; - bool32 auto_start; - float64 timeout; - int32 data_layout; - bool32* reserved; - nidaqmx_grpc::MonikerWriteBinaryU32Request request; - nidaqmx_grpc::MonikerWriteBinaryU32Response response; - std::shared_ptr library; -}; - -struct MonikerWriteCtrFreqData { - TaskHandle task; - int32 num_samps_per_chan; - bool32 auto_start; - float64 timeout; - int32 data_layout; - bool32* reserved; - nidaqmx_grpc::WriteCtrFreqStreamingRequest request; - nidaqmx_grpc::WriteCtrFreqStreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerWriteCtrFreqScalarData { - TaskHandle task; - bool32 auto_start; - float64 timeout; - bool32* reserved; - nidaqmx_grpc::WriteCtrFreqScalarStreamingRequest request; - nidaqmx_grpc::WriteCtrFreqScalarStreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerWriteCtrTicksData { - TaskHandle task; - int32 num_samps_per_chan; - bool32 auto_start; - float64 timeout; - int32 data_layout; - bool32* reserved; - nidaqmx_grpc::WriteCtrTicksStreamingRequest request; - nidaqmx_grpc::WriteCtrTicksStreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerWriteCtrTicksScalarData { - TaskHandle task; - bool32 auto_start; - float64 timeout; - bool32* reserved; - nidaqmx_grpc::WriteCtrTicksScalarStreamingRequest request; - nidaqmx_grpc::WriteCtrTicksScalarStreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerWriteCtrTimeData { - TaskHandle task; - int32 num_samps_per_chan; - bool32 auto_start; - float64 timeout; - int32 data_layout; - bool32* reserved; - nidaqmx_grpc::WriteCtrTimeStreamingRequest request; - nidaqmx_grpc::WriteCtrTimeStreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerWriteCtrTimeScalarData { - TaskHandle task; - bool32 auto_start; - float64 timeout; - bool32* reserved; - nidaqmx_grpc::WriteCtrTimeScalarStreamingRequest request; - nidaqmx_grpc::WriteCtrTimeScalarStreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerWriteDigitalLinesData { - TaskHandle task; - int32 num_samps_per_chan; - bool32 auto_start; - float64 timeout; - int32 data_layout; - bool32* reserved; - nidaqmx_grpc::WriteDigitalLinesStreamingRequest request; - nidaqmx_grpc::WriteDigitalLinesStreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerWriteDigitalScalarU32Data { - TaskHandle task; - bool32 auto_start; - float64 timeout; - bool32* reserved; - nidaqmx_grpc::MonikerWriteDigitalScalarU32Request request; - nidaqmx_grpc::MonikerWriteDigitalScalarU32Response response; - std::shared_ptr library; -}; - -struct MonikerWriteDigitalU16Data { - TaskHandle task; - int32 num_samps_per_chan; - bool32 auto_start; - float64 timeout; - int32 data_layout; - bool32* reserved; - nidaqmx_grpc::MonikerWriteDigitalU16Request request; - nidaqmx_grpc::MonikerWriteDigitalU16Response response; - std::shared_ptr library; -}; - -struct MonikerWriteDigitalU32Data { - TaskHandle task; - int32 num_samps_per_chan; - bool32 auto_start; - float64 timeout; - int32 data_layout; - bool32* reserved; - nidaqmx_grpc::MonikerWriteDigitalU32Request request; - nidaqmx_grpc::MonikerWriteDigitalU32Response response; - std::shared_ptr library; -}; - -struct MonikerWriteDigitalU8Data { - TaskHandle task; - int32 num_samps_per_chan; - bool32 auto_start; - float64 timeout; - int32 data_layout; - bool32* reserved; - nidaqmx_grpc::WriteDigitalU8StreamingRequest request; - nidaqmx_grpc::WriteDigitalU8StreamingResponse response; - std::shared_ptr library; -}; - -struct MonikerWriteRawData { - TaskHandle task; - int32 num_samps; - bool32 auto_start; - float64 timeout; - bool32* reserved; - nidaqmx_grpc::WriteRawStreamingRequest request; - nidaqmx_grpc::WriteRawStreamingResponse response; - std::shared_ptr library; -}; - -const auto kErrorReadBufferTooSmall = -200229; -const auto kWarningCAPIStringTruncatedToFitBuffer = 200026; - -NiDAQmxService::NiDAQmxService( - LibrarySharedPtr library, - ResourceRepositorySharedPtr resource_repository, - const NiDAQmxFeatureToggles& feature_toggles) - : library_(library), - session_repository_(resource_repository), - feature_toggles_(feature_toggles) -{ -} + using nidevice_grpc::converters::allocate_output_storage; + using nidevice_grpc::converters::calculate_linked_array_size; + using nidevice_grpc::converters::convert_from_grpc; + using nidevice_grpc::converters::convert_to_grpc; + using nidevice_grpc::converters::MatchState; + + struct MonikerReadAnalogF64Data + { + TaskHandle task; + int32 num_samps_per_chan; + float64 timeout; + int32 fill_mode; + uInt32 array_size_in_samps; + bool32* reserved; + nidaqmx_grpc::MonikerReadAnalogF64Response response; + std::shared_ptr library; + }; -NiDAQmxService::~NiDAQmxService() -{ -} + struct MonikerReadAnalogScalarF64Data + { + TaskHandle task; + float64 timeout; + bool32* reserved; + nidaqmx_grpc::MonikerReadAnalogScalarF64Response response; + std::shared_ptr library; + }; -// 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; -} + struct MonikerReadBinaryI16Data + { + TaskHandle task; + int32 num_samps_per_chan; + float64 timeout; + int32 fill_mode; + uInt32 array_size_in_samps; + bool32* reserved; + nidaqmx_grpc::MonikerReadBinaryI16Response response; + std::shared_ptr library; + }; -void RegisterMonikerEndpoints() -{ - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadAnalogF64", MonikerReadAnalogF64); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadAnalogScalarF64", MonikerReadAnalogScalarF64); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadBinaryI16", MonikerReadBinaryI16); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadBinaryI32", MonikerReadBinaryI32); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadBinaryU16", MonikerReadBinaryU16); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadBinaryU32", MonikerReadBinaryU32); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadCounterF64", MonikerReadCounterF64); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadCounterF64Ex", MonikerReadCounterF64Ex); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadCounterScalarF64", MonikerReadCounterScalarF64); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadCounterScalarU32", MonikerReadCounterScalarU32); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadCounterU32", MonikerReadCounterU32); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadCounterU32Ex", MonikerReadCounterU32Ex); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadCtrFreq", MonikerReadCtrFreq); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadCtrFreqScalar", MonikerReadCtrFreqScalar); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadCtrTicks", MonikerReadCtrTicks); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadCtrTicksScalar", MonikerReadCtrTicksScalar); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadCtrTime", MonikerReadCtrTime); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadCtrTimeScalar", MonikerReadCtrTimeScalar); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadDigitalLines", MonikerReadDigitalLines); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadDigitalScalarU32", MonikerReadDigitalScalarU32); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadDigitalU16", MonikerReadDigitalU16); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadDigitalU32", MonikerReadDigitalU32); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadDigitalU8", MonikerReadDigitalU8); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadPowerBinaryI16", MonikerReadPowerBinaryI16); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadPowerF64", MonikerReadPowerF64); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadPowerScalarF64", MonikerReadPowerScalarF64); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadRaw", MonikerReadRaw); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWaitForNextSampleClock", MonikerWaitForNextSampleClock); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteAnalogF64", MonikerWriteAnalogF64); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteAnalogScalarF64", MonikerWriteAnalogScalarF64); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteBinaryI16", MonikerWriteBinaryI16); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteBinaryI32", MonikerWriteBinaryI32); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteBinaryU16", MonikerWriteBinaryU16); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteBinaryU32", MonikerWriteBinaryU32); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteCtrFreq", MonikerWriteCtrFreq); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteCtrFreqScalar", MonikerWriteCtrFreqScalar); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteCtrTicks", MonikerWriteCtrTicks); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteCtrTicksScalar", MonikerWriteCtrTicksScalar); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteCtrTime", MonikerWriteCtrTime); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteCtrTimeScalar", MonikerWriteCtrTimeScalar); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteDigitalLines", MonikerWriteDigitalLines); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteDigitalScalarU32", MonikerWriteDigitalScalarU32); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteDigitalU16", MonikerWriteDigitalU16); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteDigitalU32", MonikerWriteDigitalU32); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteDigitalU8", MonikerWriteDigitalU8); - ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteRaw", MonikerWriteRaw); -} + struct MonikerReadBinaryI32Data + { + TaskHandle task; + int32 num_samps_per_chan; + float64 timeout; + int32 fill_mode; + uInt32 array_size_in_samps; + bool32* reserved; + nidaqmx_grpc::MonikerReadBinaryI32Response response; + std::shared_ptr library; + }; -::grpc::Status MonikerReadAnalogF64(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) -{ - MonikerReadAnalogF64Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto num_samps_per_chan = function_data->num_samps_per_chan; - auto timeout = function_data->timeout; - auto fill_mode = function_data->fill_mode; - auto array_size_in_samps = function_data->array_size_in_samps; - auto reserved = function_data->reserved; - response->mutable_read_array()->Resize(array_size_in_samps, 0); - float64* read_array = response->mutable_read_array()->mutable_data(); - int32 samps_per_chan_read{}; - - auto status = library->ReadAnalogF64(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); - - if (status >= 0) { - response->set_status(status); - response->set_samps_per_chan_read(samps_per_chan_read); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; -} + struct MonikerReadBinaryU16Data + { + TaskHandle task; + int32 num_samps_per_chan; + float64 timeout; + int32 fill_mode; + uInt32 array_size_in_samps; + bool32* reserved; + nidaqmx_grpc::MonikerReadBinaryU16Response response; + std::shared_ptr library; + }; -::grpc::Status MonikerReadAnalogScalarF64(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) -{ - MonikerReadAnalogScalarF64Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto timeout = function_data->timeout; - auto reserved = function_data->reserved; - float64 value{}; + struct MonikerReadBinaryU32Data + { + TaskHandle task; + int32 num_samps_per_chan; + float64 timeout; + int32 fill_mode; + uInt32 array_size_in_samps; + bool32* reserved; + nidaqmx_grpc::MonikerReadBinaryU32Response response; + std::shared_ptr library; + }; - auto status = library->ReadAnalogScalarF64(task, timeout, &value, reserved); + struct MonikerReadCounterF64Data + { + TaskHandle task; + int32 num_samps_per_chan; + float64 timeout; + uInt32 array_size_in_samps; + bool32* reserved; + nidaqmx_grpc::MonikerReadCounterF64Response response; + std::shared_ptr library; + }; - if (status >= 0) { - response->set_status(status); - response->set_value(value); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; -} + struct MonikerReadCounterF64ExData + { + TaskHandle task; + int32 num_samps_per_chan; + float64 timeout; + int32 fill_mode; + uInt32 array_size_in_samps; + bool32* reserved; + nidaqmx_grpc::MonikerReadCounterF64ExResponse response; + std::shared_ptr library; + }; -::grpc::Status MonikerReadBinaryI16(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) -{ - MonikerReadBinaryI16Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto num_samps_per_chan = function_data->num_samps_per_chan; - auto timeout = function_data->timeout; - auto fill_mode = function_data->fill_mode; - auto array_size_in_samps = function_data->array_size_in_samps; - auto reserved = function_data->reserved; - std::vector read_array(array_size_in_samps); - int32 samps_per_chan_read{}; - - auto status = library->ReadBinaryI16(task, num_samps_per_chan, timeout, fill_mode, read_array.data(), array_size_in_samps, &samps_per_chan_read, reserved); - - if (status >= 0) { - response->set_status(status); - response->mutable_read_array()->Clear(); - response->mutable_read_array()->Reserve(array_size_in_samps); - std::transform( - read_array.begin(), - read_array.begin() + array_size_in_samps, - google::protobuf::RepeatedFieldBackInserter(response->mutable_read_array()), - [&](auto x) { - return x; - }); - response->set_samps_per_chan_read(samps_per_chan_read); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; -} + struct MonikerReadCounterScalarF64Data + { + TaskHandle task; + float64 timeout; + bool32* reserved; + nidaqmx_grpc::MonikerReadCounterScalarF64Response response; + std::shared_ptr library; + }; -::grpc::Status MonikerReadBinaryI32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) -{ - MonikerReadBinaryI32Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto num_samps_per_chan = function_data->num_samps_per_chan; - auto timeout = function_data->timeout; - auto fill_mode = function_data->fill_mode; - auto array_size_in_samps = function_data->array_size_in_samps; - auto reserved = function_data->reserved; - response->mutable_read_array()->Resize(array_size_in_samps, 0); - int32* read_array = reinterpret_cast(response->mutable_read_array()->mutable_data()); - int32 samps_per_chan_read{}; - - auto status = library->ReadBinaryI32(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); - - if (status >= 0) { - response->set_status(status); - response->set_samps_per_chan_read(samps_per_chan_read); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; -} + struct MonikerReadCounterScalarU32Data + { + TaskHandle task; + float64 timeout; + bool32* reserved; + nidaqmx_grpc::MonikerReadCounterScalarU32Response response; + std::shared_ptr library; + }; -::grpc::Status MonikerReadBinaryU16(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) -{ - MonikerReadBinaryU16Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto num_samps_per_chan = function_data->num_samps_per_chan; - auto timeout = function_data->timeout; - auto fill_mode = function_data->fill_mode; - auto array_size_in_samps = function_data->array_size_in_samps; - auto reserved = function_data->reserved; - std::vector read_array(array_size_in_samps); - int32 samps_per_chan_read{}; - - auto status = library->ReadBinaryU16(task, num_samps_per_chan, timeout, fill_mode, read_array.data(), array_size_in_samps, &samps_per_chan_read, reserved); - - if (status >= 0) { - response->set_status(status); - response->mutable_read_array()->Clear(); - response->mutable_read_array()->Reserve(array_size_in_samps); - std::transform( - read_array.begin(), - read_array.begin() + array_size_in_samps, - google::protobuf::RepeatedFieldBackInserter(response->mutable_read_array()), - [&](auto x) { - return x; - }); - response->set_samps_per_chan_read(samps_per_chan_read); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; -} + struct MonikerReadCounterU32Data + { + TaskHandle task; + int32 num_samps_per_chan; + float64 timeout; + uInt32 array_size_in_samps; + bool32* reserved; + nidaqmx_grpc::MonikerReadCounterU32Response response; + std::shared_ptr library; + }; -::grpc::Status MonikerReadBinaryU32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) -{ - MonikerReadBinaryU32Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto num_samps_per_chan = function_data->num_samps_per_chan; - auto timeout = function_data->timeout; - auto fill_mode = function_data->fill_mode; - auto array_size_in_samps = function_data->array_size_in_samps; - auto reserved = function_data->reserved; - response->mutable_read_array()->Resize(array_size_in_samps, 0); - uInt32* read_array = reinterpret_cast(response->mutable_read_array()->mutable_data()); - int32 samps_per_chan_read{}; - - auto status = library->ReadBinaryU32(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); - - if (status >= 0) { - response->set_status(status); - response->set_samps_per_chan_read(samps_per_chan_read); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; -} + struct MonikerReadCounterU32ExData + { + TaskHandle task; + int32 num_samps_per_chan; + float64 timeout; + int32 fill_mode; + uInt32 array_size_in_samps; + bool32* reserved; + nidaqmx_grpc::MonikerReadCounterU32ExResponse response; + std::shared_ptr library; + }; -::grpc::Status MonikerReadCounterF64(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) -{ - MonikerReadCounterF64Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto num_samps_per_chan = function_data->num_samps_per_chan; - auto timeout = function_data->timeout; - auto array_size_in_samps = function_data->array_size_in_samps; - auto reserved = function_data->reserved; - response->mutable_read_array()->Resize(array_size_in_samps, 0); - float64* read_array = response->mutable_read_array()->mutable_data(); - int32 samps_per_chan_read{}; - - auto status = library->ReadCounterF64(task, num_samps_per_chan, timeout, read_array, array_size_in_samps, &samps_per_chan_read, reserved); - - if (status >= 0) { - response->set_status(status); - response->set_samps_per_chan_read(samps_per_chan_read); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; -} + struct MonikerReadCtrFreqData + { + TaskHandle task; + int32 num_samps_per_chan; + float64 timeout; + int32 interleaved; + uInt32 array_size_in_samps; + bool32* reserved; + nidaqmx_grpc::MonikerReadCtrFreqResponse response; + std::shared_ptr library; + }; -::grpc::Status MonikerReadCounterF64Ex(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) -{ - MonikerReadCounterF64ExData* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto num_samps_per_chan = function_data->num_samps_per_chan; - auto timeout = function_data->timeout; - auto fill_mode = function_data->fill_mode; - auto array_size_in_samps = function_data->array_size_in_samps; - auto reserved = function_data->reserved; - response->mutable_read_array()->Resize(array_size_in_samps, 0); - float64* read_array = response->mutable_read_array()->mutable_data(); - int32 samps_per_chan_read{}; - - auto status = library->ReadCounterF64Ex(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); - - if (status >= 0) { - response->set_status(status); - response->set_samps_per_chan_read(samps_per_chan_read); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; -} + struct MonikerReadCtrFreqScalarData + { + TaskHandle task; + float64 timeout; + bool32* reserved; + nidaqmx_grpc::MonikerReadCtrFreqScalarResponse response; + std::shared_ptr library; + }; -::grpc::Status MonikerReadCounterScalarF64(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) -{ - MonikerReadCounterScalarF64Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto timeout = function_data->timeout; - auto reserved = function_data->reserved; - float64 value{}; + struct MonikerReadCtrTicksData + { + TaskHandle task; + int32 num_samps_per_chan; + float64 timeout; + int32 interleaved; + uInt32 array_size_in_samps; + bool32* reserved; + nidaqmx_grpc::MonikerReadCtrTicksResponse response; + std::shared_ptr library; + }; - auto status = library->ReadCounterScalarF64(task, timeout, &value, reserved); + struct MonikerReadCtrTicksScalarData + { + TaskHandle task; + float64 timeout; + bool32* reserved; + nidaqmx_grpc::MonikerReadCtrTicksScalarResponse response; + std::shared_ptr library; + }; - if (status >= 0) { - response->set_status(status); - response->set_value(value); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; -} + struct MonikerReadCtrTimeData + { + TaskHandle task; + int32 num_samps_per_chan; + float64 timeout; + int32 interleaved; + uInt32 array_size_in_samps; + bool32* reserved; + nidaqmx_grpc::MonikerReadCtrTimeResponse response; + std::shared_ptr library; + }; -::grpc::Status MonikerReadCounterScalarU32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) -{ - MonikerReadCounterScalarU32Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto timeout = function_data->timeout; - auto reserved = function_data->reserved; - uInt32 value{}; + struct MonikerReadCtrTimeScalarData + { + TaskHandle task; + float64 timeout; + bool32* reserved; + nidaqmx_grpc::MonikerReadCtrTimeScalarResponse response; + std::shared_ptr library; + }; - auto status = library->ReadCounterScalarU32(task, timeout, &value, reserved); + struct MonikerReadDigitalLinesData + { + TaskHandle task; + int32 num_samps_per_chan; + float64 timeout; + int32 fill_mode; + uInt32 array_size_in_bytes; + bool32* reserved; + nidaqmx_grpc::MonikerReadDigitalLinesResponse response; + std::shared_ptr library; + }; - if (status >= 0) { - response->set_status(status); - response->set_value(value); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; -} + struct MonikerReadDigitalScalarU32Data + { + TaskHandle task; + float64 timeout; + bool32* reserved; + nidaqmx_grpc::MonikerReadDigitalScalarU32Response response; + std::shared_ptr library; + }; -::grpc::Status MonikerReadCounterU32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) -{ - MonikerReadCounterU32Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto num_samps_per_chan = function_data->num_samps_per_chan; - auto timeout = function_data->timeout; - auto array_size_in_samps = function_data->array_size_in_samps; - auto reserved = function_data->reserved; - response->mutable_read_array()->Resize(array_size_in_samps, 0); - uInt32* read_array = reinterpret_cast(response->mutable_read_array()->mutable_data()); - int32 samps_per_chan_read{}; - - auto status = library->ReadCounterU32(task, num_samps_per_chan, timeout, read_array, array_size_in_samps, &samps_per_chan_read, reserved); - - if (status >= 0) { - response->set_status(status); - response->set_samps_per_chan_read(samps_per_chan_read); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; -} + struct MonikerReadDigitalU16Data + { + TaskHandle task; + int32 num_samps_per_chan; + float64 timeout; + int32 fill_mode; + uInt32 array_size_in_samps; + bool32* reserved; + nidaqmx_grpc::MonikerReadDigitalU16Response response; + std::shared_ptr library; + }; -::grpc::Status MonikerReadCounterU32Ex(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) -{ - MonikerReadCounterU32ExData* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto num_samps_per_chan = function_data->num_samps_per_chan; - auto timeout = function_data->timeout; - auto fill_mode = function_data->fill_mode; - auto array_size_in_samps = function_data->array_size_in_samps; - auto reserved = function_data->reserved; - response->mutable_read_array()->Resize(array_size_in_samps, 0); - uInt32* read_array = reinterpret_cast(response->mutable_read_array()->mutable_data()); - int32 samps_per_chan_read{}; - - auto status = library->ReadCounterU32Ex(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); - - if (status >= 0) { - response->set_status(status); - response->set_samps_per_chan_read(samps_per_chan_read); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; -} + struct MonikerReadDigitalU32Data + { + TaskHandle task; + int32 num_samps_per_chan; + float64 timeout; + int32 fill_mode; + uInt32 array_size_in_samps; + bool32* reserved; + nidaqmx_grpc::MonikerReadDigitalU32Response response; + std::shared_ptr library; + }; -::grpc::Status MonikerReadCtrFreq(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) -{ - MonikerReadCtrFreqData* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto num_samps_per_chan = function_data->num_samps_per_chan; - auto timeout = function_data->timeout; - auto interleaved = function_data->interleaved; - auto array_size_in_samps = function_data->array_size_in_samps; - auto reserved = function_data->reserved; - response->mutable_read_array_frequency()->Resize(array_size_in_samps, 0); - float64* read_array_frequency = response->mutable_read_array_frequency()->mutable_data(); - response->mutable_read_array_duty_cycle()->Resize(array_size_in_samps, 0); - float64* read_array_duty_cycle = response->mutable_read_array_duty_cycle()->mutable_data(); - int32 samps_per_chan_read{}; - - auto status = library->ReadCtrFreq(task, num_samps_per_chan, timeout, interleaved, read_array_frequency, read_array_duty_cycle, array_size_in_samps, &samps_per_chan_read, reserved); - - if (status >= 0) { - response->set_status(status); - response->set_samps_per_chan_read(samps_per_chan_read); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; -} + struct MonikerReadDigitalU8Data + { + TaskHandle task; + int32 num_samps_per_chan; + float64 timeout; + int32 fill_mode; + uInt32 array_size_in_samps; + bool32* reserved; + nidaqmx_grpc::MonikerReadDigitalU8Response response; + std::shared_ptr library; + }; -::grpc::Status MonikerReadCtrFreqScalar(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) -{ - MonikerReadCtrFreqScalarData* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto timeout = function_data->timeout; - auto reserved = function_data->reserved; - float64 frequency{}; - float64 duty_cycle{}; - - auto status = library->ReadCtrFreqScalar(task, timeout, &frequency, &duty_cycle, reserved); - - if (status >= 0) { - response->set_status(status); - response->set_frequency(frequency); - response->set_duty_cycle(duty_cycle); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; -} + struct MonikerReadPowerBinaryI16Data + { + TaskHandle task; + int32 num_samps_per_chan; + float64 timeout; + int32 fill_mode; + uInt32 array_size_in_samps; + bool32* reserved; + nidaqmx_grpc::MonikerReadPowerBinaryI16Response response; + std::shared_ptr library; + }; -::grpc::Status MonikerReadCtrTicks(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) -{ - MonikerReadCtrTicksData* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto num_samps_per_chan = function_data->num_samps_per_chan; - auto timeout = function_data->timeout; - auto interleaved = function_data->interleaved; - auto array_size_in_samps = function_data->array_size_in_samps; - auto reserved = function_data->reserved; - response->mutable_read_array_high_ticks()->Resize(array_size_in_samps, 0); - uInt32* read_array_high_ticks = reinterpret_cast(response->mutable_read_array_high_ticks()->mutable_data()); - response->mutable_read_array_low_ticks()->Resize(array_size_in_samps, 0); - uInt32* read_array_low_ticks = reinterpret_cast(response->mutable_read_array_low_ticks()->mutable_data()); - int32 samps_per_chan_read{}; - - auto status = library->ReadCtrTicks(task, num_samps_per_chan, timeout, interleaved, read_array_high_ticks, read_array_low_ticks, array_size_in_samps, &samps_per_chan_read, reserved); - - if (status >= 0) { - response->set_status(status); - response->set_samps_per_chan_read(samps_per_chan_read); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; -} + struct MonikerReadPowerF64Data + { + TaskHandle task; + int32 num_samps_per_chan; + float64 timeout; + int32 fill_mode; + uInt32 array_size_in_samps; + bool32* reserved; + nidaqmx_grpc::MonikerReadPowerF64Response response; + std::shared_ptr library; + }; -::grpc::Status MonikerReadCtrTicksScalar(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) -{ - MonikerReadCtrTicksScalarData* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto timeout = function_data->timeout; - auto reserved = function_data->reserved; - uInt32 high_ticks{}; - uInt32 low_ticks{}; - - auto status = library->ReadCtrTicksScalar(task, timeout, &high_ticks, &low_ticks, reserved); - - if (status >= 0) { - response->set_status(status); - response->set_high_ticks(high_ticks); - response->set_low_ticks(low_ticks); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; -} + struct MonikerReadPowerScalarF64Data + { + TaskHandle task; + float64 timeout; + bool32* reserved; + nidaqmx_grpc::MonikerReadPowerScalarF64Response response; + std::shared_ptr library; + }; -::grpc::Status MonikerReadCtrTime(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) -{ - MonikerReadCtrTimeData* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto num_samps_per_chan = function_data->num_samps_per_chan; - auto timeout = function_data->timeout; - auto interleaved = function_data->interleaved; - auto array_size_in_samps = function_data->array_size_in_samps; - auto reserved = function_data->reserved; - response->mutable_read_array_high_time()->Resize(array_size_in_samps, 0); - float64* read_array_high_time = response->mutable_read_array_high_time()->mutable_data(); - response->mutable_read_array_low_time()->Resize(array_size_in_samps, 0); - float64* read_array_low_time = response->mutable_read_array_low_time()->mutable_data(); - int32 samps_per_chan_read{}; - - auto status = library->ReadCtrTime(task, num_samps_per_chan, timeout, interleaved, read_array_high_time, read_array_low_time, array_size_in_samps, &samps_per_chan_read, reserved); - - if (status >= 0) { - response->set_status(status); - response->set_samps_per_chan_read(samps_per_chan_read); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; -} + struct MonikerReadRawData + { + TaskHandle task; + int32 num_samps_per_chan; + float64 timeout; + uInt32 array_size_in_bytes; + bool32* reserved; + nidaqmx_grpc::MonikerReadRawResponse response; + std::shared_ptr library; + }; -::grpc::Status MonikerReadCtrTimeScalar(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) -{ - MonikerReadCtrTimeScalarData* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto timeout = function_data->timeout; - auto reserved = function_data->reserved; - float64 high_time{}; - float64 low_time{}; - - auto status = library->ReadCtrTimeScalar(task, timeout, &high_time, &low_time, reserved); - - if (status >= 0) { - response->set_status(status); - response->set_high_time(high_time); - response->set_low_time(low_time); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; -} + struct MonikerWaitForNextSampleClockData + { + TaskHandle task; + float64 timeout; + nidaqmx_grpc::MonikerWaitForNextSampleClockResponse response; + std::shared_ptr library; + }; -::grpc::Status MonikerReadDigitalLines(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) -{ - MonikerReadDigitalLinesData* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto num_samps_per_chan = function_data->num_samps_per_chan; - auto timeout = function_data->timeout; - auto fill_mode = function_data->fill_mode; - auto array_size_in_bytes = function_data->array_size_in_bytes; - auto reserved = function_data->reserved; - std::string read_array(array_size_in_bytes, '\0'); - int32 samps_per_chan_read{}; - int32 num_bytes_per_samp{}; - - auto status = library->ReadDigitalLines(task, num_samps_per_chan, timeout, fill_mode, (uInt8*)read_array.data(), array_size_in_bytes, &samps_per_chan_read, &num_bytes_per_samp, reserved); - - if (status >= 0) { - response->set_status(status); - response->set_read_array(read_array); - response->set_samps_per_chan_read(samps_per_chan_read); - response->set_num_bytes_per_samp(num_bytes_per_samp); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; -} + struct MonikerWriteAnalogF64Data + { + TaskHandle task; + int32 num_samps_per_chan; + bool32 auto_start; + float64 timeout; + int32 data_layout; + bool32* reserved; + nidaqmx_grpc::MonikerWriteAnalogF64Request request; + nidaqmx_grpc::MonikerWriteAnalogF64Response response; + std::shared_ptr library; + }; -::grpc::Status MonikerReadDigitalScalarU32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) -{ - MonikerReadDigitalScalarU32Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto timeout = function_data->timeout; - auto reserved = function_data->reserved; - uInt32 value{}; + struct MonikerWriteAnalogScalarF64Data + { + TaskHandle task; + bool32 auto_start; + float64 timeout; + bool32* reserved; + nidaqmx_grpc::MonikerWriteAnalogScalarF64Request request; + nidaqmx_grpc::MonikerWriteAnalogScalarF64Response response; + std::shared_ptr library; + }; - auto status = library->ReadDigitalScalarU32(task, timeout, &value, reserved); + struct MonikerWriteBinaryI16Data + { + TaskHandle task; + int32 num_samps_per_chan; + bool32 auto_start; + float64 timeout; + int32 data_layout; + bool32* reserved; + nidaqmx_grpc::MonikerWriteBinaryI16Request request; + nidaqmx_grpc::MonikerWriteBinaryI16Response response; + std::shared_ptr library; + }; - if (status >= 0) { - response->set_status(status); - response->set_value(value); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; -} + struct MonikerWriteBinaryI32Data + { + TaskHandle task; + int32 num_samps_per_chan; + bool32 auto_start; + float64 timeout; + int32 data_layout; + bool32* reserved; + nidaqmx_grpc::MonikerWriteBinaryI32Request request; + nidaqmx_grpc::MonikerWriteBinaryI32Response response; + std::shared_ptr library; + }; -::grpc::Status MonikerReadDigitalU16(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) -{ - MonikerReadDigitalU16Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto num_samps_per_chan = function_data->num_samps_per_chan; - auto timeout = function_data->timeout; - auto fill_mode = function_data->fill_mode; - auto array_size_in_samps = function_data->array_size_in_samps; - auto reserved = function_data->reserved; - std::vector read_array(array_size_in_samps); - int32 samps_per_chan_read{}; - - auto status = library->ReadDigitalU16(task, num_samps_per_chan, timeout, fill_mode, read_array.data(), array_size_in_samps, &samps_per_chan_read, reserved); - - if (status >= 0) { - response->set_status(status); - response->mutable_read_array()->Clear(); - response->mutable_read_array()->Reserve(array_size_in_samps); - std::transform( - read_array.begin(), - read_array.begin() + array_size_in_samps, - google::protobuf::RepeatedFieldBackInserter(response->mutable_read_array()), - [&](auto x) { - return x; - }); - response->set_samps_per_chan_read(samps_per_chan_read); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; -} + struct MonikerWriteBinaryU16Data + { + TaskHandle task; + int32 num_samps_per_chan; + bool32 auto_start; + float64 timeout; + int32 data_layout; + bool32* reserved; + nidaqmx_grpc::MonikerWriteBinaryU16Request request; + nidaqmx_grpc::MonikerWriteBinaryU16Response response; + std::shared_ptr library; + }; -::grpc::Status MonikerReadDigitalU32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) -{ - MonikerReadDigitalU32Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto num_samps_per_chan = function_data->num_samps_per_chan; - auto timeout = function_data->timeout; - auto fill_mode = function_data->fill_mode; - auto array_size_in_samps = function_data->array_size_in_samps; - auto reserved = function_data->reserved; - response->mutable_read_array()->Resize(array_size_in_samps, 0); - uInt32* read_array = reinterpret_cast(response->mutable_read_array()->mutable_data()); - int32 samps_per_chan_read{}; - - auto status = library->ReadDigitalU32(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); - - if (status >= 0) { - response->set_status(status); - response->set_samps_per_chan_read(samps_per_chan_read); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; -} + struct MonikerWriteBinaryU32Data + { + TaskHandle task; + int32 num_samps_per_chan; + bool32 auto_start; + float64 timeout; + int32 data_layout; + bool32* reserved; + nidaqmx_grpc::MonikerWriteBinaryU32Request request; + nidaqmx_grpc::MonikerWriteBinaryU32Response response; + std::shared_ptr library; + }; -::grpc::Status MonikerReadDigitalU8(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) -{ - MonikerReadDigitalU8Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto num_samps_per_chan = function_data->num_samps_per_chan; - auto timeout = function_data->timeout; - auto fill_mode = function_data->fill_mode; - auto array_size_in_samps = function_data->array_size_in_samps; - auto reserved = function_data->reserved; - std::string read_array(array_size_in_samps, '\0'); - int32 samps_per_chan_read{}; - - auto status = library->ReadDigitalU8(task, num_samps_per_chan, timeout, fill_mode, (uInt8*)read_array.data(), array_size_in_samps, &samps_per_chan_read, reserved); - - if (status >= 0) { - response->set_status(status); - response->set_read_array(read_array); - response->set_samps_per_chan_read(samps_per_chan_read); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; -} + struct MonikerWriteCtrFreqData + { + TaskHandle task; + int32 num_samps_per_chan; + bool32 auto_start; + float64 timeout; + int32 data_layout; + bool32* reserved; + nidaqmx_grpc::MonikerWriteCtrFreqRequest request; + nidaqmx_grpc::MonikerWriteCtrFreqResponse response; + std::shared_ptr library; + }; -::grpc::Status MonikerReadPowerBinaryI16(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) -{ - MonikerReadPowerBinaryI16Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto num_samps_per_chan = function_data->num_samps_per_chan; - auto timeout = function_data->timeout; - auto fill_mode = function_data->fill_mode; - auto array_size_in_samps = function_data->array_size_in_samps; - auto reserved = function_data->reserved; - std::vector read_array_voltage(array_size_in_samps); - std::vector read_array_current(array_size_in_samps); - int32 samps_per_chan_read{}; - - auto status = library->ReadPowerBinaryI16(task, num_samps_per_chan, timeout, fill_mode, read_array_voltage.data(), read_array_current.data(), array_size_in_samps, &samps_per_chan_read, reserved); - - if (status >= 0) { - response->set_status(status); - response->mutable_read_array_voltage()->Clear(); - response->mutable_read_array_voltage()->Reserve(array_size_in_samps); - std::transform( - read_array_voltage.begin(), - read_array_voltage.begin() + array_size_in_samps, - google::protobuf::RepeatedFieldBackInserter(response->mutable_read_array_voltage()), - [&](auto x) { - return x; - }); - response->mutable_read_array_current()->Clear(); - response->mutable_read_array_current()->Reserve(array_size_in_samps); - std::transform( - read_array_current.begin(), - read_array_current.begin() + array_size_in_samps, - google::protobuf::RepeatedFieldBackInserter(response->mutable_read_array_current()), - [&](auto x) { - return x; - }); - response->set_samps_per_chan_read(samps_per_chan_read); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; -} + struct MonikerWriteCtrFreqScalarData + { + TaskHandle task; + bool32 auto_start; + float64 timeout; + bool32* reserved; + nidaqmx_grpc::MonikerWriteCtrFreqScalarRequest request; + nidaqmx_grpc::MonikerWriteCtrFreqScalarResponse response; + std::shared_ptr library; + }; -::grpc::Status MonikerReadPowerF64(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) -{ - MonikerReadPowerF64Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto num_samps_per_chan = function_data->num_samps_per_chan; - auto timeout = function_data->timeout; - auto fill_mode = function_data->fill_mode; - auto array_size_in_samps = function_data->array_size_in_samps; - auto reserved = function_data->reserved; - response->mutable_read_array_voltage()->Resize(array_size_in_samps, 0); - float64* read_array_voltage = response->mutable_read_array_voltage()->mutable_data(); - response->mutable_read_array_current()->Resize(array_size_in_samps, 0); - float64* read_array_current = response->mutable_read_array_current()->mutable_data(); - int32 samps_per_chan_read{}; - - auto status = library->ReadPowerF64(task, num_samps_per_chan, timeout, fill_mode, read_array_voltage, read_array_current, array_size_in_samps, &samps_per_chan_read, reserved); - - if (status >= 0) { - response->set_status(status); - response->set_samps_per_chan_read(samps_per_chan_read); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; -} + struct MonikerWriteCtrTicksData + { + TaskHandle task; + int32 num_samps_per_chan; + bool32 auto_start; + float64 timeout; + int32 data_layout; + bool32* reserved; + nidaqmx_grpc::MonikerWriteCtrTicksRequest request; + nidaqmx_grpc::MonikerWriteCtrTicksResponse response; + std::shared_ptr library; + }; -::grpc::Status MonikerReadPowerScalarF64(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) -{ - MonikerReadPowerScalarF64Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto timeout = function_data->timeout; - auto reserved = function_data->reserved; - float64 voltage{}; - float64 current{}; - - auto status = library->ReadPowerScalarF64(task, timeout, &voltage, ¤t, reserved); - - if (status >= 0) { - response->set_status(status); - response->set_voltage(voltage); - response->set_current(current); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; -} + struct MonikerWriteCtrTicksScalarData + { + TaskHandle task; + bool32 auto_start; + float64 timeout; + bool32* reserved; + nidaqmx_grpc::MonikerWriteCtrTicksScalarRequest request; + nidaqmx_grpc::MonikerWriteCtrTicksScalarResponse response; + std::shared_ptr library; + }; -::grpc::Status MonikerReadRaw(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) -{ - MonikerReadRawData* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto num_samps_per_chan = function_data->num_samps_per_chan; - auto timeout = function_data->timeout; - auto array_size_in_bytes = function_data->array_size_in_bytes; - auto reserved = function_data->reserved; - std::string read_array(array_size_in_bytes, '\0'); - int32 samps_read{}; - int32 num_bytes_per_samp{}; - - auto status = library->ReadRaw(task, num_samps_per_chan, timeout, (uInt8*)read_array.data(), array_size_in_bytes, &samps_read, &num_bytes_per_samp, reserved); - - if (status >= 0) { - response->set_status(status); - response->set_read_array(read_array); - response->set_samps_read(samps_read); - response->set_num_bytes_per_samp(num_bytes_per_samp); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; -} + struct MonikerWriteCtrTimeData + { + TaskHandle task; + int32 num_samps_per_chan; + bool32 auto_start; + float64 timeout; + int32 data_layout; + bool32* reserved; + nidaqmx_grpc::MonikerWriteCtrTimeRequest request; + nidaqmx_grpc::MonikerWriteCtrTimeResponse response; + std::shared_ptr library; + }; -::grpc::Status MonikerWaitForNextSampleClock(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) -{ - MonikerWaitForNextSampleClockData* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto timeout = function_data->timeout; - bool32 is_late{}; + struct MonikerWriteCtrTimeScalarData + { + TaskHandle task; + bool32 auto_start; + float64 timeout; + bool32* reserved; + nidaqmx_grpc::MonikerWriteCtrTimeScalarRequest request; + nidaqmx_grpc::MonikerWriteCtrTimeScalarResponse response; + std::shared_ptr library; + }; - auto status = library->WaitForNextSampleClock(task, timeout, &is_late); + struct MonikerWriteDigitalLinesData + { + TaskHandle task; + int32 num_samps_per_chan; + bool32 auto_start; + float64 timeout; + int32 data_layout; + bool32* reserved; + nidaqmx_grpc::MonikerWriteDigitalLinesRequest request; + nidaqmx_grpc::MonikerWriteDigitalLinesResponse response; + std::shared_ptr library; + }; - if (status >= 0) { - response->set_status(status); - response->set_is_late(is_late); - packedData.PackFrom(*response); - } - else { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; -} + struct MonikerWriteDigitalScalarU32Data + { + TaskHandle task; + bool32 auto_start; + float64 timeout; + bool32* reserved; + nidaqmx_grpc::MonikerWriteDigitalScalarU32Request request; + nidaqmx_grpc::MonikerWriteDigitalScalarU32Response response; + std::shared_ptr library; + }; -::grpc::Status MonikerWriteAnalogF64(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) -{ - MonikerWriteAnalogF64Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto num_samps_per_chan = function_data->num_samps_per_chan; - auto auto_start = function_data->auto_start; - auto timeout = function_data->timeout; - auto data_layout = function_data->data_layout; - auto reserved = function_data->reserved; - int32 samps_per_chan_written{}; - - WriteAnalogF64StreamingRequest* request; - packedData.UnpackTo(request); - auto write_array = const_cast(request->write_array().data()); - - auto status = library->WriteAnalogF64(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array, &samps_per_chan_written, reserved); - - if (status < 0) { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; -} + struct MonikerWriteDigitalU16Data + { + TaskHandle task; + int32 num_samps_per_chan; + bool32 auto_start; + float64 timeout; + int32 data_layout; + bool32* reserved; + nidaqmx_grpc::MonikerWriteDigitalU16Request request; + nidaqmx_grpc::MonikerWriteDigitalU16Response response; + std::shared_ptr library; + }; -::grpc::Status MonikerWriteAnalogScalarF64(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) -{ - MonikerWriteAnalogScalarF64Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto auto_start = function_data->auto_start; - auto timeout = function_data->timeout; - auto reserved = function_data->reserved; + struct MonikerWriteDigitalU32Data + { + TaskHandle task; + int32 num_samps_per_chan; + bool32 auto_start; + float64 timeout; + int32 data_layout; + bool32* reserved; + nidaqmx_grpc::MonikerWriteDigitalU32Request request; + nidaqmx_grpc::MonikerWriteDigitalU32Response response; + std::shared_ptr library; + }; - WriteAnalogScalarF64StreamingRequest* request; - packedData.UnpackTo(request); - float64 value = request->value(); + struct MonikerWriteDigitalU8Data + { + TaskHandle task; + int32 num_samps_per_chan; + bool32 auto_start; + float64 timeout; + int32 data_layout; + bool32* reserved; + nidaqmx_grpc::MonikerWriteDigitalU8Request request; + nidaqmx_grpc::MonikerWriteDigitalU8Response response; + std::shared_ptr library; + }; - auto status = library->WriteAnalogScalarF64(task, auto_start, timeout, value, reserved); + struct MonikerWriteRawData + { + TaskHandle task; + int32 num_samps; + bool32 auto_start; + float64 timeout; + bool32* reserved; + nidaqmx_grpc::MonikerWriteRawRequest request; + nidaqmx_grpc::MonikerWriteRawResponse response; + std::shared_ptr library; + }; - if (status < 0) { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; -} + const auto kErrorReadBufferTooSmall = -200229; + const auto kWarningCAPIStringTruncatedToFitBuffer = 200026; -::grpc::Status MonikerWriteBinaryI16(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) -{ - MonikerWriteBinaryI16Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto num_samps_per_chan = function_data->num_samps_per_chan; - auto auto_start = function_data->auto_start; - auto timeout = function_data->timeout; - auto data_layout = function_data->data_layout; - auto reserved = function_data->reserved; - int32 samps_per_chan_written{}; - - WriteBinaryI16StreamingRequest* request; - packedData.UnpackTo(request); - auto write_array_raw = request->write_array(); - auto write_array = std::vector(); - write_array.reserve(write_array_raw.size()); - std::transform( - write_array_raw.begin(), - write_array_raw.end(), - std::back_inserter(write_array), - [](auto x) { - if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { - std::string message("value "); - message.append(std::to_string(x)); - message.append(" doesn't fit in datatype "); - message.append("int16"); - throw nidevice_grpc::ValueOutOfRangeException(message); - } - return static_cast(x); - }); - - auto status = library->WriteBinaryI16(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array.data(), &samps_per_chan_written, reserved); - - if (status < 0) { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; -} + NiDAQmxService::NiDAQmxService( + LibrarySharedPtr library, + ResourceRepositorySharedPtr resource_repository, + const NiDAQmxFeatureToggles& feature_toggles) + : library_(library), + session_repository_(resource_repository), + feature_toggles_(feature_toggles) + { + } + + NiDAQmxService::~NiDAQmxService() + { + } + + // 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; + } + + void RegisterMonikerEndpoints() + { + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadAnalogF64", MonikerReadAnalogF64); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadAnalogScalarF64", MonikerReadAnalogScalarF64); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadBinaryI16", MonikerReadBinaryI16); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadBinaryI32", MonikerReadBinaryI32); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadBinaryU16", MonikerReadBinaryU16); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadBinaryU32", MonikerReadBinaryU32); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadCounterF64", MonikerReadCounterF64); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadCounterF64Ex", MonikerReadCounterF64Ex); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadCounterScalarF64", MonikerReadCounterScalarF64); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadCounterScalarU32", MonikerReadCounterScalarU32); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadCounterU32", MonikerReadCounterU32); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadCounterU32Ex", MonikerReadCounterU32Ex); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadCtrFreq", MonikerReadCtrFreq); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadCtrFreqScalar", MonikerReadCtrFreqScalar); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadCtrTicks", MonikerReadCtrTicks); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadCtrTicksScalar", MonikerReadCtrTicksScalar); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadCtrTime", MonikerReadCtrTime); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadCtrTimeScalar", MonikerReadCtrTimeScalar); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadDigitalLines", MonikerReadDigitalLines); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadDigitalScalarU32", MonikerReadDigitalScalarU32); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadDigitalU16", MonikerReadDigitalU16); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadDigitalU32", MonikerReadDigitalU32); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadDigitalU8", MonikerReadDigitalU8); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadPowerBinaryI16", MonikerReadPowerBinaryI16); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadPowerF64", MonikerReadPowerF64); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadPowerScalarF64", MonikerReadPowerScalarF64); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerReadRaw", MonikerReadRaw); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWaitForNextSampleClock", MonikerWaitForNextSampleClock); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteAnalogF64", MonikerWriteAnalogF64); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteAnalogScalarF64", MonikerWriteAnalogScalarF64); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteBinaryI16", MonikerWriteBinaryI16); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteBinaryI32", MonikerWriteBinaryI32); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteBinaryU16", MonikerWriteBinaryU16); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteBinaryU32", MonikerWriteBinaryU32); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteCtrFreq", MonikerWriteCtrFreq); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteCtrFreqScalar", MonikerWriteCtrFreqScalar); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteCtrTicks", MonikerWriteCtrTicks); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteCtrTicksScalar", MonikerWriteCtrTicksScalar); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteCtrTime", MonikerWriteCtrTime); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteCtrTimeScalar", MonikerWriteCtrTimeScalar); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteDigitalLines", MonikerWriteDigitalLines); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteDigitalScalarU32", MonikerWriteDigitalScalarU32); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteDigitalU16", MonikerWriteDigitalU16); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteDigitalU32", MonikerWriteDigitalU32); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteDigitalU8", MonikerWriteDigitalU8); + ni::data_monikers::DataMonikerService::RegisterMonikerEndpoint("MonikerWriteRaw", MonikerWriteRaw); + } -::grpc::Status MonikerWriteBinaryI32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) +::grpc::Status MonikerReadAnalogF64(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteBinaryI32Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto num_samps_per_chan = function_data->num_samps_per_chan; - auto auto_start = function_data->auto_start; - auto timeout = function_data->timeout; - auto data_layout = function_data->data_layout; - auto reserved = function_data->reserved; - int32 samps_per_chan_written{}; - - WriteBinaryI32StreamingRequest* request; - packedData.UnpackTo(request); - auto write_array = reinterpret_cast(request->write_array().data()); - - auto status = library->WriteBinaryI32(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array, &samps_per_chan_written, reserved); - - if (status < 0) { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; -} + MonikerReadAnalogF64Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto timeout = function_data->timeout; + auto fill_mode = function_data->fill_mode; + auto array_size_in_samps = function_data->array_size_in_samps; + auto reserved = function_data->reserved; + response->mutable_read_array()->Resize(array_size_in_samps, 0); + float64* read_array = response->mutable_read_array()->mutable_data(); + int32 samps_per_chan_read {}; -::grpc::Status MonikerWriteBinaryU16(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) -{ - MonikerWriteBinaryU16Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto num_samps_per_chan = function_data->num_samps_per_chan; - auto auto_start = function_data->auto_start; - auto timeout = function_data->timeout; - auto data_layout = function_data->data_layout; - auto reserved = function_data->reserved; - int32 samps_per_chan_written{}; - - WriteBinaryU16StreamingRequest* request; - packedData.UnpackTo(request); - auto write_array_raw = request->write_array(); - auto write_array = std::vector(); - write_array.reserve(write_array_raw.size()); - std::transform( - write_array_raw.begin(), - write_array_raw.end(), - std::back_inserter(write_array), - [](auto x) { - if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { - std::string message("value "); - message.append(std::to_string(x)); - message.append(" doesn't fit in datatype "); - message.append("uInt16"); - throw nidevice_grpc::ValueOutOfRangeException(message); - } - return static_cast(x); - }); - - auto status = library->WriteBinaryU16(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array.data(), &samps_per_chan_written, reserved); - - if (status < 0) { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; -} + auto status = library->ReadAnalogF64(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); -::grpc::Status MonikerWriteBinaryU32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) -{ - MonikerWriteBinaryU32Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto num_samps_per_chan = function_data->num_samps_per_chan; - auto auto_start = function_data->auto_start; - auto timeout = function_data->timeout; - auto data_layout = function_data->data_layout; - auto reserved = function_data->reserved; - int32 samps_per_chan_written{}; - - WriteBinaryU32StreamingRequest* request; - packedData.UnpackTo(request); - auto write_array = reinterpret_cast(request->write_array().data()); - - auto status = library->WriteBinaryU32(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array, &samps_per_chan_written, reserved); - - return ::grpc::Status::OK; + if (status >= 0) + { + response->set_status(status); + response->set_samps_per_chan_read(samps_per_chan_read); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } -::grpc::Status MonikerWriteDigitalScalarU32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) +::grpc::Status MonikerReadAnalogScalarF64(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteDigitalScalarU32Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto auto_start = function_data->auto_start; - auto timeout = function_data->timeout; - auto reserved = function_data->reserved; - - WriteDigitalScalarU32StreamingRequest* request; - packedData.UnpackTo(request); - uInt32 value = request->value(); + MonikerReadAnalogScalarF64Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto timeout = function_data->timeout; + auto reserved = function_data->reserved; + float64 value {}; - auto status = library->WriteDigitalScalarU32(task, auto_start, timeout, value, reserved); + auto status = library->ReadAnalogScalarF64(task, timeout, &value, reserved); - if (status < 0) { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; + if (status >= 0) + { + response->set_status(status); + response->set_value(value); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } + return ::grpc::Status::OK; } -::grpc::Status MonikerWriteDigitalU16(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) +::grpc::Status MonikerReadBinaryI16(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - MonikerWriteDigitalU16Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto num_samps_per_chan = function_data->num_samps_per_chan; - auto auto_start = function_data->auto_start; - auto timeout = function_data->timeout; - auto data_layout = function_data->data_layout; - auto reserved = function_data->reserved; - int32 samps_per_chan_written{}; - - WriteDigitalU16StreamingRequest* request; - packedData.UnpackTo(request); - auto write_array_raw = request->write_array(); - auto write_array = std::vector(); - write_array.reserve(write_array_raw.size()); - std::transform( - write_array_raw.begin(), - write_array_raw.end(), - std::back_inserter(write_array), - [](auto x) { - if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { - std::string message("value "); - message.append(std::to_string(x)); - message.append(" doesn't fit in datatype "); - message.append("uInt16"); - throw nidevice_grpc::ValueOutOfRangeException(message); - } - return static_cast(x); - }); - - auto status = library->WriteDigitalU16(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array.data(), &samps_per_chan_written, reserved); - - if (status < 0) { - return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); - } - return ::grpc::Status::OK; -} + MonikerReadBinaryI16Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto timeout = function_data->timeout; + auto fill_mode = function_data->fill_mode; + auto array_size_in_samps = function_data->array_size_in_samps; + auto reserved = function_data->reserved; + std::vector read_array(array_size_in_samps); + int32 samps_per_chan_read {}; -::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) -{ - MonikerWriteDigitalU32Data* function_data = static_cast(data); - auto library = function_data->library; - auto response = &function_data->response; - auto task = function_data->task; - auto num_samps_per_chan = function_data->num_samps_per_chan; - auto auto_start = function_data->auto_start; - auto timeout = function_data->timeout; - auto data_layout = function_data->data_layout; - auto reserved = function_data->reserved; - int32 samps_per_chan_written{}; - - WriteDigitalU32StreamingRequest* request; - packedData.UnpackTo(request); - auto write_array = reinterpret_cast(request->write_array().data()); - - auto status = library->WriteDigitalU32(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array, &samps_per_chan_written, reserved); - - return ::grpc::Status::OK; -} + auto status = library->ReadBinaryI16(task, num_samps_per_chan, timeout, fill_mode, read_array.data(), array_size_in_samps, &samps_per_chan_read, reserved); -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::AddCDAQSyncConnection(::grpc::ServerContext* context, const AddCDAQSyncConnectionRequest* request, AddCDAQSyncConnectionResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto port_list_mbcs = convert_from_grpc(request->port_list()); - auto port_list = port_list_mbcs.c_str(); - auto status = library_->AddCDAQSyncConnection(port_list); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + if (status >= 0) + { + response->set_status(status); + response->mutable_read_array()->Clear(); + response->mutable_read_array()->Reserve(array_size_in_samps); + std::transform( + read_array.begin(), + read_array.begin() + array_size_in_samps, + google::protobuf::RepeatedFieldBackInserter(response->mutable_read_array()), + [&](auto x) { + return x; + }); + response->set_samps_per_chan_read(samps_per_chan_read); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } - response->set_status(status); return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::AddGlobalChansToTask(::grpc::ServerContext* context, const AddGlobalChansToTaskRequest* request, AddGlobalChansToTaskResponse* response) +::grpc::Status MonikerReadBinaryI32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto channel_names_mbcs = convert_from_grpc(request->channel_names()); - auto channel_names = channel_names_mbcs.c_str(); - auto status = library_->AddGlobalChansToTask(task, channel_names); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); + MonikerReadBinaryI32Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto timeout = function_data->timeout; + auto fill_mode = function_data->fill_mode; + auto array_size_in_samps = function_data->array_size_in_samps; + auto reserved = function_data->reserved; + response->mutable_read_array()->Resize(array_size_in_samps, 0); + int32* read_array = reinterpret_cast(response->mutable_read_array()->mutable_data()); + int32 samps_per_chan_read {}; + + auto status = library->ReadBinaryI32(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); + + if (status >= 0) + { + response->set_status(status); + response->set_samps_per_chan_read(samps_per_chan_read); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::AddNetworkDevice(::grpc::ServerContext* context, const AddNetworkDeviceRequest* request, AddNetworkDeviceResponse* response) +::grpc::Status MonikerReadBinaryU16(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto ip_address_mbcs = convert_from_grpc(request->ip_address()); - auto ip_address = ip_address_mbcs.c_str(); - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - bool32 attempt_reservation = request->attempt_reservation(); - float64 timeout = request->timeout(); + MonikerReadBinaryU16Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto timeout = function_data->timeout; + auto fill_mode = function_data->fill_mode; + auto array_size_in_samps = function_data->array_size_in_samps; + auto reserved = function_data->reserved; + std::vector read_array(array_size_in_samps); + int32 samps_per_chan_read {}; - while (true) { - auto status = library_->AddNetworkDevice(ip_address, device_name, attempt_reservation, timeout, nullptr, 0); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - uInt32 device_name_out_buffer_size = status; + auto status = library->ReadBinaryU16(task, num_samps_per_chan, timeout, fill_mode, read_array.data(), array_size_in_samps, &samps_per_chan_read, reserved); - std::string device_name_out; - if (device_name_out_buffer_size > 0) { - device_name_out.resize(device_name_out_buffer_size - 1); - } - status = library_->AddNetworkDevice(ip_address, device_name, attempt_reservation, timeout, (char*)device_name_out.data(), device_name_out_buffer_size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(device_name_out_buffer_size)) { - // buffer is now too small, try again - continue; - } - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } + if (status >= 0) + { response->set_status(status); - std::string device_name_out_utf8; - convert_to_grpc(device_name_out, &device_name_out_utf8); - response->set_device_name_out(device_name_out_utf8); - nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_device_name_out())); - return ::grpc::Status::OK; + response->mutable_read_array()->Clear(); + response->mutable_read_array()->Reserve(array_size_in_samps); + std::transform( + read_array.begin(), + read_array.begin() + array_size_in_samps, + google::protobuf::RepeatedFieldBackInserter(response->mutable_read_array()), + [&](auto x) { + return x; + }); + response->set_samps_per_chan_read(samps_per_chan_read); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::AreConfiguredCDAQSyncPortsDisconnected(::grpc::ServerContext* context, const AreConfiguredCDAQSyncPortsDisconnectedRequest* request, AreConfiguredCDAQSyncPortsDisconnectedResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto chassis_devices_ports_mbcs = convert_from_grpc(request->chassis_devices_ports()); - auto chassis_devices_ports = chassis_devices_ports_mbcs.c_str(); - float64 timeout = request->timeout(); - bool32 disconnected_ports_exist{}; - auto status = library_->AreConfiguredCDAQSyncPortsDisconnected(chassis_devices_ports, timeout, &disconnected_ports_exist); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - response->set_disconnected_ports_exist(disconnected_ports_exist); return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::AutoConfigureCDAQSyncConnections(::grpc::ServerContext* context, const AutoConfigureCDAQSyncConnectionsRequest* request, AutoConfigureCDAQSyncConnectionsResponse* response) +::grpc::Status MonikerReadBinaryU32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto chassis_devices_ports_mbcs = convert_from_grpc(request->chassis_devices_ports()); - auto chassis_devices_ports = chassis_devices_ports_mbcs.c_str(); - float64 timeout = request->timeout(); - auto status = library_->AutoConfigureCDAQSyncConnections(chassis_devices_ports, timeout); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + MonikerReadBinaryU32Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto timeout = function_data->timeout; + auto fill_mode = function_data->fill_mode; + auto array_size_in_samps = function_data->array_size_in_samps; + auto reserved = function_data->reserved; + response->mutable_read_array()->Resize(array_size_in_samps, 0); + uInt32* read_array = reinterpret_cast(response->mutable_read_array()->mutable_data()); + int32 samps_per_chan_read {}; -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CalculateReversePolyCoeff(::grpc::ServerContext* context, const CalculateReversePolyCoeffRequest* request, CalculateReversePolyCoeffResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto forward_coeffs = const_cast(request->forward_coeffs().data()); - uInt32 num_forward_coeffs_in = static_cast(request->forward_coeffs().size()); - float64 min_val_x = request->min_val_x(); - float64 max_val_x = request->max_val_x(); - int32 num_points_to_compute = request->num_points_to_compute(); - int32 reverse_poly_order = request->reverse_poly_order(); - response->mutable_reverse_coeffs()->Resize((reverse_poly_order < 0) ? num_forward_coeffs_in : reverse_poly_order + 1, 0); - float64* reverse_coeffs = response->mutable_reverse_coeffs()->mutable_data(); - auto status = library_->CalculateReversePolyCoeff(forward_coeffs, num_forward_coeffs_in, min_val_x, max_val_x, num_points_to_compute, reverse_poly_order, reverse_coeffs); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); + auto status = library->ReadBinaryU32(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); + + if (status >= 0) + { + response->set_status(status); + response->set_samps_per_chan_read(samps_per_chan_read); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CfgAnlgEdgeRefTrig(::grpc::ServerContext* context, const CfgAnlgEdgeRefTrigRequest* request, CfgAnlgEdgeRefTrigResponse* response) +::grpc::Status MonikerReadCounterF64(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto trigger_source_mbcs = convert_from_grpc(request->trigger_source()); - auto trigger_source = trigger_source_mbcs.c_str(); - int32 trigger_slope; - switch (request->trigger_slope_enum_case()) { - case nidaqmx_grpc::CfgAnlgEdgeRefTrigRequest::TriggerSlopeEnumCase::kTriggerSlope: { - trigger_slope = static_cast(request->trigger_slope()); - break; - } - case nidaqmx_grpc::CfgAnlgEdgeRefTrigRequest::TriggerSlopeEnumCase::kTriggerSlopeRaw: { - trigger_slope = static_cast(request->trigger_slope_raw()); - break; - } - case nidaqmx_grpc::CfgAnlgEdgeRefTrigRequest::TriggerSlopeEnumCase::TRIGGER_SLOPE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for trigger_slope was not specified or out of range"); - break; - } - } + MonikerReadCounterF64Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto timeout = function_data->timeout; + auto array_size_in_samps = function_data->array_size_in_samps; + auto reserved = function_data->reserved; + response->mutable_read_array()->Resize(array_size_in_samps, 0); + float64* read_array = response->mutable_read_array()->mutable_data(); + int32 samps_per_chan_read {}; + + auto status = library->ReadCounterF64(task, num_samps_per_chan, timeout, read_array, array_size_in_samps, &samps_per_chan_read, reserved); - float64 trigger_level = request->trigger_level(); - uInt32 pretrigger_samples = request->pretrigger_samples(); - auto status = library_->CfgAnlgEdgeRefTrig(task, trigger_source, trigger_slope, trigger_level, pretrigger_samples); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + if (status >= 0) + { + response->set_status(status); + response->set_samps_per_chan_read(samps_per_chan_read); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } - response->set_status(status); return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CfgAnlgEdgeStartTrig(::grpc::ServerContext* context, const CfgAnlgEdgeStartTrigRequest* request, CfgAnlgEdgeStartTrigResponse* response) +::grpc::Status MonikerReadCounterF64Ex(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto trigger_source_mbcs = convert_from_grpc(request->trigger_source()); - auto trigger_source = trigger_source_mbcs.c_str(); - int32 trigger_slope; - switch (request->trigger_slope_enum_case()) { - case nidaqmx_grpc::CfgAnlgEdgeStartTrigRequest::TriggerSlopeEnumCase::kTriggerSlope: { - trigger_slope = static_cast(request->trigger_slope()); - break; - } - case nidaqmx_grpc::CfgAnlgEdgeStartTrigRequest::TriggerSlopeEnumCase::kTriggerSlopeRaw: { - trigger_slope = static_cast(request->trigger_slope_raw()); - break; - } - case nidaqmx_grpc::CfgAnlgEdgeStartTrigRequest::TriggerSlopeEnumCase::TRIGGER_SLOPE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for trigger_slope was not specified or out of range"); - break; - } - } + MonikerReadCounterF64ExData* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto timeout = function_data->timeout; + auto fill_mode = function_data->fill_mode; + auto array_size_in_samps = function_data->array_size_in_samps; + auto reserved = function_data->reserved; + response->mutable_read_array()->Resize(array_size_in_samps, 0); + float64* read_array = response->mutable_read_array()->mutable_data(); + int32 samps_per_chan_read {}; - float64 trigger_level = request->trigger_level(); - auto status = library_->CfgAnlgEdgeStartTrig(task, trigger_source, trigger_slope, trigger_level); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + auto status = library->ReadCounterF64Ex(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); + + if (status >= 0) + { + response->set_status(status); + response->set_samps_per_chan_read(samps_per_chan_read); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } - response->set_status(status); return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CfgAnlgMultiEdgeRefTrig(::grpc::ServerContext* context, const CfgAnlgMultiEdgeRefTrigRequest* request, CfgAnlgMultiEdgeRefTrigResponse* response) +::grpc::Status MonikerReadCounterScalarF64(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto trigger_sources_mbcs = convert_from_grpc(request->trigger_sources()); - auto trigger_sources = trigger_sources_mbcs.c_str(); - auto trigger_slope_array_vector = std::vector(); - trigger_slope_array_vector.reserve(request->trigger_slope_array().size()); - std::transform( - request->trigger_slope_array().begin(), - request->trigger_slope_array().end(), - std::back_inserter(trigger_slope_array_vector), - [](auto x) { return x; }); - auto trigger_slope_array = trigger_slope_array_vector.data(); + MonikerReadCounterScalarF64Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto timeout = function_data->timeout; + auto reserved = function_data->reserved; + float64 value {}; - auto trigger_level_array = const_cast(request->trigger_level_array().data()); - uInt32 pretrigger_samples = request->pretrigger_samples(); - auto array_size_determine_from_sizes = std::array{ - request->trigger_slope_array_size(), - request->trigger_level_array_size()}; - const auto array_size_size_calculation = calculate_linked_array_size(array_size_determine_from_sizes, false); + auto status = library->ReadCounterScalarF64(task, timeout, &value, reserved); - if (array_size_size_calculation.match_state == MatchState::MISMATCH) { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The sizes of linked repeated fields [trigger_slope_array, trigger_level_array] do not match"); + if (status >= 0) + { + response->set_status(status); + response->set_value(value); + packedData.PackFrom(*response); } - auto array_size = array_size_size_calculation.size; - - auto status = library_->CfgAnlgMultiEdgeRefTrig(task, trigger_sources, trigger_slope_array, trigger_level_array, pretrigger_samples, array_size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } - response->set_status(status); return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CfgAnlgMultiEdgeStartTrig(::grpc::ServerContext* context, const CfgAnlgMultiEdgeStartTrigRequest* request, CfgAnlgMultiEdgeStartTrigResponse* response) +::grpc::Status MonikerReadCounterScalarU32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto trigger_sources_mbcs = convert_from_grpc(request->trigger_sources()); - auto trigger_sources = trigger_sources_mbcs.c_str(); - auto trigger_slope_array_vector = std::vector(); - trigger_slope_array_vector.reserve(request->trigger_slope_array().size()); - std::transform( - request->trigger_slope_array().begin(), - request->trigger_slope_array().end(), - std::back_inserter(trigger_slope_array_vector), - [](auto x) { return x; }); - auto trigger_slope_array = trigger_slope_array_vector.data(); + MonikerReadCounterScalarU32Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto timeout = function_data->timeout; + auto reserved = function_data->reserved; + uInt32 value {}; - auto trigger_level_array = const_cast(request->trigger_level_array().data()); - auto array_size_determine_from_sizes = std::array{ - request->trigger_slope_array_size(), - request->trigger_level_array_size()}; - const auto array_size_size_calculation = calculate_linked_array_size(array_size_determine_from_sizes, false); + auto status = library->ReadCounterScalarU32(task, timeout, &value, reserved); - if (array_size_size_calculation.match_state == MatchState::MISMATCH) { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The sizes of linked repeated fields [trigger_slope_array, trigger_level_array] do not match"); + if (status >= 0) + { + response->set_status(status); + response->set_value(value); + packedData.PackFrom(*response); } - auto array_size = array_size_size_calculation.size; - - auto status = library_->CfgAnlgMultiEdgeStartTrig(task, trigger_sources, trigger_slope_array, trigger_level_array, array_size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } - response->set_status(status); return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CfgAnlgWindowRefTrig(::grpc::ServerContext* context, const CfgAnlgWindowRefTrigRequest* request, CfgAnlgWindowRefTrigResponse* response) +::grpc::Status MonikerReadCounterU32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto trigger_source_mbcs = convert_from_grpc(request->trigger_source()); - auto trigger_source = trigger_source_mbcs.c_str(); - int32 trigger_when; - switch (request->trigger_when_enum_case()) { - case nidaqmx_grpc::CfgAnlgWindowRefTrigRequest::TriggerWhenEnumCase::kTriggerWhen: { - trigger_when = static_cast(request->trigger_when()); - break; - } - case nidaqmx_grpc::CfgAnlgWindowRefTrigRequest::TriggerWhenEnumCase::kTriggerWhenRaw: { - trigger_when = static_cast(request->trigger_when_raw()); - break; - } - case nidaqmx_grpc::CfgAnlgWindowRefTrigRequest::TriggerWhenEnumCase::TRIGGER_WHEN_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for trigger_when was not specified or out of range"); - break; - } - } - - float64 window_top = request->window_top(); - float64 window_bottom = request->window_bottom(); - uInt32 pretrigger_samples = request->pretrigger_samples(); - auto status = library_->CfgAnlgWindowRefTrig(task, trigger_source, trigger_when, window_top, window_bottom, pretrigger_samples); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); + MonikerReadCounterU32Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto timeout = function_data->timeout; + auto array_size_in_samps = function_data->array_size_in_samps; + auto reserved = function_data->reserved; + response->mutable_read_array()->Resize(array_size_in_samps, 0); + uInt32* read_array = reinterpret_cast(response->mutable_read_array()->mutable_data()); + int32 samps_per_chan_read {}; + + auto status = library->ReadCounterU32(task, num_samps_per_chan, timeout, read_array, array_size_in_samps, &samps_per_chan_read, reserved); + + if (status >= 0) + { + response->set_status(status); + response->set_samps_per_chan_read(samps_per_chan_read); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CfgAnlgWindowStartTrig(::grpc::ServerContext* context, const CfgAnlgWindowStartTrigRequest* request, CfgAnlgWindowStartTrigResponse* response) +::grpc::Status MonikerReadCounterU32Ex(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto trigger_source_mbcs = convert_from_grpc(request->trigger_source()); - auto trigger_source = trigger_source_mbcs.c_str(); - int32 trigger_when; - switch (request->trigger_when_enum_case()) { - case nidaqmx_grpc::CfgAnlgWindowStartTrigRequest::TriggerWhenEnumCase::kTriggerWhen: { - trigger_when = static_cast(request->trigger_when()); - break; - } - case nidaqmx_grpc::CfgAnlgWindowStartTrigRequest::TriggerWhenEnumCase::kTriggerWhenRaw: { - trigger_when = static_cast(request->trigger_when_raw()); - break; - } - case nidaqmx_grpc::CfgAnlgWindowStartTrigRequest::TriggerWhenEnumCase::TRIGGER_WHEN_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for trigger_when was not specified or out of range"); - break; - } - } + MonikerReadCounterU32ExData* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto timeout = function_data->timeout; + auto fill_mode = function_data->fill_mode; + auto array_size_in_samps = function_data->array_size_in_samps; + auto reserved = function_data->reserved; + response->mutable_read_array()->Resize(array_size_in_samps, 0); + uInt32* read_array = reinterpret_cast(response->mutable_read_array()->mutable_data()); + int32 samps_per_chan_read {}; + + auto status = library->ReadCounterU32Ex(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); - float64 window_top = request->window_top(); - float64 window_bottom = request->window_bottom(); - auto status = library_->CfgAnlgWindowStartTrig(task, trigger_source, trigger_when, window_top, window_bottom); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + if (status >= 0) + { + response->set_status(status); + response->set_samps_per_chan_read(samps_per_chan_read); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } - response->set_status(status); return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CfgBurstHandshakingTimingExportClock(::grpc::ServerContext* context, const CfgBurstHandshakingTimingExportClockRequest* request, CfgBurstHandshakingTimingExportClockResponse* response) +::grpc::Status MonikerReadCtrFreq(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 sample_mode; - switch (request->sample_mode_enum_case()) { - case nidaqmx_grpc::CfgBurstHandshakingTimingExportClockRequest::SampleModeEnumCase::kSampleMode: { - sample_mode = static_cast(request->sample_mode()); - break; - } - case nidaqmx_grpc::CfgBurstHandshakingTimingExportClockRequest::SampleModeEnumCase::kSampleModeRaw: { - sample_mode = static_cast(request->sample_mode_raw()); - break; - } - case nidaqmx_grpc::CfgBurstHandshakingTimingExportClockRequest::SampleModeEnumCase::SAMPLE_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sample_mode was not specified or out of range"); - break; - } - } - - uInt64 samps_per_chan = request->samps_per_chan(); - float64 sample_clk_rate = request->sample_clk_rate(); - auto sample_clk_outp_term_mbcs = convert_from_grpc(request->sample_clk_outp_term()); - auto sample_clk_outp_term = sample_clk_outp_term_mbcs.c_str(); - int32 sample_clk_pulse_polarity; - switch (request->sample_clk_pulse_polarity_enum_case()) { - case nidaqmx_grpc::CfgBurstHandshakingTimingExportClockRequest::SampleClkPulsePolarityEnumCase::kSampleClkPulsePolarity: { - sample_clk_pulse_polarity = static_cast(request->sample_clk_pulse_polarity()); - break; - } - case nidaqmx_grpc::CfgBurstHandshakingTimingExportClockRequest::SampleClkPulsePolarityEnumCase::kSampleClkPulsePolarityRaw: { - sample_clk_pulse_polarity = static_cast(request->sample_clk_pulse_polarity_raw()); - break; - } - case nidaqmx_grpc::CfgBurstHandshakingTimingExportClockRequest::SampleClkPulsePolarityEnumCase::SAMPLE_CLK_PULSE_POLARITY_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sample_clk_pulse_polarity was not specified or out of range"); - break; - } - } + MonikerReadCtrFreqData* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto timeout = function_data->timeout; + auto interleaved = function_data->interleaved; + auto array_size_in_samps = function_data->array_size_in_samps; + auto reserved = function_data->reserved; + response->mutable_read_array_frequency()->Resize(array_size_in_samps, 0); + float64* read_array_frequency = response->mutable_read_array_frequency()->mutable_data(); + response->mutable_read_array_duty_cycle()->Resize(array_size_in_samps, 0); + float64* read_array_duty_cycle = response->mutable_read_array_duty_cycle()->mutable_data(); + int32 samps_per_chan_read {}; - int32 pause_when; - switch (request->pause_when_enum_case()) { - case nidaqmx_grpc::CfgBurstHandshakingTimingExportClockRequest::PauseWhenEnumCase::kPauseWhen: { - pause_when = static_cast(request->pause_when()); - break; - } - case nidaqmx_grpc::CfgBurstHandshakingTimingExportClockRequest::PauseWhenEnumCase::kPauseWhenRaw: { - pause_when = static_cast(request->pause_when_raw()); - break; - } - case nidaqmx_grpc::CfgBurstHandshakingTimingExportClockRequest::PauseWhenEnumCase::PAUSE_WHEN_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for pause_when was not specified or out of range"); - break; - } - } + auto status = library->ReadCtrFreq(task, num_samps_per_chan, timeout, interleaved, read_array_frequency, read_array_duty_cycle, array_size_in_samps, &samps_per_chan_read, reserved); - int32 ready_event_active_level; - switch (request->ready_event_active_level_enum_case()) { - case nidaqmx_grpc::CfgBurstHandshakingTimingExportClockRequest::ReadyEventActiveLevelEnumCase::kReadyEventActiveLevel: { - ready_event_active_level = static_cast(request->ready_event_active_level()); - break; - } - case nidaqmx_grpc::CfgBurstHandshakingTimingExportClockRequest::ReadyEventActiveLevelEnumCase::kReadyEventActiveLevelRaw: { - ready_event_active_level = static_cast(request->ready_event_active_level_raw()); - break; - } - case nidaqmx_grpc::CfgBurstHandshakingTimingExportClockRequest::ReadyEventActiveLevelEnumCase::READY_EVENT_ACTIVE_LEVEL_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for ready_event_active_level was not specified or out of range"); - break; - } + if (status >= 0) + { + response->set_status(status); + response->set_samps_per_chan_read(samps_per_chan_read); + packedData.PackFrom(*response); } - - auto status = library_->CfgBurstHandshakingTimingExportClock(task, sample_mode, samps_per_chan, sample_clk_rate, sample_clk_outp_term, sample_clk_pulse_polarity, pause_when, ready_event_active_level); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } - response->set_status(status); return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CfgBurstHandshakingTimingImportClock(::grpc::ServerContext* context, const CfgBurstHandshakingTimingImportClockRequest* request, CfgBurstHandshakingTimingImportClockResponse* response) +::grpc::Status MonikerReadCtrFreqScalar(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 sample_mode; - switch (request->sample_mode_enum_case()) { - case nidaqmx_grpc::CfgBurstHandshakingTimingImportClockRequest::SampleModeEnumCase::kSampleMode: { - sample_mode = static_cast(request->sample_mode()); - break; - } - case nidaqmx_grpc::CfgBurstHandshakingTimingImportClockRequest::SampleModeEnumCase::kSampleModeRaw: { - sample_mode = static_cast(request->sample_mode_raw()); - break; - } - case nidaqmx_grpc::CfgBurstHandshakingTimingImportClockRequest::SampleModeEnumCase::SAMPLE_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sample_mode was not specified or out of range"); - break; - } - } + MonikerReadCtrFreqScalarData* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto timeout = function_data->timeout; + auto reserved = function_data->reserved; + float64 frequency {}; + float64 duty_cycle {}; - uInt64 samps_per_chan = request->samps_per_chan(); - float64 sample_clk_rate = request->sample_clk_rate(); - auto sample_clk_src_mbcs = convert_from_grpc(request->sample_clk_src()); - auto sample_clk_src = sample_clk_src_mbcs.c_str(); - int32 sample_clk_active_edge; - switch (request->sample_clk_active_edge_enum_case()) { - case nidaqmx_grpc::CfgBurstHandshakingTimingImportClockRequest::SampleClkActiveEdgeEnumCase::kSampleClkActiveEdge: { - sample_clk_active_edge = static_cast(request->sample_clk_active_edge()); - break; - } - case nidaqmx_grpc::CfgBurstHandshakingTimingImportClockRequest::SampleClkActiveEdgeEnumCase::kSampleClkActiveEdgeRaw: { - sample_clk_active_edge = static_cast(request->sample_clk_active_edge_raw()); - break; - } - case nidaqmx_grpc::CfgBurstHandshakingTimingImportClockRequest::SampleClkActiveEdgeEnumCase::SAMPLE_CLK_ACTIVE_EDGE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sample_clk_active_edge was not specified or out of range"); - break; - } - } - - int32 pause_when; - switch (request->pause_when_enum_case()) { - case nidaqmx_grpc::CfgBurstHandshakingTimingImportClockRequest::PauseWhenEnumCase::kPauseWhen: { - pause_when = static_cast(request->pause_when()); - break; - } - case nidaqmx_grpc::CfgBurstHandshakingTimingImportClockRequest::PauseWhenEnumCase::kPauseWhenRaw: { - pause_when = static_cast(request->pause_when_raw()); - break; - } - case nidaqmx_grpc::CfgBurstHandshakingTimingImportClockRequest::PauseWhenEnumCase::PAUSE_WHEN_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for pause_when was not specified or out of range"); - break; - } - } + auto status = library->ReadCtrFreqScalar(task, timeout, &frequency, &duty_cycle, reserved); - int32 ready_event_active_level; - switch (request->ready_event_active_level_enum_case()) { - case nidaqmx_grpc::CfgBurstHandshakingTimingImportClockRequest::ReadyEventActiveLevelEnumCase::kReadyEventActiveLevel: { - ready_event_active_level = static_cast(request->ready_event_active_level()); - break; - } - case nidaqmx_grpc::CfgBurstHandshakingTimingImportClockRequest::ReadyEventActiveLevelEnumCase::kReadyEventActiveLevelRaw: { - ready_event_active_level = static_cast(request->ready_event_active_level_raw()); - break; - } - case nidaqmx_grpc::CfgBurstHandshakingTimingImportClockRequest::ReadyEventActiveLevelEnumCase::READY_EVENT_ACTIVE_LEVEL_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for ready_event_active_level was not specified or out of range"); - break; - } + if (status >= 0) + { + response->set_status(status); + response->set_frequency(frequency); + response->set_duty_cycle(duty_cycle); + packedData.PackFrom(*response); } - - auto status = library_->CfgBurstHandshakingTimingImportClock(task, sample_mode, samps_per_chan, sample_clk_rate, sample_clk_src, sample_clk_active_edge, pause_when, ready_event_active_level); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } - response->set_status(status); return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CfgChangeDetectionTiming(::grpc::ServerContext* context, const CfgChangeDetectionTimingRequest* request, CfgChangeDetectionTimingResponse* response) +::grpc::Status MonikerReadCtrTicks(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto rising_edge_chan_mbcs = convert_from_grpc(request->rising_edge_chan()); - auto rising_edge_chan = rising_edge_chan_mbcs.c_str(); - auto falling_edge_chan_mbcs = convert_from_grpc(request->falling_edge_chan()); - auto falling_edge_chan = falling_edge_chan_mbcs.c_str(); - int32 sample_mode; - switch (request->sample_mode_enum_case()) { - case nidaqmx_grpc::CfgChangeDetectionTimingRequest::SampleModeEnumCase::kSampleMode: { - sample_mode = static_cast(request->sample_mode()); - break; - } - case nidaqmx_grpc::CfgChangeDetectionTimingRequest::SampleModeEnumCase::kSampleModeRaw: { - sample_mode = static_cast(request->sample_mode_raw()); - break; - } - case nidaqmx_grpc::CfgChangeDetectionTimingRequest::SampleModeEnumCase::SAMPLE_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sample_mode was not specified or out of range"); - break; - } - } - - uInt64 samps_per_chan = request->samps_per_chan(); - auto status = library_->CfgChangeDetectionTiming(task, rising_edge_chan, falling_edge_chan, sample_mode, samps_per_chan); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); + MonikerReadCtrTicksData* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto timeout = function_data->timeout; + auto interleaved = function_data->interleaved; + auto array_size_in_samps = function_data->array_size_in_samps; + auto reserved = function_data->reserved; + response->mutable_read_array_high_ticks()->Resize(array_size_in_samps, 0); + uInt32* read_array_high_ticks = reinterpret_cast(response->mutable_read_array_high_ticks()->mutable_data()); + response->mutable_read_array_low_ticks()->Resize(array_size_in_samps, 0); + uInt32* read_array_low_ticks = reinterpret_cast(response->mutable_read_array_low_ticks()->mutable_data()); + int32 samps_per_chan_read {}; + + auto status = library->ReadCtrTicks(task, num_samps_per_chan, timeout, interleaved, read_array_high_ticks, read_array_low_ticks, array_size_in_samps, &samps_per_chan_read, reserved); + + if (status >= 0) + { + response->set_status(status); + response->set_samps_per_chan_read(samps_per_chan_read); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CfgDigEdgeRefTrig(::grpc::ServerContext* context, const CfgDigEdgeRefTrigRequest* request, CfgDigEdgeRefTrigResponse* response) +::grpc::Status MonikerReadCtrTicksScalar(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto trigger_source_mbcs = convert_from_grpc(request->trigger_source()); - auto trigger_source = trigger_source_mbcs.c_str(); - int32 trigger_edge; - switch (request->trigger_edge_enum_case()) { - case nidaqmx_grpc::CfgDigEdgeRefTrigRequest::TriggerEdgeEnumCase::kTriggerEdge: { - trigger_edge = static_cast(request->trigger_edge()); - break; - } - case nidaqmx_grpc::CfgDigEdgeRefTrigRequest::TriggerEdgeEnumCase::kTriggerEdgeRaw: { - trigger_edge = static_cast(request->trigger_edge_raw()); - break; - } - case nidaqmx_grpc::CfgDigEdgeRefTrigRequest::TriggerEdgeEnumCase::TRIGGER_EDGE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for trigger_edge was not specified or out of range"); - break; - } - } + MonikerReadCtrTicksScalarData* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto timeout = function_data->timeout; + auto reserved = function_data->reserved; + uInt32 high_ticks {}; + uInt32 low_ticks {}; - uInt32 pretrigger_samples = request->pretrigger_samples(); - auto status = library_->CfgDigEdgeRefTrig(task, trigger_source, trigger_edge, pretrigger_samples); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + auto status = library->ReadCtrTicksScalar(task, timeout, &high_ticks, &low_ticks, reserved); + + if (status >= 0) + { + response->set_status(status); + response->set_high_ticks(high_ticks); + response->set_low_ticks(low_ticks); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } - response->set_status(status); return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CfgDigEdgeStartTrig(::grpc::ServerContext* context, const CfgDigEdgeStartTrigRequest* request, CfgDigEdgeStartTrigResponse* response) +::grpc::Status MonikerReadCtrTime(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto trigger_source_mbcs = convert_from_grpc(request->trigger_source()); - auto trigger_source = trigger_source_mbcs.c_str(); - int32 trigger_edge; - switch (request->trigger_edge_enum_case()) { - case nidaqmx_grpc::CfgDigEdgeStartTrigRequest::TriggerEdgeEnumCase::kTriggerEdge: { - trigger_edge = static_cast(request->trigger_edge()); - break; - } - case nidaqmx_grpc::CfgDigEdgeStartTrigRequest::TriggerEdgeEnumCase::kTriggerEdgeRaw: { - trigger_edge = static_cast(request->trigger_edge_raw()); - break; - } - case nidaqmx_grpc::CfgDigEdgeStartTrigRequest::TriggerEdgeEnumCase::TRIGGER_EDGE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for trigger_edge was not specified or out of range"); - break; - } - } + MonikerReadCtrTimeData* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto timeout = function_data->timeout; + auto interleaved = function_data->interleaved; + auto array_size_in_samps = function_data->array_size_in_samps; + auto reserved = function_data->reserved; + response->mutable_read_array_high_time()->Resize(array_size_in_samps, 0); + float64* read_array_high_time = response->mutable_read_array_high_time()->mutable_data(); + response->mutable_read_array_low_time()->Resize(array_size_in_samps, 0); + float64* read_array_low_time = response->mutable_read_array_low_time()->mutable_data(); + int32 samps_per_chan_read {}; + + auto status = library->ReadCtrTime(task, num_samps_per_chan, timeout, interleaved, read_array_high_time, read_array_low_time, array_size_in_samps, &samps_per_chan_read, reserved); - auto status = library_->CfgDigEdgeStartTrig(task, trigger_source, trigger_edge); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + if (status >= 0) + { + response->set_status(status); + response->set_samps_per_chan_read(samps_per_chan_read); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } - response->set_status(status); return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CfgDigPatternRefTrig(::grpc::ServerContext* context, const CfgDigPatternRefTrigRequest* request, CfgDigPatternRefTrigResponse* response) +::grpc::Status MonikerReadCtrTimeScalar(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto trigger_source_mbcs = convert_from_grpc(request->trigger_source()); - auto trigger_source = trigger_source_mbcs.c_str(); - auto trigger_pattern_mbcs = convert_from_grpc(request->trigger_pattern()); - auto trigger_pattern = trigger_pattern_mbcs.c_str(); - int32 trigger_when; - switch (request->trigger_when_enum_case()) { - case nidaqmx_grpc::CfgDigPatternRefTrigRequest::TriggerWhenEnumCase::kTriggerWhen: { - trigger_when = static_cast(request->trigger_when()); - break; - } - case nidaqmx_grpc::CfgDigPatternRefTrigRequest::TriggerWhenEnumCase::kTriggerWhenRaw: { - trigger_when = static_cast(request->trigger_when_raw()); - break; - } - case nidaqmx_grpc::CfgDigPatternRefTrigRequest::TriggerWhenEnumCase::TRIGGER_WHEN_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for trigger_when was not specified or out of range"); - break; - } - } - - uInt32 pretrigger_samples = request->pretrigger_samples(); - auto status = library_->CfgDigPatternRefTrig(task, trigger_source, trigger_pattern, trigger_when, pretrigger_samples); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); + MonikerReadCtrTimeScalarData* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto timeout = function_data->timeout; + auto reserved = function_data->reserved; + float64 high_time {}; + float64 low_time {}; + + auto status = library->ReadCtrTimeScalar(task, timeout, &high_time, &low_time, reserved); + + if (status >= 0) + { + response->set_status(status); + response->set_high_time(high_time); + response->set_low_time(low_time); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CfgDigPatternStartTrig(::grpc::ServerContext* context, const CfgDigPatternStartTrigRequest* request, CfgDigPatternStartTrigResponse* response) +::grpc::Status MonikerReadDigitalLines(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto trigger_source_mbcs = convert_from_grpc(request->trigger_source()); - auto trigger_source = trigger_source_mbcs.c_str(); - auto trigger_pattern_mbcs = convert_from_grpc(request->trigger_pattern()); - auto trigger_pattern = trigger_pattern_mbcs.c_str(); - int32 trigger_when; - switch (request->trigger_when_enum_case()) { - case nidaqmx_grpc::CfgDigPatternStartTrigRequest::TriggerWhenEnumCase::kTriggerWhen: { - trigger_when = static_cast(request->trigger_when()); - break; - } - case nidaqmx_grpc::CfgDigPatternStartTrigRequest::TriggerWhenEnumCase::kTriggerWhenRaw: { - trigger_when = static_cast(request->trigger_when_raw()); - break; - } - case nidaqmx_grpc::CfgDigPatternStartTrigRequest::TriggerWhenEnumCase::TRIGGER_WHEN_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for trigger_when was not specified or out of range"); - break; - } - } + MonikerReadDigitalLinesData* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto timeout = function_data->timeout; + auto fill_mode = function_data->fill_mode; + auto array_size_in_bytes = function_data->array_size_in_bytes; + auto reserved = function_data->reserved; + std::string read_array(array_size_in_bytes, '\0'); + int32 samps_per_chan_read {}; + int32 num_bytes_per_samp {}; + + auto status = library->ReadDigitalLines(task, num_samps_per_chan, timeout, fill_mode, (uInt8*)read_array.data(), array_size_in_bytes, &samps_per_chan_read, &num_bytes_per_samp, reserved); - auto status = library_->CfgDigPatternStartTrig(task, trigger_source, trigger_pattern, trigger_when); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + if (status >= 0) + { + response->set_status(status); + response->set_read_array(read_array); + response->set_samps_per_chan_read(samps_per_chan_read); + response->set_num_bytes_per_samp(num_bytes_per_samp); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } - response->set_status(status); return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CfgHandshakingTiming(::grpc::ServerContext* context, const CfgHandshakingTimingRequest* request, CfgHandshakingTimingResponse* response) +::grpc::Status MonikerReadDigitalScalarU32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 sample_mode; - switch (request->sample_mode_enum_case()) { - case nidaqmx_grpc::CfgHandshakingTimingRequest::SampleModeEnumCase::kSampleMode: { - sample_mode = static_cast(request->sample_mode()); - break; - } - case nidaqmx_grpc::CfgHandshakingTimingRequest::SampleModeEnumCase::kSampleModeRaw: { - sample_mode = static_cast(request->sample_mode_raw()); - break; - } - case nidaqmx_grpc::CfgHandshakingTimingRequest::SampleModeEnumCase::SAMPLE_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sample_mode was not specified or out of range"); - break; - } - } + MonikerReadDigitalScalarU32Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto timeout = function_data->timeout; + auto reserved = function_data->reserved; + uInt32 value {}; - uInt64 samps_per_chan = request->samps_per_chan(); - auto status = library_->CfgHandshakingTiming(task, sample_mode, samps_per_chan); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + auto status = library->ReadDigitalScalarU32(task, timeout, &value, reserved); + + if (status >= 0) + { + response->set_status(status); + response->set_value(value); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } - response->set_status(status); return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CfgImplicitTiming(::grpc::ServerContext* context, const CfgImplicitTimingRequest* request, CfgImplicitTimingResponse* response) +::grpc::Status MonikerReadDigitalU16(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 sample_mode; - switch (request->sample_mode_enum_case()) { - case nidaqmx_grpc::CfgImplicitTimingRequest::SampleModeEnumCase::kSampleMode: { - sample_mode = static_cast(request->sample_mode()); - break; - } - case nidaqmx_grpc::CfgImplicitTimingRequest::SampleModeEnumCase::kSampleModeRaw: { - sample_mode = static_cast(request->sample_mode_raw()); - break; - } - case nidaqmx_grpc::CfgImplicitTimingRequest::SampleModeEnumCase::SAMPLE_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sample_mode was not specified or out of range"); - break; - } - } + MonikerReadDigitalU16Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto timeout = function_data->timeout; + auto fill_mode = function_data->fill_mode; + auto array_size_in_samps = function_data->array_size_in_samps; + auto reserved = function_data->reserved; + std::vector read_array(array_size_in_samps); + int32 samps_per_chan_read {}; + + auto status = library->ReadDigitalU16(task, num_samps_per_chan, timeout, fill_mode, read_array.data(), array_size_in_samps, &samps_per_chan_read, reserved); - uInt64 samps_per_chan = request->samps_per_chan(); - auto status = library_->CfgImplicitTiming(task, sample_mode, samps_per_chan); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + if (status >= 0) + { + response->set_status(status); + response->mutable_read_array()->Clear(); + response->mutable_read_array()->Reserve(array_size_in_samps); + std::transform( + read_array.begin(), + read_array.begin() + array_size_in_samps, + google::protobuf::RepeatedFieldBackInserter(response->mutable_read_array()), + [&](auto x) { + return x; + }); + response->set_samps_per_chan_read(samps_per_chan_read); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } - response->set_status(status); return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CfgInputBuffer(::grpc::ServerContext* context, const CfgInputBufferRequest* request, CfgInputBufferResponse* response) +::grpc::Status MonikerReadDigitalU32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - uInt32 num_samps_per_chan = request->num_samps_per_chan(); - auto status = library_->CfgInputBuffer(task, num_samps_per_chan); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); + MonikerReadDigitalU32Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto timeout = function_data->timeout; + auto fill_mode = function_data->fill_mode; + auto array_size_in_samps = function_data->array_size_in_samps; + auto reserved = function_data->reserved; + response->mutable_read_array()->Resize(array_size_in_samps, 0); + uInt32* read_array = reinterpret_cast(response->mutable_read_array()->mutable_data()); + int32 samps_per_chan_read {}; + + auto status = library->ReadDigitalU32(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); + + if (status >= 0) + { + response->set_status(status); + response->set_samps_per_chan_read(samps_per_chan_read); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CfgOutputBuffer(::grpc::ServerContext* context, const CfgOutputBufferRequest* request, CfgOutputBufferResponse* response) +::grpc::Status MonikerReadDigitalU8(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - uInt32 num_samps_per_chan = request->num_samps_per_chan(); - auto status = library_->CfgOutputBuffer(task, num_samps_per_chan); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); + MonikerReadDigitalU8Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto timeout = function_data->timeout; + auto fill_mode = function_data->fill_mode; + auto array_size_in_samps = function_data->array_size_in_samps; + auto reserved = function_data->reserved; + std::string read_array(array_size_in_samps, '\0'); + int32 samps_per_chan_read {}; + + auto status = library->ReadDigitalU8(task, num_samps_per_chan, timeout, fill_mode, (uInt8*)read_array.data(), array_size_in_samps, &samps_per_chan_read, reserved); + + if (status >= 0) + { + response->set_status(status); + response->set_read_array(read_array); + response->set_samps_per_chan_read(samps_per_chan_read); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CfgPipelinedSampClkTiming(::grpc::ServerContext* context, const CfgPipelinedSampClkTimingRequest* request, CfgPipelinedSampClkTimingResponse* response) +::grpc::Status MonikerReadPowerBinaryI16(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto source_mbcs = convert_from_grpc(request->source()); - auto source = source_mbcs.c_str(); - float64 rate = request->rate(); - int32 active_edge; - switch (request->active_edge_enum_case()) { - case nidaqmx_grpc::CfgPipelinedSampClkTimingRequest::ActiveEdgeEnumCase::kActiveEdge: { - active_edge = static_cast(request->active_edge()); - break; - } - case nidaqmx_grpc::CfgPipelinedSampClkTimingRequest::ActiveEdgeEnumCase::kActiveEdgeRaw: { - active_edge = static_cast(request->active_edge_raw()); - break; - } - case nidaqmx_grpc::CfgPipelinedSampClkTimingRequest::ActiveEdgeEnumCase::ACTIVE_EDGE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for active_edge was not specified or out of range"); - break; - } - } + MonikerReadPowerBinaryI16Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto timeout = function_data->timeout; + auto fill_mode = function_data->fill_mode; + auto array_size_in_samps = function_data->array_size_in_samps; + auto reserved = function_data->reserved; + std::vector read_array_voltage(array_size_in_samps); + std::vector read_array_current(array_size_in_samps); + int32 samps_per_chan_read {}; - int32 sample_mode; - switch (request->sample_mode_enum_case()) { - case nidaqmx_grpc::CfgPipelinedSampClkTimingRequest::SampleModeEnumCase::kSampleMode: { - sample_mode = static_cast(request->sample_mode()); - break; - } - case nidaqmx_grpc::CfgPipelinedSampClkTimingRequest::SampleModeEnumCase::kSampleModeRaw: { - sample_mode = static_cast(request->sample_mode_raw()); - break; - } - case nidaqmx_grpc::CfgPipelinedSampClkTimingRequest::SampleModeEnumCase::SAMPLE_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sample_mode was not specified or out of range"); - break; - } - } + auto status = library->ReadPowerBinaryI16(task, num_samps_per_chan, timeout, fill_mode, read_array_voltage.data(), read_array_current.data(), array_size_in_samps, &samps_per_chan_read, reserved); - uInt64 samps_per_chan = request->samps_per_chan(); - auto status = library_->CfgPipelinedSampClkTiming(task, source, rate, active_edge, sample_mode, samps_per_chan); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + if (status >= 0) + { + response->set_status(status); + response->mutable_read_array_voltage()->Clear(); + response->mutable_read_array_voltage()->Reserve(array_size_in_samps); + std::transform( + read_array_voltage.begin(), + read_array_voltage.begin() + array_size_in_samps, + google::protobuf::RepeatedFieldBackInserter(response->mutable_read_array_voltage()), + [&](auto x) { + return x; + }); + response->mutable_read_array_current()->Clear(); + response->mutable_read_array_current()->Reserve(array_size_in_samps); + std::transform( + read_array_current.begin(), + read_array_current.begin() + array_size_in_samps, + google::protobuf::RepeatedFieldBackInserter(response->mutable_read_array_current()), + [&](auto x) { + return x; + }); + response->set_samps_per_chan_read(samps_per_chan_read); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } - response->set_status(status); return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CfgSampClkTiming(::grpc::ServerContext* context, const CfgSampClkTimingRequest* request, CfgSampClkTimingResponse* response) +::grpc::Status MonikerReadPowerF64(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto source_mbcs = convert_from_grpc(request->source()); - auto source = source_mbcs.c_str(); - float64 rate = request->rate(); - int32 active_edge; - switch (request->active_edge_enum_case()) { - case nidaqmx_grpc::CfgSampClkTimingRequest::ActiveEdgeEnumCase::kActiveEdge: { - active_edge = static_cast(request->active_edge()); - break; - } - case nidaqmx_grpc::CfgSampClkTimingRequest::ActiveEdgeEnumCase::kActiveEdgeRaw: { - active_edge = static_cast(request->active_edge_raw()); - break; - } - case nidaqmx_grpc::CfgSampClkTimingRequest::ActiveEdgeEnumCase::ACTIVE_EDGE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for active_edge was not specified or out of range"); - break; - } - } + MonikerReadPowerF64Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto timeout = function_data->timeout; + auto fill_mode = function_data->fill_mode; + auto array_size_in_samps = function_data->array_size_in_samps; + auto reserved = function_data->reserved; + response->mutable_read_array_voltage()->Resize(array_size_in_samps, 0); + float64* read_array_voltage = response->mutable_read_array_voltage()->mutable_data(); + response->mutable_read_array_current()->Resize(array_size_in_samps, 0); + float64* read_array_current = response->mutable_read_array_current()->mutable_data(); + int32 samps_per_chan_read {}; - int32 sample_mode; - switch (request->sample_mode_enum_case()) { - case nidaqmx_grpc::CfgSampClkTimingRequest::SampleModeEnumCase::kSampleMode: { - sample_mode = static_cast(request->sample_mode()); - break; - } - case nidaqmx_grpc::CfgSampClkTimingRequest::SampleModeEnumCase::kSampleModeRaw: { - sample_mode = static_cast(request->sample_mode_raw()); - break; - } - case nidaqmx_grpc::CfgSampClkTimingRequest::SampleModeEnumCase::SAMPLE_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sample_mode was not specified or out of range"); - break; - } - } + auto status = library->ReadPowerF64(task, num_samps_per_chan, timeout, fill_mode, read_array_voltage, read_array_current, array_size_in_samps, &samps_per_chan_read, reserved); - uInt64 samps_per_chan = request->samps_per_chan(); - auto status = library_->CfgSampClkTiming(task, source, rate, active_edge, sample_mode, samps_per_chan); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + if (status >= 0) + { + response->set_status(status); + response->set_samps_per_chan_read(samps_per_chan_read); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } - response->set_status(status); return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CfgTimeStartTrig(::grpc::ServerContext* context, const CfgTimeStartTrigRequest* request, CfgTimeStartTrigResponse* response) +::grpc::Status MonikerReadPowerScalarF64(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto when = convert_from_grpc(request->when()); - int32 timescale; - switch (request->timescale_enum_case()) { - case nidaqmx_grpc::CfgTimeStartTrigRequest::TimescaleEnumCase::kTimescale: { - timescale = static_cast(request->timescale()); - break; - } - case nidaqmx_grpc::CfgTimeStartTrigRequest::TimescaleEnumCase::kTimescaleRaw: { - timescale = static_cast(request->timescale_raw()); - break; - } - case nidaqmx_grpc::CfgTimeStartTrigRequest::TimescaleEnumCase::TIMESCALE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for timescale was not specified or out of range"); - break; - } - } + MonikerReadPowerScalarF64Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto timeout = function_data->timeout; + auto reserved = function_data->reserved; + float64 voltage {}; + float64 current {}; + + auto status = library->ReadPowerScalarF64(task, timeout, &voltage, ¤t, reserved); - auto status = library_->CfgTimeStartTrig(task, when, timescale); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + if (status >= 0) + { + response->set_status(status); + response->set_voltage(voltage); + response->set_current(current); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } - response->set_status(status); return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CfgWatchdogAOExpirStates(::grpc::ServerContext* context, const CfgWatchdogAOExpirStatesRequest* request, CfgWatchdogAOExpirStatesResponse* response) +::grpc::Status MonikerReadRaw(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto channel_names_mbcs = convert_from_grpc(request->channel_names()); - auto channel_names = channel_names_mbcs.c_str(); - auto expir_state_array = const_cast(request->expir_state_array().data()); - auto output_type_array_vector = std::vector(); - output_type_array_vector.reserve(request->output_type_array().size()); - std::transform( - request->output_type_array().begin(), - request->output_type_array().end(), - std::back_inserter(output_type_array_vector), - [](auto x) { return x; }); - auto output_type_array = output_type_array_vector.data(); + MonikerReadRawData* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto timeout = function_data->timeout; + auto array_size_in_bytes = function_data->array_size_in_bytes; + auto reserved = function_data->reserved; + std::string read_array(array_size_in_bytes, '\0'); + int32 samps_read {}; + int32 num_bytes_per_samp {}; - auto array_size_determine_from_sizes = std::array{ - request->expir_state_array_size(), - request->output_type_array_size()}; - const auto array_size_size_calculation = calculate_linked_array_size(array_size_determine_from_sizes, false); + auto status = library->ReadRaw(task, num_samps_per_chan, timeout, (uInt8*)read_array.data(), array_size_in_bytes, &samps_read, &num_bytes_per_samp, reserved); - if (array_size_size_calculation.match_state == MatchState::MISMATCH) { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The sizes of linked repeated fields [expir_state_array, output_type_array] do not match"); + if (status >= 0) + { + response->set_status(status); + response->set_read_array(read_array); + response->set_samps_read(samps_read); + response->set_num_bytes_per_samp(num_bytes_per_samp); + packedData.PackFrom(*response); } - auto array_size = array_size_size_calculation.size; - - auto status = library_->CfgWatchdogAOExpirStates(task, channel_names, expir_state_array, output_type_array, array_size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } - response->set_status(status); return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CfgWatchdogCOExpirStates(::grpc::ServerContext* context, const CfgWatchdogCOExpirStatesRequest* request, CfgWatchdogCOExpirStatesResponse* response) +::grpc::Status MonikerWaitForNextSampleClock(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto channel_names_mbcs = convert_from_grpc(request->channel_names()); - auto channel_names = channel_names_mbcs.c_str(); - auto expir_state_array_vector = std::vector(); - expir_state_array_vector.reserve(request->expir_state_array().size()); - std::transform( - request->expir_state_array().begin(), - request->expir_state_array().end(), - std::back_inserter(expir_state_array_vector), - [](auto x) { return x; }); - auto expir_state_array = expir_state_array_vector.data(); + MonikerWaitForNextSampleClockData* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto timeout = function_data->timeout; + bool32 is_late {}; - uInt32 array_size = static_cast(request->expir_state_array().size()); - auto status = library_->CfgWatchdogCOExpirStates(task, channel_names, expir_state_array, array_size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + auto status = library->WaitForNextSampleClock(task, timeout, &is_late); + + if (status >= 0) + { + response->set_status(status); + response->set_is_late(is_late); + packedData.PackFrom(*response); + } + else + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } - response->set_status(status); return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CfgWatchdogDOExpirStates(::grpc::ServerContext* context, const CfgWatchdogDOExpirStatesRequest* request, CfgWatchdogDOExpirStatesResponse* response) +::grpc::Status MonikerWriteAnalogF64(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto channel_names_mbcs = convert_from_grpc(request->channel_names()); - auto channel_names = channel_names_mbcs.c_str(); - auto expir_state_array_vector = std::vector(); - expir_state_array_vector.reserve(request->expir_state_array().size()); - std::transform( - request->expir_state_array().begin(), - request->expir_state_array().end(), - std::back_inserter(expir_state_array_vector), - [](auto x) { return x; }); - auto expir_state_array = expir_state_array_vector.data(); + MonikerWriteAnalogF64Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto auto_start = function_data->auto_start; + auto timeout = function_data->timeout; + auto data_layout = function_data->data_layout; + auto reserved = function_data->reserved; + int32 samps_per_chan_written {}; + + MonikerWriteAnalogF64Request* request; + packedData.UnpackTo(request); + auto write_array = const_cast(request->write_array().data()); + + auto status = library->WriteAnalogF64(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array, &samps_per_chan_written, reserved); - uInt32 array_size = static_cast(request->expir_state_array().size()); - auto status = library_->CfgWatchdogDOExpirStates(task, channel_names, expir_state_array, array_size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } - response->set_status(status); return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ClearTEDS(::grpc::ServerContext* context, const ClearTEDSRequest* request, ClearTEDSResponse* response) +::grpc::Status MonikerWriteAnalogScalarF64(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto status = library_->ClearTEDS(physical_channel); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + MonikerWriteAnalogScalarF64Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto auto_start = function_data->auto_start; + auto timeout = function_data->timeout; + auto reserved = function_data->reserved; + + MonikerWriteAnalogScalarF64Request* request; + packedData.UnpackTo(request); + float64 value = request->value(); + + auto status = library->WriteAnalogScalarF64(task, auto_start, timeout, value, reserved); + + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } - response->set_status(status); return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ClearTask(::grpc::ServerContext* context, const ClearTaskRequest* request, ClearTaskResponse* response) +::grpc::Status MonikerWriteBinaryI16(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - session_repository_->remove_session(task_grpc_session.name()); - auto status = library_->ClearTask(task); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); + MonikerWriteBinaryI16Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto auto_start = function_data->auto_start; + auto timeout = function_data->timeout; + auto data_layout = function_data->data_layout; + auto reserved = function_data->reserved; + int32 samps_per_chan_written {}; + + MonikerWriteBinaryI16Request* request; + packedData.UnpackTo(request); + auto write_array_raw = request->write_array(); + auto write_array = std::vector(); + write_array.reserve(write_array_raw.size()); + std::transform( + write_array_raw.begin(), + write_array_raw.end(), + std::back_inserter(write_array), + [](auto x) { + if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { + std::string message("value "); + message.append(std::to_string(x)); + message.append(" doesn't fit in datatype "); + message.append("int16"); + throw nidevice_grpc::ValueOutOfRangeException(message); + } + return static_cast(x); + }); + + + auto status = library->WriteBinaryI16(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array.data(), &samps_per_chan_written, reserved); + + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ConfigureLogging(::grpc::ServerContext* context, const ConfigureLoggingRequest* request, ConfigureLoggingResponse* response) +::grpc::Status MonikerWriteBinaryI32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto file_path_mbcs = convert_from_grpc(request->file_path()); - auto file_path = file_path_mbcs.c_str(); - int32 logging_mode; - switch (request->logging_mode_enum_case()) { - case nidaqmx_grpc::ConfigureLoggingRequest::LoggingModeEnumCase::kLoggingMode: { - logging_mode = static_cast(request->logging_mode()); - break; - } - case nidaqmx_grpc::ConfigureLoggingRequest::LoggingModeEnumCase::kLoggingModeRaw: { - logging_mode = static_cast(request->logging_mode_raw()); - break; - } - case nidaqmx_grpc::ConfigureLoggingRequest::LoggingModeEnumCase::LOGGING_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for logging_mode was not specified or out of range"); - break; - } - } + MonikerWriteBinaryI32Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto auto_start = function_data->auto_start; + auto timeout = function_data->timeout; + auto data_layout = function_data->data_layout; + auto reserved = function_data->reserved; + int32 samps_per_chan_written {}; - auto group_name_mbcs = convert_from_grpc(request->group_name()); - auto group_name = group_name_mbcs.c_str(); - int32 operation; - switch (request->operation_enum_case()) { - case nidaqmx_grpc::ConfigureLoggingRequest::OperationEnumCase::kOperation: { - operation = static_cast(request->operation()); - break; - } - case nidaqmx_grpc::ConfigureLoggingRequest::OperationEnumCase::kOperationRaw: { - operation = static_cast(request->operation_raw()); - break; - } - case nidaqmx_grpc::ConfigureLoggingRequest::OperationEnumCase::OPERATION_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for operation was not specified or out of range"); - break; - } - } + MonikerWriteBinaryI32Request* request; + packedData.UnpackTo(request); + auto write_array = reinterpret_cast(request->write_array().data()); + + auto status = library->WriteBinaryI32(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array, &samps_per_chan_written, reserved); - auto status = library_->ConfigureLogging(task, file_path, logging_mode, group_name, operation); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } - response->set_status(status); return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ConfigureTEDS(::grpc::ServerContext* context, const ConfigureTEDSRequest* request, ConfigureTEDSResponse* response) +::grpc::Status MonikerWriteBinaryU16(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto file_path_mbcs = convert_from_grpc(request->file_path()); - auto file_path = file_path_mbcs.c_str(); - auto status = library_->ConfigureTEDS(physical_channel, file_path); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); + MonikerWriteBinaryU16Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto auto_start = function_data->auto_start; + auto timeout = function_data->timeout; + auto data_layout = function_data->data_layout; + auto reserved = function_data->reserved; + int32 samps_per_chan_written {}; + + MonikerWriteBinaryU16Request* request; + packedData.UnpackTo(request); + auto write_array_raw = request->write_array(); + auto write_array = std::vector(); + write_array.reserve(write_array_raw.size()); + std::transform( + write_array_raw.begin(), + write_array_raw.end(), + std::back_inserter(write_array), + [](auto x) { + if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { + std::string message("value "); + message.append(std::to_string(x)); + message.append(" doesn't fit in datatype "); + message.append("uInt16"); + throw nidevice_grpc::ValueOutOfRangeException(message); + } + return static_cast(x); + }); + + + auto status = library->WriteBinaryU16(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array.data(), &samps_per_chan_written, reserved); + + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); + } return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ConnectTerms(::grpc::ServerContext* context, const ConnectTermsRequest* request, ConnectTermsResponse* response) +::grpc::Status MonikerWriteBinaryU32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto source_terminal_mbcs = convert_from_grpc(request->source_terminal()); - auto source_terminal = source_terminal_mbcs.c_str(); - auto destination_terminal_mbcs = convert_from_grpc(request->destination_terminal()); - auto destination_terminal = destination_terminal_mbcs.c_str(); - int32 signal_modifiers; - switch (request->signal_modifiers_enum_case()) { - case nidaqmx_grpc::ConnectTermsRequest::SignalModifiersEnumCase::kSignalModifiers: { - signal_modifiers = static_cast(request->signal_modifiers()); - break; - } - case nidaqmx_grpc::ConnectTermsRequest::SignalModifiersEnumCase::kSignalModifiersRaw: { - signal_modifiers = static_cast(request->signal_modifiers_raw()); - break; - } - case nidaqmx_grpc::ConnectTermsRequest::SignalModifiersEnumCase::SIGNAL_MODIFIERS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for signal_modifiers was not specified or out of range"); - break; - } - } + MonikerWriteBinaryU32Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto auto_start = function_data->auto_start; + auto timeout = function_data->timeout; + auto data_layout = function_data->data_layout; + auto reserved = function_data->reserved; + int32 samps_per_chan_written {}; + + MonikerWriteBinaryU32Request* request; + packedData.UnpackTo(request); + auto write_array = reinterpret_cast(request->write_array().data()); - auto status = library_->ConnectTerms(source_terminal, destination_terminal, signal_modifiers); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + auto status = library->WriteBinaryU32(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array, &samps_per_chan_written, reserved); + + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } - response->set_status(status); return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ControlWatchdogTask(::grpc::ServerContext* context, const ControlWatchdogTaskRequest* request, ControlWatchdogTaskResponse* response) +::grpc::Status MonikerWriteCtrFreq(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 action; - switch (request->action_enum_case()) { - case nidaqmx_grpc::ControlWatchdogTaskRequest::ActionEnumCase::kAction: { - action = static_cast(request->action()); - break; - } - case nidaqmx_grpc::ControlWatchdogTaskRequest::ActionEnumCase::kActionRaw: { - action = static_cast(request->action_raw()); - break; - } - case nidaqmx_grpc::ControlWatchdogTaskRequest::ActionEnumCase::ACTION_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for action was not specified or out of range"); - break; - } - } + MonikerWriteCtrFreqData* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto auto_start = function_data->auto_start; + auto timeout = function_data->timeout; + auto data_layout = function_data->data_layout; + auto reserved = function_data->reserved; + int32 num_samps_per_chan_written {}; + + MonikerWriteCtrFreqRequest* request; + packedData.UnpackTo(request); + auto frequency = const_cast(request->frequency().data()); + auto duty_cycle = const_cast(request->duty_cycle().data()); - auto status = library_->ControlWatchdogTask(task, action); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + auto status = library->WriteCtrFreq(task, num_samps_per_chan, auto_start, timeout, data_layout, frequency, duty_cycle, &num_samps_per_chan_written, reserved); + + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } - response->set_status(status); return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAIAccel4WireDCVoltageChan(::grpc::ServerContext* context, const CreateAIAccel4WireDCVoltageChanRequest* request, CreateAIAccel4WireDCVoltageChanResponse* response) +::grpc::Status MonikerWriteCtrFreqScalar(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - int32 terminal_config; - switch (request->terminal_config_enum_case()) { - case nidaqmx_grpc::CreateAIAccel4WireDCVoltageChanRequest::TerminalConfigEnumCase::kTerminalConfig: { - terminal_config = static_cast(request->terminal_config()); - break; - } - case nidaqmx_grpc::CreateAIAccel4WireDCVoltageChanRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { - terminal_config = static_cast(request->terminal_config_raw()); - break; - } - case nidaqmx_grpc::CreateAIAccel4WireDCVoltageChanRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); - break; - } - } - - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAIAccel4WireDCVoltageChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateAIAccel4WireDCVoltageChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateAIAccel4WireDCVoltageChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; - } - } + MonikerWriteCtrFreqScalarData* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto auto_start = function_data->auto_start; + auto timeout = function_data->timeout; + auto reserved = function_data->reserved; - float64 sensitivity = request->sensitivity(); - int32 sensitivity_units; - switch (request->sensitivity_units_enum_case()) { - case nidaqmx_grpc::CreateAIAccel4WireDCVoltageChanRequest::SensitivityUnitsEnumCase::kSensitivityUnits: { - sensitivity_units = static_cast(request->sensitivity_units()); - break; - } - case nidaqmx_grpc::CreateAIAccel4WireDCVoltageChanRequest::SensitivityUnitsEnumCase::kSensitivityUnitsRaw: { - sensitivity_units = static_cast(request->sensitivity_units_raw()); - break; - } - case nidaqmx_grpc::CreateAIAccel4WireDCVoltageChanRequest::SensitivityUnitsEnumCase::SENSITIVITY_UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sensitivity_units was not specified or out of range"); - break; - } - } + MonikerWriteCtrFreqScalarRequest* request; + packedData.UnpackTo(request); + float64 frequency = request->frequency(); + float64 duty_cycle = request->duty_cycle(); - int32 voltage_excit_source; - switch (request->voltage_excit_source_enum_case()) { - case nidaqmx_grpc::CreateAIAccel4WireDCVoltageChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { - voltage_excit_source = static_cast(request->voltage_excit_source()); - break; - } - case nidaqmx_grpc::CreateAIAccel4WireDCVoltageChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { - voltage_excit_source = static_cast(request->voltage_excit_source_raw()); - break; - } - case nidaqmx_grpc::CreateAIAccel4WireDCVoltageChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); - break; - } - } + auto status = library->WriteCtrFreqScalar(task, auto_start, timeout, frequency, duty_cycle, reserved); - float64 voltage_excit_val = request->voltage_excit_val(); - bool32 use_excit_for_scaling = request->use_excit_for_scaling(); - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateAIAccel4WireDCVoltageChan(task, physical_channel, name_to_assign_to_channel, terminal_config, min_val, max_val, units, sensitivity, sensitivity_units, voltage_excit_source, voltage_excit_val, use_excit_for_scaling, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } - response->set_status(status); return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAIAccelChan(::grpc::ServerContext* context, const CreateAIAccelChanRequest* request, CreateAIAccelChanResponse* response) +::grpc::Status MonikerWriteCtrTicks(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - int32 terminal_config; - switch (request->terminal_config_enum_case()) { - case nidaqmx_grpc::CreateAIAccelChanRequest::TerminalConfigEnumCase::kTerminalConfig: { - terminal_config = static_cast(request->terminal_config()); - break; - } - case nidaqmx_grpc::CreateAIAccelChanRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { - terminal_config = static_cast(request->terminal_config_raw()); - break; - } - case nidaqmx_grpc::CreateAIAccelChanRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); - break; - } - } - - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAIAccelChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateAIAccelChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateAIAccelChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; - } - } + MonikerWriteCtrTicksData* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto auto_start = function_data->auto_start; + auto timeout = function_data->timeout; + auto data_layout = function_data->data_layout; + auto reserved = function_data->reserved; + int32 num_samps_per_chan_written {}; - float64 sensitivity = request->sensitivity(); - int32 sensitivity_units; - switch (request->sensitivity_units_enum_case()) { - case nidaqmx_grpc::CreateAIAccelChanRequest::SensitivityUnitsEnumCase::kSensitivityUnits: { - sensitivity_units = static_cast(request->sensitivity_units()); - break; - } - case nidaqmx_grpc::CreateAIAccelChanRequest::SensitivityUnitsEnumCase::kSensitivityUnitsRaw: { - sensitivity_units = static_cast(request->sensitivity_units_raw()); - break; - } - case nidaqmx_grpc::CreateAIAccelChanRequest::SensitivityUnitsEnumCase::SENSITIVITY_UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sensitivity_units was not specified or out of range"); - break; - } - } + MonikerWriteCtrTicksRequest* request; + packedData.UnpackTo(request); + auto high_ticks = reinterpret_cast(request->high_ticks().data()); + auto low_ticks = reinterpret_cast(request->low_ticks().data()); - int32 current_excit_source; - switch (request->current_excit_source_enum_case()) { - case nidaqmx_grpc::CreateAIAccelChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSource: { - current_excit_source = static_cast(request->current_excit_source()); - break; - } - case nidaqmx_grpc::CreateAIAccelChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSourceRaw: { - current_excit_source = static_cast(request->current_excit_source_raw()); - break; - } - case nidaqmx_grpc::CreateAIAccelChanRequest::CurrentExcitSourceEnumCase::CURRENT_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for current_excit_source was not specified or out of range"); - break; - } - } + auto status = library->WriteCtrTicks(task, num_samps_per_chan, auto_start, timeout, data_layout, high_ticks, low_ticks, &num_samps_per_chan_written, reserved); - float64 current_excit_val = request->current_excit_val(); - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateAIAccelChan(task, physical_channel, name_to_assign_to_channel, terminal_config, min_val, max_val, units, sensitivity, sensitivity_units, current_excit_source, current_excit_val, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } - response->set_status(status); return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAIAccelChargeChan(::grpc::ServerContext* context, const CreateAIAccelChargeChanRequest* request, CreateAIAccelChargeChanResponse* response) +::grpc::Status MonikerWriteCtrTicksScalar(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - int32 terminal_config; - switch (request->terminal_config_enum_case()) { - case nidaqmx_grpc::CreateAIAccelChargeChanRequest::TerminalConfigEnumCase::kTerminalConfig: { - terminal_config = static_cast(request->terminal_config()); - break; - } - case nidaqmx_grpc::CreateAIAccelChargeChanRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { - terminal_config = static_cast(request->terminal_config_raw()); - break; - } - case nidaqmx_grpc::CreateAIAccelChargeChanRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); - break; - } - } + MonikerWriteCtrTicksScalarData* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto auto_start = function_data->auto_start; + auto timeout = function_data->timeout; + auto reserved = function_data->reserved; - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAIAccelChargeChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateAIAccelChargeChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateAIAccelChargeChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; - } - } + MonikerWriteCtrTicksScalarRequest* request; + packedData.UnpackTo(request); + uInt32 high_ticks = request->high_ticks(); + uInt32 low_ticks = request->low_ticks(); - float64 sensitivity = request->sensitivity(); - int32 sensitivity_units; - switch (request->sensitivity_units_enum_case()) { - case nidaqmx_grpc::CreateAIAccelChargeChanRequest::SensitivityUnitsEnumCase::kSensitivityUnits: { - sensitivity_units = static_cast(request->sensitivity_units()); - break; - } - case nidaqmx_grpc::CreateAIAccelChargeChanRequest::SensitivityUnitsEnumCase::kSensitivityUnitsRaw: { - sensitivity_units = static_cast(request->sensitivity_units_raw()); - break; - } - case nidaqmx_grpc::CreateAIAccelChargeChanRequest::SensitivityUnitsEnumCase::SENSITIVITY_UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sensitivity_units was not specified or out of range"); - break; - } - } + auto status = library->WriteCtrTicksScalar(task, auto_start, timeout, high_ticks, low_ticks, reserved); - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateAIAccelChargeChan(task, physical_channel, name_to_assign_to_channel, terminal_config, min_val, max_val, units, sensitivity, sensitivity_units, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } - response->set_status(status); return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAIBridgeChan(::grpc::ServerContext* context, const CreateAIBridgeChanRequest* request, CreateAIBridgeChanResponse* response) +::grpc::Status MonikerWriteCtrTime(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAIBridgeChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateAIBridgeChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateAIBridgeChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; - } - } + MonikerWriteCtrTimeData* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto auto_start = function_data->auto_start; + auto timeout = function_data->timeout; + auto data_layout = function_data->data_layout; + auto reserved = function_data->reserved; + int32 num_samps_per_chan_written {}; - int32 bridge_config; - switch (request->bridge_config_enum_case()) { - case nidaqmx_grpc::CreateAIBridgeChanRequest::BridgeConfigEnumCase::kBridgeConfig: { - bridge_config = static_cast(request->bridge_config()); - break; - } - case nidaqmx_grpc::CreateAIBridgeChanRequest::BridgeConfigEnumCase::kBridgeConfigRaw: { - bridge_config = static_cast(request->bridge_config_raw()); - break; - } - case nidaqmx_grpc::CreateAIBridgeChanRequest::BridgeConfigEnumCase::BRIDGE_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for bridge_config was not specified or out of range"); - break; - } - } + MonikerWriteCtrTimeRequest* request; + packedData.UnpackTo(request); + auto high_time = const_cast(request->high_time().data()); + auto low_time = const_cast(request->low_time().data()); - int32 voltage_excit_source; - switch (request->voltage_excit_source_enum_case()) { - case nidaqmx_grpc::CreateAIBridgeChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { - voltage_excit_source = static_cast(request->voltage_excit_source()); - break; - } - case nidaqmx_grpc::CreateAIBridgeChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { - voltage_excit_source = static_cast(request->voltage_excit_source_raw()); - break; - } - case nidaqmx_grpc::CreateAIBridgeChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); - break; - } - } + auto status = library->WriteCtrTime(task, num_samps_per_chan, auto_start, timeout, data_layout, high_time, low_time, &num_samps_per_chan_written, reserved); - float64 voltage_excit_val = request->voltage_excit_val(); - float64 nominal_bridge_resistance = request->nominal_bridge_resistance(); - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateAIBridgeChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, bridge_config, voltage_excit_source, voltage_excit_val, nominal_bridge_resistance, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } - response->set_status(status); return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAIChargeChan(::grpc::ServerContext* context, const CreateAIChargeChanRequest* request, CreateAIChargeChanResponse* response) +::grpc::Status MonikerWriteCtrTimeScalar(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - int32 terminal_config; - switch (request->terminal_config_enum_case()) { - case nidaqmx_grpc::CreateAIChargeChanRequest::TerminalConfigEnumCase::kTerminalConfig: { - terminal_config = static_cast(request->terminal_config()); - break; - } - case nidaqmx_grpc::CreateAIChargeChanRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { - terminal_config = static_cast(request->terminal_config_raw()); - break; - } - case nidaqmx_grpc::CreateAIChargeChanRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); - break; - } - } + MonikerWriteCtrTimeScalarData* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto auto_start = function_data->auto_start; + auto timeout = function_data->timeout; + auto reserved = function_data->reserved; - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAIChargeChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateAIChargeChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateAIChargeChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; - } - } + MonikerWriteCtrTimeScalarRequest* request; + packedData.UnpackTo(request); + float64 high_time = request->high_time(); + float64 low_time = request->low_time(); + + auto status = library->WriteCtrTimeScalar(task, auto_start, timeout, high_time, low_time, reserved); - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateAIChargeChan(task, physical_channel, name_to_assign_to_channel, terminal_config, min_val, max_val, units, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } - response->set_status(status); return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAICurrentChan(::grpc::ServerContext* context, const CreateAICurrentChanRequest* request, CreateAICurrentChanResponse* response) +::grpc::Status MonikerWriteDigitalLines(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - int32 terminal_config; - switch (request->terminal_config_enum_case()) { - case nidaqmx_grpc::CreateAICurrentChanRequest::TerminalConfigEnumCase::kTerminalConfig: { - terminal_config = static_cast(request->terminal_config()); - break; - } - case nidaqmx_grpc::CreateAICurrentChanRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { - terminal_config = static_cast(request->terminal_config_raw()); - break; - } - case nidaqmx_grpc::CreateAICurrentChanRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); - break; - } - } + MonikerWriteDigitalLinesData* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto auto_start = function_data->auto_start; + auto timeout = function_data->timeout; + auto data_layout = function_data->data_layout; + auto reserved = function_data->reserved; + int32 samps_per_chan_written {}; - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAICurrentChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateAICurrentChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateAICurrentChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; - } - } + MonikerWriteDigitalLinesRequest* request; + packedData.UnpackTo(request); + const uInt8* write_array = (const uInt8*)request->write_array().c_str(); - int32 shunt_resistor_loc; - switch (request->shunt_resistor_loc_enum_case()) { - case nidaqmx_grpc::CreateAICurrentChanRequest::ShuntResistorLocEnumCase::kShuntResistorLoc: { - shunt_resistor_loc = static_cast(request->shunt_resistor_loc()); - break; - } - case nidaqmx_grpc::CreateAICurrentChanRequest::ShuntResistorLocEnumCase::kShuntResistorLocRaw: { - shunt_resistor_loc = static_cast(request->shunt_resistor_loc_raw()); - break; - } - case nidaqmx_grpc::CreateAICurrentChanRequest::ShuntResistorLocEnumCase::SHUNT_RESISTOR_LOC_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for shunt_resistor_loc was not specified or out of range"); - break; - } - } + auto status = library->WriteDigitalLines(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array, &samps_per_chan_written, reserved); - float64 ext_shunt_resistor_val = request->ext_shunt_resistor_val(); - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateAICurrentChan(task, physical_channel, name_to_assign_to_channel, terminal_config, min_val, max_val, units, shunt_resistor_loc, ext_shunt_resistor_val, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } - response->set_status(status); return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAICurrentRMSChan(::grpc::ServerContext* context, const CreateAICurrentRMSChanRequest* request, CreateAICurrentRMSChanResponse* response) +::grpc::Status MonikerWriteDigitalScalarU32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - int32 terminal_config; - switch (request->terminal_config_enum_case()) { - case nidaqmx_grpc::CreateAICurrentRMSChanRequest::TerminalConfigEnumCase::kTerminalConfig: { - terminal_config = static_cast(request->terminal_config()); - break; - } - case nidaqmx_grpc::CreateAICurrentRMSChanRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { - terminal_config = static_cast(request->terminal_config_raw()); - break; - } - case nidaqmx_grpc::CreateAICurrentRMSChanRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); - break; - } - } + MonikerWriteDigitalScalarU32Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto auto_start = function_data->auto_start; + auto timeout = function_data->timeout; + auto reserved = function_data->reserved; - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAICurrentRMSChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateAICurrentRMSChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateAICurrentRMSChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; - } - } + MonikerWriteDigitalScalarU32Request* request; + packedData.UnpackTo(request); + uInt32 value = request->value(); - int32 shunt_resistor_loc; - switch (request->shunt_resistor_loc_enum_case()) { - case nidaqmx_grpc::CreateAICurrentRMSChanRequest::ShuntResistorLocEnumCase::kShuntResistorLoc: { - shunt_resistor_loc = static_cast(request->shunt_resistor_loc()); - break; - } - case nidaqmx_grpc::CreateAICurrentRMSChanRequest::ShuntResistorLocEnumCase::kShuntResistorLocRaw: { - shunt_resistor_loc = static_cast(request->shunt_resistor_loc_raw()); - break; - } - case nidaqmx_grpc::CreateAICurrentRMSChanRequest::ShuntResistorLocEnumCase::SHUNT_RESISTOR_LOC_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for shunt_resistor_loc was not specified or out of range"); - break; - } - } + auto status = library->WriteDigitalScalarU32(task, auto_start, timeout, value, reserved); - float64 ext_shunt_resistor_val = request->ext_shunt_resistor_val(); - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateAICurrentRMSChan(task, physical_channel, name_to_assign_to_channel, terminal_config, min_val, max_val, units, shunt_resistor_loc, ext_shunt_resistor_val, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } - response->set_status(status); return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAIForceBridgePolynomialChan(::grpc::ServerContext* context, const CreateAIForceBridgePolynomialChanRequest* request, CreateAIForceBridgePolynomialChanResponse* response) +::grpc::Status MonikerWriteDigitalU16(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAIForceBridgePolynomialChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateAIForceBridgePolynomialChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateAIForceBridgePolynomialChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; - } - } + MonikerWriteDigitalU16Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto auto_start = function_data->auto_start; + auto timeout = function_data->timeout; + auto data_layout = function_data->data_layout; + auto reserved = function_data->reserved; + int32 samps_per_chan_written {}; + + MonikerWriteDigitalU16Request* request; + packedData.UnpackTo(request); + auto write_array_raw = request->write_array(); + auto write_array = std::vector(); + write_array.reserve(write_array_raw.size()); + std::transform( + write_array_raw.begin(), + write_array_raw.end(), + std::back_inserter(write_array), + [](auto x) { + if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { + std::string message("value "); + message.append(std::to_string(x)); + message.append(" doesn't fit in datatype "); + message.append("uInt16"); + throw nidevice_grpc::ValueOutOfRangeException(message); + } + return static_cast(x); + }); - int32 bridge_config; - switch (request->bridge_config_enum_case()) { - case nidaqmx_grpc::CreateAIForceBridgePolynomialChanRequest::BridgeConfigEnumCase::kBridgeConfig: { - bridge_config = static_cast(request->bridge_config()); - break; - } - case nidaqmx_grpc::CreateAIForceBridgePolynomialChanRequest::BridgeConfigEnumCase::kBridgeConfigRaw: { - bridge_config = static_cast(request->bridge_config_raw()); - break; - } - case nidaqmx_grpc::CreateAIForceBridgePolynomialChanRequest::BridgeConfigEnumCase::BRIDGE_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for bridge_config was not specified or out of range"); - break; - } - } - int32 voltage_excit_source; - switch (request->voltage_excit_source_enum_case()) { - case nidaqmx_grpc::CreateAIForceBridgePolynomialChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { - voltage_excit_source = static_cast(request->voltage_excit_source()); - break; - } - case nidaqmx_grpc::CreateAIForceBridgePolynomialChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { - voltage_excit_source = static_cast(request->voltage_excit_source_raw()); - break; - } - case nidaqmx_grpc::CreateAIForceBridgePolynomialChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); - break; - } - } + auto status = library->WriteDigitalU16(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array.data(), &samps_per_chan_written, reserved); - float64 voltage_excit_val = request->voltage_excit_val(); - float64 nominal_bridge_resistance = request->nominal_bridge_resistance(); - auto forward_coeffs = const_cast(request->forward_coeffs().data()); - uInt32 num_forward_coeffs = static_cast(request->forward_coeffs().size()); - auto reverse_coeffs = const_cast(request->reverse_coeffs().data()); - uInt32 num_reverse_coeffs = static_cast(request->reverse_coeffs().size()); - int32 electrical_units; - switch (request->electrical_units_enum_case()) { - case nidaqmx_grpc::CreateAIForceBridgePolynomialChanRequest::ElectricalUnitsEnumCase::kElectricalUnits: { - electrical_units = static_cast(request->electrical_units()); - break; - } - case nidaqmx_grpc::CreateAIForceBridgePolynomialChanRequest::ElectricalUnitsEnumCase::kElectricalUnitsRaw: { - electrical_units = static_cast(request->electrical_units_raw()); - break; - } - case nidaqmx_grpc::CreateAIForceBridgePolynomialChanRequest::ElectricalUnitsEnumCase::ELECTRICAL_UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for electrical_units was not specified or out of range"); - break; - } + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } + return ::grpc::Status::OK; +} - int32 physical_units; - switch (request->physical_units_enum_case()) { - case nidaqmx_grpc::CreateAIForceBridgePolynomialChanRequest::PhysicalUnitsEnumCase::kPhysicalUnits: { - physical_units = static_cast(request->physical_units()); - break; - } - case nidaqmx_grpc::CreateAIForceBridgePolynomialChanRequest::PhysicalUnitsEnumCase::kPhysicalUnitsRaw: { - physical_units = static_cast(request->physical_units_raw()); - break; - } - case nidaqmx_grpc::CreateAIForceBridgePolynomialChanRequest::PhysicalUnitsEnumCase::PHYSICAL_UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for physical_units was not specified or out of range"); - break; - } - } +::grpc::Status MonikerWriteDigitalU32(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) +{ + MonikerWriteDigitalU32Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto auto_start = function_data->auto_start; + auto timeout = function_data->timeout; + auto data_layout = function_data->data_layout; + auto reserved = function_data->reserved; + int32 samps_per_chan_written {}; + + MonikerWriteDigitalU32Request* request; + packedData.UnpackTo(request); + auto write_array = reinterpret_cast(request->write_array().data()); + + auto status = library->WriteDigitalU32(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array, &samps_per_chan_written, reserved); - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateAIForceBridgePolynomialChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, bridge_config, voltage_excit_source, voltage_excit_val, nominal_bridge_resistance, forward_coeffs, num_forward_coeffs, reverse_coeffs, num_reverse_coeffs, electrical_units, physical_units, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } - response->set_status(status); return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAIForceBridgeTableChan(::grpc::ServerContext* context, const CreateAIForceBridgeTableChanRequest* request, CreateAIForceBridgeTableChanResponse* response) +::grpc::Status MonikerWriteDigitalU8(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) { - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAIForceBridgeTableChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateAIForceBridgeTableChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateAIForceBridgeTableChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; - } - } + MonikerWriteDigitalU8Data* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps_per_chan = function_data->num_samps_per_chan; + auto auto_start = function_data->auto_start; + auto timeout = function_data->timeout; + auto data_layout = function_data->data_layout; + auto reserved = function_data->reserved; + int32 samps_per_chan_written {}; - int32 bridge_config; - switch (request->bridge_config_enum_case()) { - case nidaqmx_grpc::CreateAIForceBridgeTableChanRequest::BridgeConfigEnumCase::kBridgeConfig: { - bridge_config = static_cast(request->bridge_config()); - break; - } - case nidaqmx_grpc::CreateAIForceBridgeTableChanRequest::BridgeConfigEnumCase::kBridgeConfigRaw: { - bridge_config = static_cast(request->bridge_config_raw()); - break; - } - case nidaqmx_grpc::CreateAIForceBridgeTableChanRequest::BridgeConfigEnumCase::BRIDGE_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for bridge_config was not specified or out of range"); - break; - } - } + MonikerWriteDigitalU8Request* request; + packedData.UnpackTo(request); + const uInt8* write_array = (const uInt8*)request->write_array().c_str(); - int32 voltage_excit_source; - switch (request->voltage_excit_source_enum_case()) { - case nidaqmx_grpc::CreateAIForceBridgeTableChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { - voltage_excit_source = static_cast(request->voltage_excit_source()); - break; - } - case nidaqmx_grpc::CreateAIForceBridgeTableChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { - voltage_excit_source = static_cast(request->voltage_excit_source_raw()); - break; - } - case nidaqmx_grpc::CreateAIForceBridgeTableChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); - break; - } - } + auto status = library->WriteDigitalU8(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array, &samps_per_chan_written, reserved); - float64 voltage_excit_val = request->voltage_excit_val(); - float64 nominal_bridge_resistance = request->nominal_bridge_resistance(); - auto electrical_vals = const_cast(request->electrical_vals().data()); - uInt32 num_electrical_vals = static_cast(request->electrical_vals().size()); - int32 electrical_units; - switch (request->electrical_units_enum_case()) { - case nidaqmx_grpc::CreateAIForceBridgeTableChanRequest::ElectricalUnitsEnumCase::kElectricalUnits: { - electrical_units = static_cast(request->electrical_units()); - break; - } - case nidaqmx_grpc::CreateAIForceBridgeTableChanRequest::ElectricalUnitsEnumCase::kElectricalUnitsRaw: { - electrical_units = static_cast(request->electrical_units_raw()); - break; - } - case nidaqmx_grpc::CreateAIForceBridgeTableChanRequest::ElectricalUnitsEnumCase::ELECTRICAL_UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for electrical_units was not specified or out of range"); - break; - } + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } + return ::grpc::Status::OK; +} - auto physical_vals = const_cast(request->physical_vals().data()); - uInt32 num_physical_vals = static_cast(request->physical_vals().size()); - int32 physical_units; - switch (request->physical_units_enum_case()) { - case nidaqmx_grpc::CreateAIForceBridgeTableChanRequest::PhysicalUnitsEnumCase::kPhysicalUnits: { - physical_units = static_cast(request->physical_units()); - break; - } - case nidaqmx_grpc::CreateAIForceBridgeTableChanRequest::PhysicalUnitsEnumCase::kPhysicalUnitsRaw: { - physical_units = static_cast(request->physical_units_raw()); - break; - } - case nidaqmx_grpc::CreateAIForceBridgeTableChanRequest::PhysicalUnitsEnumCase::PHYSICAL_UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for physical_units was not specified or out of range"); - break; - } - } +::grpc::Status MonikerWriteRaw(void* data, google::protobuf::Arena& arena, google::protobuf::Any& packedData) +{ + MonikerWriteRawData* function_data = static_cast(data); + auto library = function_data->library; + auto response = &function_data->response; + auto task = function_data->task; + auto num_samps = function_data->num_samps; + auto auto_start = function_data->auto_start; + auto timeout = function_data->timeout; + auto reserved = function_data->reserved; + int32 samps_per_chan_written {}; + + MonikerWriteRawRequest* request; + packedData.UnpackTo(request); + const uInt8* write_array = (const uInt8*)request->write_array().c_str(); - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateAIForceBridgeTableChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, bridge_config, voltage_excit_source, voltage_excit_val, nominal_bridge_resistance, electrical_vals, num_electrical_vals, electrical_units, physical_vals, num_physical_vals, physical_units, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + auto status = library->WriteRaw(task, num_samps, auto_start, timeout, write_array, &samps_per_chan_written, reserved); + + if (status < 0) + { + return ::grpc::Status(grpc::StatusCode::UNKNOWN, "ni-error: " + status); } - response->set_status(status); return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAIForceBridgeTwoPointLinChan(::grpc::ServerContext* context, const CreateAIForceBridgeTwoPointLinChanRequest* request, CreateAIForceBridgeTwoPointLinChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAIForceBridgeTwoPointLinChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateAIForceBridgeTwoPointLinChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateAIForceBridgeTwoPointLinChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::AddCDAQSyncConnection(::grpc::ServerContext* context, const AddCDAQSyncConnectionRequest* request, AddCDAQSyncConnectionResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto port_list_mbcs = convert_from_grpc(request->port_list()); + auto port_list = port_list_mbcs.c_str(); + auto status = library_->AddCDAQSyncConnection(port_list); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } + } - int32 bridge_config; - switch (request->bridge_config_enum_case()) { - case nidaqmx_grpc::CreateAIForceBridgeTwoPointLinChanRequest::BridgeConfigEnumCase::kBridgeConfig: { - bridge_config = static_cast(request->bridge_config()); - break; - } - case nidaqmx_grpc::CreateAIForceBridgeTwoPointLinChanRequest::BridgeConfigEnumCase::kBridgeConfigRaw: { - bridge_config = static_cast(request->bridge_config_raw()); - break; - } - case nidaqmx_grpc::CreateAIForceBridgeTwoPointLinChanRequest::BridgeConfigEnumCase::BRIDGE_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for bridge_config was not specified or out of range"); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::AddGlobalChansToTask(::grpc::ServerContext* context, const AddGlobalChansToTaskRequest* request, AddGlobalChansToTaskResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto channel_names_mbcs = convert_from_grpc(request->channel_names()); + auto channel_names = channel_names_mbcs.c_str(); + auto status = library_->AddGlobalChansToTask(task, channel_names); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } - int32 voltage_excit_source; - switch (request->voltage_excit_source_enum_case()) { - case nidaqmx_grpc::CreateAIForceBridgeTwoPointLinChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { - voltage_excit_source = static_cast(request->voltage_excit_source()); - break; - } - case nidaqmx_grpc::CreateAIForceBridgeTwoPointLinChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { - voltage_excit_source = static_cast(request->voltage_excit_source_raw()); - break; - } - case nidaqmx_grpc::CreateAIForceBridgeTwoPointLinChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::AddNetworkDevice(::grpc::ServerContext* context, const AddNetworkDeviceRequest* request, AddNetworkDeviceResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } + try { + auto ip_address_mbcs = convert_from_grpc(request->ip_address()); + auto ip_address = ip_address_mbcs.c_str(); + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + bool32 attempt_reservation = request->attempt_reservation(); + float64 timeout = request->timeout(); - float64 voltage_excit_val = request->voltage_excit_val(); - float64 nominal_bridge_resistance = request->nominal_bridge_resistance(); - float64 first_electrical_val = request->first_electrical_val(); - float64 second_electrical_val = request->second_electrical_val(); - int32 electrical_units; - switch (request->electrical_units_enum_case()) { - case nidaqmx_grpc::CreateAIForceBridgeTwoPointLinChanRequest::ElectricalUnitsEnumCase::kElectricalUnits: { - electrical_units = static_cast(request->electrical_units()); - break; - } - case nidaqmx_grpc::CreateAIForceBridgeTwoPointLinChanRequest::ElectricalUnitsEnumCase::kElectricalUnitsRaw: { - electrical_units = static_cast(request->electrical_units_raw()); - break; - } - case nidaqmx_grpc::CreateAIForceBridgeTwoPointLinChanRequest::ElectricalUnitsEnumCase::ELECTRICAL_UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for electrical_units was not specified or out of range"); - break; + while (true) { + auto status = library_->AddNetworkDevice(ip_address, device_name, attempt_reservation, timeout, nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + uInt32 device_name_out_buffer_size = status; + + std::string device_name_out; + if (device_name_out_buffer_size > 0) { + device_name_out.resize(device_name_out_buffer_size - 1); + } + status = library_->AddNetworkDevice(ip_address, device_name, attempt_reservation, timeout, (char*)device_name_out.data(), device_name_out_buffer_size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(device_name_out_buffer_size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + std::string device_name_out_utf8; + convert_to_grpc(device_name_out, &device_name_out_utf8); + response->set_device_name_out(device_name_out_utf8); + nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_device_name_out())); + return ::grpc::Status::OK; } } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } - float64 first_physical_val = request->first_physical_val(); - float64 second_physical_val = request->second_physical_val(); - int32 physical_units; - switch (request->physical_units_enum_case()) { - case nidaqmx_grpc::CreateAIForceBridgeTwoPointLinChanRequest::PhysicalUnitsEnumCase::kPhysicalUnits: { - physical_units = static_cast(request->physical_units()); - break; - } - case nidaqmx_grpc::CreateAIForceBridgeTwoPointLinChanRequest::PhysicalUnitsEnumCase::kPhysicalUnitsRaw: { - physical_units = static_cast(request->physical_units_raw()); - break; - } - case nidaqmx_grpc::CreateAIForceBridgeTwoPointLinChanRequest::PhysicalUnitsEnumCase::PHYSICAL_UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for physical_units was not specified or out of range"); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::AreConfiguredCDAQSyncPortsDisconnected(::grpc::ServerContext* context, const AreConfiguredCDAQSyncPortsDisconnectedRequest* request, AreConfiguredCDAQSyncPortsDisconnectedResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto chassis_devices_ports_mbcs = convert_from_grpc(request->chassis_devices_ports()); + auto chassis_devices_ports = chassis_devices_ports_mbcs.c_str(); + float64 timeout = request->timeout(); + bool32 disconnected_ports_exist {}; + auto status = library_->AreConfiguredCDAQSyncPortsDisconnected(chassis_devices_ports, timeout, &disconnected_ports_exist); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } + response->set_status(status); + response->set_disconnected_ports_exist(disconnected_ports_exist); + return ::grpc::Status::OK; } - - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateAIForceBridgeTwoPointLinChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, bridge_config, voltage_excit_source, voltage_excit_val, nominal_bridge_resistance, first_electrical_val, second_electrical_val, electrical_units, first_physical_val, second_physical_val, physical_units, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAIForceIEPEChan(::grpc::ServerContext* context, const CreateAIForceIEPEChanRequest* request, CreateAIForceIEPEChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - int32 terminal_config; - switch (request->terminal_config_enum_case()) { - case nidaqmx_grpc::CreateAIForceIEPEChanRequest::TerminalConfigEnumCase::kTerminalConfig: { - terminal_config = static_cast(request->terminal_config()); - break; - } - case nidaqmx_grpc::CreateAIForceIEPEChanRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { - terminal_config = static_cast(request->terminal_config_raw()); - break; - } - case nidaqmx_grpc::CreateAIForceIEPEChanRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::AutoConfigureCDAQSyncConnections(::grpc::ServerContext* context, const AutoConfigureCDAQSyncConnectionsRequest* request, AutoConfigureCDAQSyncConnectionsResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAIForceIEPEChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateAIForceIEPEChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateAIForceIEPEChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + try { + auto chassis_devices_ports_mbcs = convert_from_grpc(request->chassis_devices_ports()); + auto chassis_devices_ports = chassis_devices_ports_mbcs.c_str(); + float64 timeout = request->timeout(); + auto status = library_->AutoConfigureCDAQSyncConnections(chassis_devices_ports, timeout); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } + response->set_status(status); + return ::grpc::Status::OK; } - - float64 sensitivity = request->sensitivity(); - int32 sensitivity_units; - switch (request->sensitivity_units_enum_case()) { - case nidaqmx_grpc::CreateAIForceIEPEChanRequest::SensitivityUnitsEnumCase::kSensitivityUnits: { - sensitivity_units = static_cast(request->sensitivity_units()); - break; - } - case nidaqmx_grpc::CreateAIForceIEPEChanRequest::SensitivityUnitsEnumCase::kSensitivityUnitsRaw: { - sensitivity_units = static_cast(request->sensitivity_units_raw()); - break; - } - case nidaqmx_grpc::CreateAIForceIEPEChanRequest::SensitivityUnitsEnumCase::SENSITIVITY_UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sensitivity_units was not specified or out of range"); - break; - } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } + } - int32 current_excit_source; - switch (request->current_excit_source_enum_case()) { - case nidaqmx_grpc::CreateAIForceIEPEChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSource: { - current_excit_source = static_cast(request->current_excit_source()); - break; - } - case nidaqmx_grpc::CreateAIForceIEPEChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSourceRaw: { - current_excit_source = static_cast(request->current_excit_source_raw()); - break; - } - case nidaqmx_grpc::CreateAIForceIEPEChanRequest::CurrentExcitSourceEnumCase::CURRENT_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for current_excit_source was not specified or out of range"); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CalculateReversePolyCoeff(::grpc::ServerContext* context, const CalculateReversePolyCoeffRequest* request, CalculateReversePolyCoeffResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto forward_coeffs = const_cast(request->forward_coeffs().data()); + uInt32 num_forward_coeffs_in = static_cast(request->forward_coeffs().size()); + float64 min_val_x = request->min_val_x(); + float64 max_val_x = request->max_val_x(); + int32 num_points_to_compute = request->num_points_to_compute(); + int32 reverse_poly_order = request->reverse_poly_order(); + response->mutable_reverse_coeffs()->Resize((reverse_poly_order < 0) ? num_forward_coeffs_in : reverse_poly_order + 1, 0); + float64* reverse_coeffs = response->mutable_reverse_coeffs()->mutable_data(); + auto status = library_->CalculateReversePolyCoeff(forward_coeffs, num_forward_coeffs_in, min_val_x, max_val_x, num_points_to_compute, reverse_poly_order, reverse_coeffs); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } + response->set_status(status); + return ::grpc::Status::OK; } - - float64 current_excit_val = request->current_excit_val(); - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateAIForceIEPEChan(task, physical_channel, name_to_assign_to_channel, terminal_config, min_val, max_val, units, sensitivity, sensitivity_units, current_excit_source, current_excit_val, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAIFreqVoltageChan(::grpc::ServerContext* context, const CreateAIFreqVoltageChanRequest* request, CreateAIFreqVoltageChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAIFreqVoltageChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateAIFreqVoltageChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateAIFreqVoltageChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; - } - } - - float64 threshold_level = request->threshold_level(); - float64 hysteresis = request->hysteresis(); - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateAIFreqVoltageChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, threshold_level, hysteresis, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAIMicrophoneChan(::grpc::ServerContext* context, const CreateAIMicrophoneChanRequest* request, CreateAIMicrophoneChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - int32 terminal_config; - switch (request->terminal_config_enum_case()) { - case nidaqmx_grpc::CreateAIMicrophoneChanRequest::TerminalConfigEnumCase::kTerminalConfig: { - terminal_config = static_cast(request->terminal_config()); - break; - } - case nidaqmx_grpc::CreateAIMicrophoneChanRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { - terminal_config = static_cast(request->terminal_config_raw()); - break; - } - case nidaqmx_grpc::CreateAIMicrophoneChanRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CfgAnlgEdgeRefTrig(::grpc::ServerContext* context, const CfgAnlgEdgeRefTrigRequest* request, CfgAnlgEdgeRefTrigResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAIMicrophoneChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateAIMicrophoneChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateAIMicrophoneChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto trigger_source_mbcs = convert_from_grpc(request->trigger_source()); + auto trigger_source = trigger_source_mbcs.c_str(); + int32 trigger_slope; + switch (request->trigger_slope_enum_case()) { + case nidaqmx_grpc::CfgAnlgEdgeRefTrigRequest::TriggerSlopeEnumCase::kTriggerSlope: { + trigger_slope = static_cast(request->trigger_slope()); + break; + } + case nidaqmx_grpc::CfgAnlgEdgeRefTrigRequest::TriggerSlopeEnumCase::kTriggerSlopeRaw: { + trigger_slope = static_cast(request->trigger_slope_raw()); + break; + } + case nidaqmx_grpc::CfgAnlgEdgeRefTrigRequest::TriggerSlopeEnumCase::TRIGGER_SLOPE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for trigger_slope was not specified or out of range"); + break; + } } - } - float64 mic_sensitivity = request->mic_sensitivity(); - float64 max_snd_press_level = request->max_snd_press_level(); - int32 current_excit_source; - switch (request->current_excit_source_enum_case()) { - case nidaqmx_grpc::CreateAIMicrophoneChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSource: { - current_excit_source = static_cast(request->current_excit_source()); - break; - } - case nidaqmx_grpc::CreateAIMicrophoneChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSourceRaw: { - current_excit_source = static_cast(request->current_excit_source_raw()); - break; - } - case nidaqmx_grpc::CreateAIMicrophoneChanRequest::CurrentExcitSourceEnumCase::CURRENT_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for current_excit_source was not specified or out of range"); - break; + float64 trigger_level = request->trigger_level(); + uInt32 pretrigger_samples = request->pretrigger_samples(); + auto status = library_->CfgAnlgEdgeRefTrig(task, trigger_source, trigger_slope, trigger_level, pretrigger_samples); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - float64 current_excit_val = request->current_excit_val(); - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateAIMicrophoneChan(task, physical_channel, name_to_assign_to_channel, terminal_config, units, mic_sensitivity, max_snd_press_level, current_excit_source, current_excit_val, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAIPosEddyCurrProxProbeChan(::grpc::ServerContext* context, const CreateAIPosEddyCurrProxProbeChanRequest* request, CreateAIPosEddyCurrProxProbeChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAIPosEddyCurrProxProbeChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateAIPosEddyCurrProxProbeChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateAIPosEddyCurrProxProbeChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; - } - } - - float64 sensitivity = request->sensitivity(); - int32 sensitivity_units; - switch (request->sensitivity_units_enum_case()) { - case nidaqmx_grpc::CreateAIPosEddyCurrProxProbeChanRequest::SensitivityUnitsEnumCase::kSensitivityUnits: { - sensitivity_units = static_cast(request->sensitivity_units()); - break; - } - case nidaqmx_grpc::CreateAIPosEddyCurrProxProbeChanRequest::SensitivityUnitsEnumCase::kSensitivityUnitsRaw: { - sensitivity_units = static_cast(request->sensitivity_units_raw()); - break; - } - case nidaqmx_grpc::CreateAIPosEddyCurrProxProbeChanRequest::SensitivityUnitsEnumCase::SENSITIVITY_UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sensitivity_units was not specified or out of range"); - break; - } - } - - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateAIPosEddyCurrProxProbeChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, sensitivity, sensitivity_units, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAIPosLVDTChan(::grpc::ServerContext* context, const CreateAIPosLVDTChanRequest* request, CreateAIPosLVDTChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAIPosLVDTChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateAIPosLVDTChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateAIPosLVDTChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CfgAnlgEdgeStartTrig(::grpc::ServerContext* context, const CfgAnlgEdgeStartTrigRequest* request, CfgAnlgEdgeStartTrigResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - - float64 sensitivity = request->sensitivity(); - int32 sensitivity_units; - switch (request->sensitivity_units_enum_case()) { - case nidaqmx_grpc::CreateAIPosLVDTChanRequest::SensitivityUnitsEnumCase::kSensitivityUnits: { - sensitivity_units = static_cast(request->sensitivity_units()); - break; - } - case nidaqmx_grpc::CreateAIPosLVDTChanRequest::SensitivityUnitsEnumCase::kSensitivityUnitsRaw: { - sensitivity_units = static_cast(request->sensitivity_units_raw()); - break; + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto trigger_source_mbcs = convert_from_grpc(request->trigger_source()); + auto trigger_source = trigger_source_mbcs.c_str(); + int32 trigger_slope; + switch (request->trigger_slope_enum_case()) { + case nidaqmx_grpc::CfgAnlgEdgeStartTrigRequest::TriggerSlopeEnumCase::kTriggerSlope: { + trigger_slope = static_cast(request->trigger_slope()); + break; + } + case nidaqmx_grpc::CfgAnlgEdgeStartTrigRequest::TriggerSlopeEnumCase::kTriggerSlopeRaw: { + trigger_slope = static_cast(request->trigger_slope_raw()); + break; + } + case nidaqmx_grpc::CfgAnlgEdgeStartTrigRequest::TriggerSlopeEnumCase::TRIGGER_SLOPE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for trigger_slope was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIPosLVDTChanRequest::SensitivityUnitsEnumCase::SENSITIVITY_UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sensitivity_units was not specified or out of range"); - break; + + float64 trigger_level = request->trigger_level(); + auto status = library_->CfgAnlgEdgeStartTrig(task, trigger_source, trigger_slope, trigger_level); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } - int32 voltage_excit_source; - switch (request->voltage_excit_source_enum_case()) { - case nidaqmx_grpc::CreateAIPosLVDTChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { - voltage_excit_source = static_cast(request->voltage_excit_source()); - break; - } - case nidaqmx_grpc::CreateAIPosLVDTChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { - voltage_excit_source = static_cast(request->voltage_excit_source_raw()); - break; - } - case nidaqmx_grpc::CreateAIPosLVDTChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CfgAnlgMultiEdgeRefTrig(::grpc::ServerContext* context, const CfgAnlgMultiEdgeRefTrigRequest* request, CfgAnlgMultiEdgeRefTrigResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto trigger_sources_mbcs = convert_from_grpc(request->trigger_sources()); + auto trigger_sources = trigger_sources_mbcs.c_str(); + auto trigger_slope_array_vector = std::vector(); + trigger_slope_array_vector.reserve(request->trigger_slope_array().size()); + std::transform( + request->trigger_slope_array().begin(), + request->trigger_slope_array().end(), + std::back_inserter(trigger_slope_array_vector), + [](auto x) { return x; }); + auto trigger_slope_array = trigger_slope_array_vector.data(); - float64 voltage_excit_val = request->voltage_excit_val(); - float64 voltage_excit_freq = request->voltage_excit_freq(); - int32 ac_excit_wire_mode; - switch (request->ac_excit_wire_mode_enum_case()) { - case nidaqmx_grpc::CreateAIPosLVDTChanRequest::AcExcitWireModeEnumCase::kAcExcitWireMode: { - ac_excit_wire_mode = static_cast(request->ac_excit_wire_mode()); - break; - } - case nidaqmx_grpc::CreateAIPosLVDTChanRequest::AcExcitWireModeEnumCase::kAcExcitWireModeRaw: { - ac_excit_wire_mode = static_cast(request->ac_excit_wire_mode_raw()); - break; + auto trigger_level_array = const_cast(request->trigger_level_array().data()); + uInt32 pretrigger_samples = request->pretrigger_samples(); + auto array_size_determine_from_sizes = std::array + { + request->trigger_slope_array_size(), + request->trigger_level_array_size() + }; + const auto array_size_size_calculation = calculate_linked_array_size(array_size_determine_from_sizes, false); + + if (array_size_size_calculation.match_state == MatchState::MISMATCH) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The sizes of linked repeated fields [trigger_slope_array, trigger_level_array] do not match"); } - case nidaqmx_grpc::CreateAIPosLVDTChanRequest::AcExcitWireModeEnumCase::AC_EXCIT_WIRE_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for ac_excit_wire_mode was not specified or out of range"); - break; + auto array_size = array_size_size_calculation.size; + + auto status = library_->CfgAnlgMultiEdgeRefTrig(task, trigger_sources, trigger_slope_array, trigger_level_array, pretrigger_samples, array_size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateAIPosLVDTChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, sensitivity, sensitivity_units, voltage_excit_source, voltage_excit_val, voltage_excit_freq, ac_excit_wire_mode, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAIPosRVDTChan(::grpc::ServerContext* context, const CreateAIPosRVDTChanRequest* request, CreateAIPosRVDTChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAIPosRVDTChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateAIPosRVDTChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateAIPosRVDTChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CfgAnlgMultiEdgeStartTrig(::grpc::ServerContext* context, const CfgAnlgMultiEdgeStartTrigRequest* request, CfgAnlgMultiEdgeStartTrigResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto trigger_sources_mbcs = convert_from_grpc(request->trigger_sources()); + auto trigger_sources = trigger_sources_mbcs.c_str(); + auto trigger_slope_array_vector = std::vector(); + trigger_slope_array_vector.reserve(request->trigger_slope_array().size()); + std::transform( + request->trigger_slope_array().begin(), + request->trigger_slope_array().end(), + std::back_inserter(trigger_slope_array_vector), + [](auto x) { return x; }); + auto trigger_slope_array = trigger_slope_array_vector.data(); - float64 sensitivity = request->sensitivity(); - int32 sensitivity_units; - switch (request->sensitivity_units_enum_case()) { - case nidaqmx_grpc::CreateAIPosRVDTChanRequest::SensitivityUnitsEnumCase::kSensitivityUnits: { - sensitivity_units = static_cast(request->sensitivity_units()); - break; - } - case nidaqmx_grpc::CreateAIPosRVDTChanRequest::SensitivityUnitsEnumCase::kSensitivityUnitsRaw: { - sensitivity_units = static_cast(request->sensitivity_units_raw()); - break; - } - case nidaqmx_grpc::CreateAIPosRVDTChanRequest::SensitivityUnitsEnumCase::SENSITIVITY_UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sensitivity_units was not specified or out of range"); - break; - } - } + auto trigger_level_array = const_cast(request->trigger_level_array().data()); + auto array_size_determine_from_sizes = std::array + { + request->trigger_slope_array_size(), + request->trigger_level_array_size() + }; + const auto array_size_size_calculation = calculate_linked_array_size(array_size_determine_from_sizes, false); - int32 voltage_excit_source; - switch (request->voltage_excit_source_enum_case()) { - case nidaqmx_grpc::CreateAIPosRVDTChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { - voltage_excit_source = static_cast(request->voltage_excit_source()); - break; - } - case nidaqmx_grpc::CreateAIPosRVDTChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { - voltage_excit_source = static_cast(request->voltage_excit_source_raw()); - break; + if (array_size_size_calculation.match_state == MatchState::MISMATCH) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The sizes of linked repeated fields [trigger_slope_array, trigger_level_array] do not match"); } - case nidaqmx_grpc::CreateAIPosRVDTChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); - break; - } - } + auto array_size = array_size_size_calculation.size; - float64 voltage_excit_val = request->voltage_excit_val(); - float64 voltage_excit_freq = request->voltage_excit_freq(); - int32 ac_excit_wire_mode; - switch (request->ac_excit_wire_mode_enum_case()) { - case nidaqmx_grpc::CreateAIPosRVDTChanRequest::AcExcitWireModeEnumCase::kAcExcitWireMode: { - ac_excit_wire_mode = static_cast(request->ac_excit_wire_mode()); - break; - } - case nidaqmx_grpc::CreateAIPosRVDTChanRequest::AcExcitWireModeEnumCase::kAcExcitWireModeRaw: { - ac_excit_wire_mode = static_cast(request->ac_excit_wire_mode_raw()); - break; - } - case nidaqmx_grpc::CreateAIPosRVDTChanRequest::AcExcitWireModeEnumCase::AC_EXCIT_WIRE_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for ac_excit_wire_mode was not specified or out of range"); - break; + auto status = library_->CfgAnlgMultiEdgeStartTrig(task, trigger_sources, trigger_slope_array, trigger_level_array, array_size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateAIPosRVDTChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, sensitivity, sensitivity_units, voltage_excit_source, voltage_excit_val, voltage_excit_freq, ac_excit_wire_mode, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAIPowerChan(::grpc::ServerContext* context, const CreateAIPowerChanRequest* request, CreateAIPowerChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 voltage_setpoint = request->voltage_setpoint(); - float64 current_setpoint = request->current_setpoint(); - bool32 output_enable = request->output_enable(); - auto status = library_->CreateAIPowerChan(task, physical_channel, name_to_assign_to_channel, voltage_setpoint, current_setpoint, output_enable); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAIPressureBridgePolynomialChan(::grpc::ServerContext* context, const CreateAIPressureBridgePolynomialChanRequest* request, CreateAIPressureBridgePolynomialChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAIPressureBridgePolynomialChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateAIPressureBridgePolynomialChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateAIPressureBridgePolynomialChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CfgAnlgWindowRefTrig(::grpc::ServerContext* context, const CfgAnlgWindowRefTrigRequest* request, CfgAnlgWindowRefTrigResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - - int32 bridge_config; - switch (request->bridge_config_enum_case()) { - case nidaqmx_grpc::CreateAIPressureBridgePolynomialChanRequest::BridgeConfigEnumCase::kBridgeConfig: { - bridge_config = static_cast(request->bridge_config()); - break; - } - case nidaqmx_grpc::CreateAIPressureBridgePolynomialChanRequest::BridgeConfigEnumCase::kBridgeConfigRaw: { - bridge_config = static_cast(request->bridge_config_raw()); - break; - } - case nidaqmx_grpc::CreateAIPressureBridgePolynomialChanRequest::BridgeConfigEnumCase::BRIDGE_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for bridge_config was not specified or out of range"); - break; + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto trigger_source_mbcs = convert_from_grpc(request->trigger_source()); + auto trigger_source = trigger_source_mbcs.c_str(); + int32 trigger_when; + switch (request->trigger_when_enum_case()) { + case nidaqmx_grpc::CfgAnlgWindowRefTrigRequest::TriggerWhenEnumCase::kTriggerWhen: { + trigger_when = static_cast(request->trigger_when()); + break; + } + case nidaqmx_grpc::CfgAnlgWindowRefTrigRequest::TriggerWhenEnumCase::kTriggerWhenRaw: { + trigger_when = static_cast(request->trigger_when_raw()); + break; + } + case nidaqmx_grpc::CfgAnlgWindowRefTrigRequest::TriggerWhenEnumCase::TRIGGER_WHEN_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for trigger_when was not specified or out of range"); + break; + } } - } - int32 voltage_excit_source; - switch (request->voltage_excit_source_enum_case()) { - case nidaqmx_grpc::CreateAIPressureBridgePolynomialChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { - voltage_excit_source = static_cast(request->voltage_excit_source()); - break; - } - case nidaqmx_grpc::CreateAIPressureBridgePolynomialChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { - voltage_excit_source = static_cast(request->voltage_excit_source_raw()); - break; - } - case nidaqmx_grpc::CreateAIPressureBridgePolynomialChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); - break; + float64 window_top = request->window_top(); + float64 window_bottom = request->window_bottom(); + uInt32 pretrigger_samples = request->pretrigger_samples(); + auto status = library_->CfgAnlgWindowRefTrig(task, trigger_source, trigger_when, window_top, window_bottom, pretrigger_samples); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - float64 voltage_excit_val = request->voltage_excit_val(); - float64 nominal_bridge_resistance = request->nominal_bridge_resistance(); - auto forward_coeffs = const_cast(request->forward_coeffs().data()); - uInt32 num_forward_coeffs = static_cast(request->forward_coeffs().size()); - auto reverse_coeffs = const_cast(request->reverse_coeffs().data()); - uInt32 num_reverse_coeffs = static_cast(request->reverse_coeffs().size()); - int32 electrical_units; - switch (request->electrical_units_enum_case()) { - case nidaqmx_grpc::CreateAIPressureBridgePolynomialChanRequest::ElectricalUnitsEnumCase::kElectricalUnits: { - electrical_units = static_cast(request->electrical_units()); - break; - } - case nidaqmx_grpc::CreateAIPressureBridgePolynomialChanRequest::ElectricalUnitsEnumCase::kElectricalUnitsRaw: { - electrical_units = static_cast(request->electrical_units_raw()); - break; - } - case nidaqmx_grpc::CreateAIPressureBridgePolynomialChanRequest::ElectricalUnitsEnumCase::ELECTRICAL_UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for electrical_units was not specified or out of range"); - break; - } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } + } - int32 physical_units; - switch (request->physical_units_enum_case()) { - case nidaqmx_grpc::CreateAIPressureBridgePolynomialChanRequest::PhysicalUnitsEnumCase::kPhysicalUnits: { - physical_units = static_cast(request->physical_units()); - break; - } - case nidaqmx_grpc::CreateAIPressureBridgePolynomialChanRequest::PhysicalUnitsEnumCase::kPhysicalUnitsRaw: { - physical_units = static_cast(request->physical_units_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CfgAnlgWindowStartTrig(::grpc::ServerContext* context, const CfgAnlgWindowStartTrigRequest* request, CfgAnlgWindowStartTrigResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto trigger_source_mbcs = convert_from_grpc(request->trigger_source()); + auto trigger_source = trigger_source_mbcs.c_str(); + int32 trigger_when; + switch (request->trigger_when_enum_case()) { + case nidaqmx_grpc::CfgAnlgWindowStartTrigRequest::TriggerWhenEnumCase::kTriggerWhen: { + trigger_when = static_cast(request->trigger_when()); + break; + } + case nidaqmx_grpc::CfgAnlgWindowStartTrigRequest::TriggerWhenEnumCase::kTriggerWhenRaw: { + trigger_when = static_cast(request->trigger_when_raw()); + break; + } + case nidaqmx_grpc::CfgAnlgWindowStartTrigRequest::TriggerWhenEnumCase::TRIGGER_WHEN_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for trigger_when was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIPressureBridgePolynomialChanRequest::PhysicalUnitsEnumCase::PHYSICAL_UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for physical_units was not specified or out of range"); - break; + + float64 window_top = request->window_top(); + float64 window_bottom = request->window_bottom(); + auto status = library_->CfgAnlgWindowStartTrig(task, trigger_source, trigger_when, window_top, window_bottom); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateAIPressureBridgePolynomialChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, bridge_config, voltage_excit_source, voltage_excit_val, nominal_bridge_resistance, forward_coeffs, num_forward_coeffs, reverse_coeffs, num_reverse_coeffs, electrical_units, physical_units, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAIPressureBridgeTableChan(::grpc::ServerContext* context, const CreateAIPressureBridgeTableChanRequest* request, CreateAIPressureBridgeTableChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAIPressureBridgeTableChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateAIPressureBridgeTableChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateAIPressureBridgeTableChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CfgBurstHandshakingTimingExportClock(::grpc::ServerContext* context, const CfgBurstHandshakingTimingExportClockRequest* request, CfgBurstHandshakingTimingExportClockResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - - int32 bridge_config; - switch (request->bridge_config_enum_case()) { - case nidaqmx_grpc::CreateAIPressureBridgeTableChanRequest::BridgeConfigEnumCase::kBridgeConfig: { - bridge_config = static_cast(request->bridge_config()); - break; - } - case nidaqmx_grpc::CreateAIPressureBridgeTableChanRequest::BridgeConfigEnumCase::kBridgeConfigRaw: { - bridge_config = static_cast(request->bridge_config_raw()); - break; - } - case nidaqmx_grpc::CreateAIPressureBridgeTableChanRequest::BridgeConfigEnumCase::BRIDGE_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for bridge_config was not specified or out of range"); - break; + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 sample_mode; + switch (request->sample_mode_enum_case()) { + case nidaqmx_grpc::CfgBurstHandshakingTimingExportClockRequest::SampleModeEnumCase::kSampleMode: { + sample_mode = static_cast(request->sample_mode()); + break; + } + case nidaqmx_grpc::CfgBurstHandshakingTimingExportClockRequest::SampleModeEnumCase::kSampleModeRaw: { + sample_mode = static_cast(request->sample_mode_raw()); + break; + } + case nidaqmx_grpc::CfgBurstHandshakingTimingExportClockRequest::SampleModeEnumCase::SAMPLE_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sample_mode was not specified or out of range"); + break; + } } - } - int32 voltage_excit_source; - switch (request->voltage_excit_source_enum_case()) { - case nidaqmx_grpc::CreateAIPressureBridgeTableChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { - voltage_excit_source = static_cast(request->voltage_excit_source()); - break; - } - case nidaqmx_grpc::CreateAIPressureBridgeTableChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { - voltage_excit_source = static_cast(request->voltage_excit_source_raw()); - break; - } - case nidaqmx_grpc::CreateAIPressureBridgeTableChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); - break; + uInt64 samps_per_chan = request->samps_per_chan(); + float64 sample_clk_rate = request->sample_clk_rate(); + auto sample_clk_outp_term_mbcs = convert_from_grpc(request->sample_clk_outp_term()); + auto sample_clk_outp_term = sample_clk_outp_term_mbcs.c_str(); + int32 sample_clk_pulse_polarity; + switch (request->sample_clk_pulse_polarity_enum_case()) { + case nidaqmx_grpc::CfgBurstHandshakingTimingExportClockRequest::SampleClkPulsePolarityEnumCase::kSampleClkPulsePolarity: { + sample_clk_pulse_polarity = static_cast(request->sample_clk_pulse_polarity()); + break; + } + case nidaqmx_grpc::CfgBurstHandshakingTimingExportClockRequest::SampleClkPulsePolarityEnumCase::kSampleClkPulsePolarityRaw: { + sample_clk_pulse_polarity = static_cast(request->sample_clk_pulse_polarity_raw()); + break; + } + case nidaqmx_grpc::CfgBurstHandshakingTimingExportClockRequest::SampleClkPulsePolarityEnumCase::SAMPLE_CLK_PULSE_POLARITY_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sample_clk_pulse_polarity was not specified or out of range"); + break; + } } - } - float64 voltage_excit_val = request->voltage_excit_val(); - float64 nominal_bridge_resistance = request->nominal_bridge_resistance(); - auto electrical_vals = const_cast(request->electrical_vals().data()); - uInt32 num_electrical_vals = static_cast(request->electrical_vals().size()); - int32 electrical_units; - switch (request->electrical_units_enum_case()) { - case nidaqmx_grpc::CreateAIPressureBridgeTableChanRequest::ElectricalUnitsEnumCase::kElectricalUnits: { - electrical_units = static_cast(request->electrical_units()); - break; - } - case nidaqmx_grpc::CreateAIPressureBridgeTableChanRequest::ElectricalUnitsEnumCase::kElectricalUnitsRaw: { - electrical_units = static_cast(request->electrical_units_raw()); - break; - } - case nidaqmx_grpc::CreateAIPressureBridgeTableChanRequest::ElectricalUnitsEnumCase::ELECTRICAL_UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for electrical_units was not specified or out of range"); - break; + int32 pause_when; + switch (request->pause_when_enum_case()) { + case nidaqmx_grpc::CfgBurstHandshakingTimingExportClockRequest::PauseWhenEnumCase::kPauseWhen: { + pause_when = static_cast(request->pause_when()); + break; + } + case nidaqmx_grpc::CfgBurstHandshakingTimingExportClockRequest::PauseWhenEnumCase::kPauseWhenRaw: { + pause_when = static_cast(request->pause_when_raw()); + break; + } + case nidaqmx_grpc::CfgBurstHandshakingTimingExportClockRequest::PauseWhenEnumCase::PAUSE_WHEN_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for pause_when was not specified or out of range"); + break; + } } - } - auto physical_vals = const_cast(request->physical_vals().data()); - uInt32 num_physical_vals = static_cast(request->physical_vals().size()); - int32 physical_units; - switch (request->physical_units_enum_case()) { - case nidaqmx_grpc::CreateAIPressureBridgeTableChanRequest::PhysicalUnitsEnumCase::kPhysicalUnits: { - physical_units = static_cast(request->physical_units()); - break; - } - case nidaqmx_grpc::CreateAIPressureBridgeTableChanRequest::PhysicalUnitsEnumCase::kPhysicalUnitsRaw: { - physical_units = static_cast(request->physical_units_raw()); - break; + int32 ready_event_active_level; + switch (request->ready_event_active_level_enum_case()) { + case nidaqmx_grpc::CfgBurstHandshakingTimingExportClockRequest::ReadyEventActiveLevelEnumCase::kReadyEventActiveLevel: { + ready_event_active_level = static_cast(request->ready_event_active_level()); + break; + } + case nidaqmx_grpc::CfgBurstHandshakingTimingExportClockRequest::ReadyEventActiveLevelEnumCase::kReadyEventActiveLevelRaw: { + ready_event_active_level = static_cast(request->ready_event_active_level_raw()); + break; + } + case nidaqmx_grpc::CfgBurstHandshakingTimingExportClockRequest::ReadyEventActiveLevelEnumCase::READY_EVENT_ACTIVE_LEVEL_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for ready_event_active_level was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIPressureBridgeTableChanRequest::PhysicalUnitsEnumCase::PHYSICAL_UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for physical_units was not specified or out of range"); - break; + + auto status = library_->CfgBurstHandshakingTimingExportClock(task, sample_mode, samps_per_chan, sample_clk_rate, sample_clk_outp_term, sample_clk_pulse_polarity, pause_when, ready_event_active_level); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateAIPressureBridgeTableChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, bridge_config, voltage_excit_source, voltage_excit_val, nominal_bridge_resistance, electrical_vals, num_electrical_vals, electrical_units, physical_vals, num_physical_vals, physical_units, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAIPressureBridgeTwoPointLinChan(::grpc::ServerContext* context, const CreateAIPressureBridgeTwoPointLinChanRequest* request, CreateAIPressureBridgeTwoPointLinChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAIPressureBridgeTwoPointLinChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateAIPressureBridgeTwoPointLinChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateAIPressureBridgeTwoPointLinChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CfgBurstHandshakingTimingImportClock(::grpc::ServerContext* context, const CfgBurstHandshakingTimingImportClockRequest* request, CfgBurstHandshakingTimingImportClockResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - - int32 bridge_config; - switch (request->bridge_config_enum_case()) { - case nidaqmx_grpc::CreateAIPressureBridgeTwoPointLinChanRequest::BridgeConfigEnumCase::kBridgeConfig: { - bridge_config = static_cast(request->bridge_config()); - break; - } - case nidaqmx_grpc::CreateAIPressureBridgeTwoPointLinChanRequest::BridgeConfigEnumCase::kBridgeConfigRaw: { - bridge_config = static_cast(request->bridge_config_raw()); - break; - } - case nidaqmx_grpc::CreateAIPressureBridgeTwoPointLinChanRequest::BridgeConfigEnumCase::BRIDGE_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for bridge_config was not specified or out of range"); - break; + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 sample_mode; + switch (request->sample_mode_enum_case()) { + case nidaqmx_grpc::CfgBurstHandshakingTimingImportClockRequest::SampleModeEnumCase::kSampleMode: { + sample_mode = static_cast(request->sample_mode()); + break; + } + case nidaqmx_grpc::CfgBurstHandshakingTimingImportClockRequest::SampleModeEnumCase::kSampleModeRaw: { + sample_mode = static_cast(request->sample_mode_raw()); + break; + } + case nidaqmx_grpc::CfgBurstHandshakingTimingImportClockRequest::SampleModeEnumCase::SAMPLE_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sample_mode was not specified or out of range"); + break; + } } - } - int32 voltage_excit_source; - switch (request->voltage_excit_source_enum_case()) { - case nidaqmx_grpc::CreateAIPressureBridgeTwoPointLinChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { - voltage_excit_source = static_cast(request->voltage_excit_source()); - break; + uInt64 samps_per_chan = request->samps_per_chan(); + float64 sample_clk_rate = request->sample_clk_rate(); + auto sample_clk_src_mbcs = convert_from_grpc(request->sample_clk_src()); + auto sample_clk_src = sample_clk_src_mbcs.c_str(); + int32 sample_clk_active_edge; + switch (request->sample_clk_active_edge_enum_case()) { + case nidaqmx_grpc::CfgBurstHandshakingTimingImportClockRequest::SampleClkActiveEdgeEnumCase::kSampleClkActiveEdge: { + sample_clk_active_edge = static_cast(request->sample_clk_active_edge()); + break; + } + case nidaqmx_grpc::CfgBurstHandshakingTimingImportClockRequest::SampleClkActiveEdgeEnumCase::kSampleClkActiveEdgeRaw: { + sample_clk_active_edge = static_cast(request->sample_clk_active_edge_raw()); + break; + } + case nidaqmx_grpc::CfgBurstHandshakingTimingImportClockRequest::SampleClkActiveEdgeEnumCase::SAMPLE_CLK_ACTIVE_EDGE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sample_clk_active_edge was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIPressureBridgeTwoPointLinChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { - voltage_excit_source = static_cast(request->voltage_excit_source_raw()); - break; + + int32 pause_when; + switch (request->pause_when_enum_case()) { + case nidaqmx_grpc::CfgBurstHandshakingTimingImportClockRequest::PauseWhenEnumCase::kPauseWhen: { + pause_when = static_cast(request->pause_when()); + break; + } + case nidaqmx_grpc::CfgBurstHandshakingTimingImportClockRequest::PauseWhenEnumCase::kPauseWhenRaw: { + pause_when = static_cast(request->pause_when_raw()); + break; + } + case nidaqmx_grpc::CfgBurstHandshakingTimingImportClockRequest::PauseWhenEnumCase::PAUSE_WHEN_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for pause_when was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIPressureBridgeTwoPointLinChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); - break; + + int32 ready_event_active_level; + switch (request->ready_event_active_level_enum_case()) { + case nidaqmx_grpc::CfgBurstHandshakingTimingImportClockRequest::ReadyEventActiveLevelEnumCase::kReadyEventActiveLevel: { + ready_event_active_level = static_cast(request->ready_event_active_level()); + break; + } + case nidaqmx_grpc::CfgBurstHandshakingTimingImportClockRequest::ReadyEventActiveLevelEnumCase::kReadyEventActiveLevelRaw: { + ready_event_active_level = static_cast(request->ready_event_active_level_raw()); + break; + } + case nidaqmx_grpc::CfgBurstHandshakingTimingImportClockRequest::ReadyEventActiveLevelEnumCase::READY_EVENT_ACTIVE_LEVEL_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for ready_event_active_level was not specified or out of range"); + break; + } } - } - float64 voltage_excit_val = request->voltage_excit_val(); - float64 nominal_bridge_resistance = request->nominal_bridge_resistance(); - float64 first_electrical_val = request->first_electrical_val(); - float64 second_electrical_val = request->second_electrical_val(); - int32 electrical_units; - switch (request->electrical_units_enum_case()) { - case nidaqmx_grpc::CreateAIPressureBridgeTwoPointLinChanRequest::ElectricalUnitsEnumCase::kElectricalUnits: { - electrical_units = static_cast(request->electrical_units()); - break; - } - case nidaqmx_grpc::CreateAIPressureBridgeTwoPointLinChanRequest::ElectricalUnitsEnumCase::kElectricalUnitsRaw: { - electrical_units = static_cast(request->electrical_units_raw()); - break; - } - case nidaqmx_grpc::CreateAIPressureBridgeTwoPointLinChanRequest::ElectricalUnitsEnumCase::ELECTRICAL_UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for electrical_units was not specified or out of range"); - break; + auto status = library_->CfgBurstHandshakingTimingImportClock(task, sample_mode, samps_per_chan, sample_clk_rate, sample_clk_src, sample_clk_active_edge, pause_when, ready_event_active_level); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - float64 first_physical_val = request->first_physical_val(); - float64 second_physical_val = request->second_physical_val(); - int32 physical_units; - switch (request->physical_units_enum_case()) { - case nidaqmx_grpc::CreateAIPressureBridgeTwoPointLinChanRequest::PhysicalUnitsEnumCase::kPhysicalUnits: { - physical_units = static_cast(request->physical_units()); - break; - } - case nidaqmx_grpc::CreateAIPressureBridgeTwoPointLinChanRequest::PhysicalUnitsEnumCase::kPhysicalUnitsRaw: { - physical_units = static_cast(request->physical_units_raw()); - break; + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CfgChangeDetectionTiming(::grpc::ServerContext* context, const CfgChangeDetectionTimingRequest* request, CfgChangeDetectionTimingResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto rising_edge_chan_mbcs = convert_from_grpc(request->rising_edge_chan()); + auto rising_edge_chan = rising_edge_chan_mbcs.c_str(); + auto falling_edge_chan_mbcs = convert_from_grpc(request->falling_edge_chan()); + auto falling_edge_chan = falling_edge_chan_mbcs.c_str(); + int32 sample_mode; + switch (request->sample_mode_enum_case()) { + case nidaqmx_grpc::CfgChangeDetectionTimingRequest::SampleModeEnumCase::kSampleMode: { + sample_mode = static_cast(request->sample_mode()); + break; + } + case nidaqmx_grpc::CfgChangeDetectionTimingRequest::SampleModeEnumCase::kSampleModeRaw: { + sample_mode = static_cast(request->sample_mode_raw()); + break; + } + case nidaqmx_grpc::CfgChangeDetectionTimingRequest::SampleModeEnumCase::SAMPLE_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sample_mode was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIPressureBridgeTwoPointLinChanRequest::PhysicalUnitsEnumCase::PHYSICAL_UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for physical_units was not specified or out of range"); - break; + + uInt64 samps_per_chan = request->samps_per_chan(); + auto status = library_->CfgChangeDetectionTiming(task, rising_edge_chan, falling_edge_chan, sample_mode, samps_per_chan); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateAIPressureBridgeTwoPointLinChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, bridge_config, voltage_excit_source, voltage_excit_val, nominal_bridge_resistance, first_electrical_val, second_electrical_val, electrical_units, first_physical_val, second_physical_val, physical_units, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAIRTDChan(::grpc::ServerContext* context, const CreateAIRTDChanRequest* request, CreateAIRTDChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAIRTDChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateAIRTDChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateAIRTDChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CfgDigEdgeRefTrig(::grpc::ServerContext* context, const CfgDigEdgeRefTrigRequest* request, CfgDigEdgeRefTrigResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - - int32 rtd_type; - switch (request->rtd_type_enum_case()) { - case nidaqmx_grpc::CreateAIRTDChanRequest::RtdTypeEnumCase::kRtdType: { - rtd_type = static_cast(request->rtd_type()); - break; - } - case nidaqmx_grpc::CreateAIRTDChanRequest::RtdTypeEnumCase::kRtdTypeRaw: { - rtd_type = static_cast(request->rtd_type_raw()); - break; + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto trigger_source_mbcs = convert_from_grpc(request->trigger_source()); + auto trigger_source = trigger_source_mbcs.c_str(); + int32 trigger_edge; + switch (request->trigger_edge_enum_case()) { + case nidaqmx_grpc::CfgDigEdgeRefTrigRequest::TriggerEdgeEnumCase::kTriggerEdge: { + trigger_edge = static_cast(request->trigger_edge()); + break; + } + case nidaqmx_grpc::CfgDigEdgeRefTrigRequest::TriggerEdgeEnumCase::kTriggerEdgeRaw: { + trigger_edge = static_cast(request->trigger_edge_raw()); + break; + } + case nidaqmx_grpc::CfgDigEdgeRefTrigRequest::TriggerEdgeEnumCase::TRIGGER_EDGE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for trigger_edge was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIRTDChanRequest::RtdTypeEnumCase::RTD_TYPE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for rtd_type was not specified or out of range"); - break; + + uInt32 pretrigger_samples = request->pretrigger_samples(); + auto status = library_->CfgDigEdgeRefTrig(task, trigger_source, trigger_edge, pretrigger_samples); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } + } - int32 resistance_config; - switch (request->resistance_config_enum_case()) { - case nidaqmx_grpc::CreateAIRTDChanRequest::ResistanceConfigEnumCase::kResistanceConfig: { - resistance_config = static_cast(request->resistance_config()); - break; - } - case nidaqmx_grpc::CreateAIRTDChanRequest::ResistanceConfigEnumCase::kResistanceConfigRaw: { - resistance_config = static_cast(request->resistance_config_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CfgDigEdgeStartTrig(::grpc::ServerContext* context, const CfgDigEdgeStartTrigRequest* request, CfgDigEdgeStartTrigResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto trigger_source_mbcs = convert_from_grpc(request->trigger_source()); + auto trigger_source = trigger_source_mbcs.c_str(); + int32 trigger_edge; + switch (request->trigger_edge_enum_case()) { + case nidaqmx_grpc::CfgDigEdgeStartTrigRequest::TriggerEdgeEnumCase::kTriggerEdge: { + trigger_edge = static_cast(request->trigger_edge()); + break; + } + case nidaqmx_grpc::CfgDigEdgeStartTrigRequest::TriggerEdgeEnumCase::kTriggerEdgeRaw: { + trigger_edge = static_cast(request->trigger_edge_raw()); + break; + } + case nidaqmx_grpc::CfgDigEdgeStartTrigRequest::TriggerEdgeEnumCase::TRIGGER_EDGE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for trigger_edge was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIRTDChanRequest::ResistanceConfigEnumCase::RESISTANCE_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for resistance_config was not specified or out of range"); - break; + + auto status = library_->CfgDigEdgeStartTrig(task, trigger_source, trigger_edge); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CfgDigPatternRefTrig(::grpc::ServerContext* context, const CfgDigPatternRefTrigRequest* request, CfgDigPatternRefTrigResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto trigger_source_mbcs = convert_from_grpc(request->trigger_source()); + auto trigger_source = trigger_source_mbcs.c_str(); + auto trigger_pattern_mbcs = convert_from_grpc(request->trigger_pattern()); + auto trigger_pattern = trigger_pattern_mbcs.c_str(); + int32 trigger_when; + switch (request->trigger_when_enum_case()) { + case nidaqmx_grpc::CfgDigPatternRefTrigRequest::TriggerWhenEnumCase::kTriggerWhen: { + trigger_when = static_cast(request->trigger_when()); + break; + } + case nidaqmx_grpc::CfgDigPatternRefTrigRequest::TriggerWhenEnumCase::kTriggerWhenRaw: { + trigger_when = static_cast(request->trigger_when_raw()); + break; + } + case nidaqmx_grpc::CfgDigPatternRefTrigRequest::TriggerWhenEnumCase::TRIGGER_WHEN_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for trigger_when was not specified or out of range"); + break; + } + } - int32 current_excit_source; - switch (request->current_excit_source_enum_case()) { - case nidaqmx_grpc::CreateAIRTDChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSource: { - current_excit_source = static_cast(request->current_excit_source()); - break; + uInt32 pretrigger_samples = request->pretrigger_samples(); + auto status = library_->CfgDigPatternRefTrig(task, trigger_source, trigger_pattern, trigger_when, pretrigger_samples); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - case nidaqmx_grpc::CreateAIRTDChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSourceRaw: { - current_excit_source = static_cast(request->current_excit_source_raw()); - break; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CfgDigPatternStartTrig(::grpc::ServerContext* context, const CfgDigPatternStartTrigRequest* request, CfgDigPatternStartTrigResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto trigger_source_mbcs = convert_from_grpc(request->trigger_source()); + auto trigger_source = trigger_source_mbcs.c_str(); + auto trigger_pattern_mbcs = convert_from_grpc(request->trigger_pattern()); + auto trigger_pattern = trigger_pattern_mbcs.c_str(); + int32 trigger_when; + switch (request->trigger_when_enum_case()) { + case nidaqmx_grpc::CfgDigPatternStartTrigRequest::TriggerWhenEnumCase::kTriggerWhen: { + trigger_when = static_cast(request->trigger_when()); + break; + } + case nidaqmx_grpc::CfgDigPatternStartTrigRequest::TriggerWhenEnumCase::kTriggerWhenRaw: { + trigger_when = static_cast(request->trigger_when_raw()); + break; + } + case nidaqmx_grpc::CfgDigPatternStartTrigRequest::TriggerWhenEnumCase::TRIGGER_WHEN_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for trigger_when was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIRTDChanRequest::CurrentExcitSourceEnumCase::CURRENT_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for current_excit_source was not specified or out of range"); - break; + + auto status = library_->CfgDigPatternStartTrig(task, trigger_source, trigger_pattern, trigger_when); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - float64 current_excit_val = request->current_excit_val(); - float64 r0 = request->r0(); - auto status = library_->CreateAIRTDChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, rtd_type, resistance_config, current_excit_source, current_excit_val, r0); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAIResistanceChan(::grpc::ServerContext* context, const CreateAIResistanceChanRequest* request, CreateAIResistanceChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAIResistanceChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateAIResistanceChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateAIResistanceChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CfgHandshakingTiming(::grpc::ServerContext* context, const CfgHandshakingTimingRequest* request, CfgHandshakingTimingResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - - int32 resistance_config; - switch (request->resistance_config_enum_case()) { - case nidaqmx_grpc::CreateAIResistanceChanRequest::ResistanceConfigEnumCase::kResistanceConfig: { - resistance_config = static_cast(request->resistance_config()); - break; - } - case nidaqmx_grpc::CreateAIResistanceChanRequest::ResistanceConfigEnumCase::kResistanceConfigRaw: { - resistance_config = static_cast(request->resistance_config_raw()); - break; - } - case nidaqmx_grpc::CreateAIResistanceChanRequest::ResistanceConfigEnumCase::RESISTANCE_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for resistance_config was not specified or out of range"); - break; + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 sample_mode; + switch (request->sample_mode_enum_case()) { + case nidaqmx_grpc::CfgHandshakingTimingRequest::SampleModeEnumCase::kSampleMode: { + sample_mode = static_cast(request->sample_mode()); + break; + } + case nidaqmx_grpc::CfgHandshakingTimingRequest::SampleModeEnumCase::kSampleModeRaw: { + sample_mode = static_cast(request->sample_mode_raw()); + break; + } + case nidaqmx_grpc::CfgHandshakingTimingRequest::SampleModeEnumCase::SAMPLE_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sample_mode was not specified or out of range"); + break; + } } - } - int32 current_excit_source; - switch (request->current_excit_source_enum_case()) { - case nidaqmx_grpc::CreateAIResistanceChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSource: { - current_excit_source = static_cast(request->current_excit_source()); - break; - } - case nidaqmx_grpc::CreateAIResistanceChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSourceRaw: { - current_excit_source = static_cast(request->current_excit_source_raw()); - break; - } - case nidaqmx_grpc::CreateAIResistanceChanRequest::CurrentExcitSourceEnumCase::CURRENT_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for current_excit_source was not specified or out of range"); - break; + uInt64 samps_per_chan = request->samps_per_chan(); + auto status = library_->CfgHandshakingTiming(task, sample_mode, samps_per_chan); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - float64 current_excit_val = request->current_excit_val(); - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateAIResistanceChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, resistance_config, current_excit_source, current_excit_val, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAIRosetteStrainGageChan(::grpc::ServerContext* context, const CreateAIRosetteStrainGageChanRequest* request, CreateAIRosetteStrainGageChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 rosette_type; - switch (request->rosette_type_enum_case()) { - case nidaqmx_grpc::CreateAIRosetteStrainGageChanRequest::RosetteTypeEnumCase::kRosetteType: { - rosette_type = static_cast(request->rosette_type()); - break; - } - case nidaqmx_grpc::CreateAIRosetteStrainGageChanRequest::RosetteTypeEnumCase::kRosetteTypeRaw: { - rosette_type = static_cast(request->rosette_type_raw()); - break; - } - case nidaqmx_grpc::CreateAIRosetteStrainGageChanRequest::RosetteTypeEnumCase::ROSETTE_TYPE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for rosette_type was not specified or out of range"); - break; - } - } - - float64 gage_orientation = request->gage_orientation(); - auto rosette_meas_types_vector = std::vector(); - rosette_meas_types_vector.reserve(request->rosette_meas_types().size()); - std::transform( - request->rosette_meas_types().begin(), - request->rosette_meas_types().end(), - std::back_inserter(rosette_meas_types_vector), - [](auto x) { return x; }); - auto rosette_meas_types = rosette_meas_types_vector.data(); - uInt32 num_rosette_meas_types = static_cast(request->rosette_meas_types().size()); - int32 strain_config; - switch (request->strain_config_enum_case()) { - case nidaqmx_grpc::CreateAIRosetteStrainGageChanRequest::StrainConfigEnumCase::kStrainConfig: { - strain_config = static_cast(request->strain_config()); - break; - } - case nidaqmx_grpc::CreateAIRosetteStrainGageChanRequest::StrainConfigEnumCase::kStrainConfigRaw: { - strain_config = static_cast(request->strain_config_raw()); - break; - } - case nidaqmx_grpc::CreateAIRosetteStrainGageChanRequest::StrainConfigEnumCase::STRAIN_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for strain_config was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CfgImplicitTiming(::grpc::ServerContext* context, const CfgImplicitTimingRequest* request, CfgImplicitTimingResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - - int32 voltage_excit_source; - switch (request->voltage_excit_source_enum_case()) { - case nidaqmx_grpc::CreateAIRosetteStrainGageChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { - voltage_excit_source = static_cast(request->voltage_excit_source()); - break; - } - case nidaqmx_grpc::CreateAIRosetteStrainGageChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { - voltage_excit_source = static_cast(request->voltage_excit_source_raw()); - break; + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 sample_mode; + switch (request->sample_mode_enum_case()) { + case nidaqmx_grpc::CfgImplicitTimingRequest::SampleModeEnumCase::kSampleMode: { + sample_mode = static_cast(request->sample_mode()); + break; + } + case nidaqmx_grpc::CfgImplicitTimingRequest::SampleModeEnumCase::kSampleModeRaw: { + sample_mode = static_cast(request->sample_mode_raw()); + break; + } + case nidaqmx_grpc::CfgImplicitTimingRequest::SampleModeEnumCase::SAMPLE_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sample_mode was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIRosetteStrainGageChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); - break; + + uInt64 samps_per_chan = request->samps_per_chan(); + auto status = library_->CfgImplicitTiming(task, sample_mode, samps_per_chan); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - float64 voltage_excit_val = request->voltage_excit_val(); - float64 gage_factor = request->gage_factor(); - float64 nominal_gage_resistance = request->nominal_gage_resistance(); - float64 poisson_ratio = request->poisson_ratio(); - float64 lead_wire_resistance = request->lead_wire_resistance(); - auto status = library_->CreateAIRosetteStrainGageChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, rosette_type, gage_orientation, rosette_meas_types, num_rosette_meas_types, strain_config, voltage_excit_source, voltage_excit_val, gage_factor, nominal_gage_resistance, poisson_ratio, lead_wire_resistance); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAIStrainGageChan(::grpc::ServerContext* context, const CreateAIStrainGageChanRequest* request, CreateAIStrainGageChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAIStrainGageChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateAIStrainGageChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateAIStrainGageChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; - } - } - - int32 strain_config; - switch (request->strain_config_enum_case()) { - case nidaqmx_grpc::CreateAIStrainGageChanRequest::StrainConfigEnumCase::kStrainConfig: { - strain_config = static_cast(request->strain_config()); - break; - } - case nidaqmx_grpc::CreateAIStrainGageChanRequest::StrainConfigEnumCase::kStrainConfigRaw: { - strain_config = static_cast(request->strain_config_raw()); - break; - } - case nidaqmx_grpc::CreateAIStrainGageChanRequest::StrainConfigEnumCase::STRAIN_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for strain_config was not specified or out of range"); - break; - } - } - - int32 voltage_excit_source; - switch (request->voltage_excit_source_enum_case()) { - case nidaqmx_grpc::CreateAIStrainGageChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { - voltage_excit_source = static_cast(request->voltage_excit_source()); - break; - } - case nidaqmx_grpc::CreateAIStrainGageChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { - voltage_excit_source = static_cast(request->voltage_excit_source_raw()); - break; - } - case nidaqmx_grpc::CreateAIStrainGageChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); - break; - } - } - - float64 voltage_excit_val = request->voltage_excit_val(); - float64 gage_factor = request->gage_factor(); - float64 initial_bridge_voltage = request->initial_bridge_voltage(); - float64 nominal_gage_resistance = request->nominal_gage_resistance(); - float64 poisson_ratio = request->poisson_ratio(); - float64 lead_wire_resistance = request->lead_wire_resistance(); - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateAIStrainGageChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, strain_config, voltage_excit_source, voltage_excit_val, gage_factor, initial_bridge_voltage, nominal_gage_resistance, poisson_ratio, lead_wire_resistance, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAITempBuiltInSensorChan(::grpc::ServerContext* context, const CreateAITempBuiltInSensorChanRequest* request, CreateAITempBuiltInSensorChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAITempBuiltInSensorChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateAITempBuiltInSensorChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateAITempBuiltInSensorChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CfgInputBuffer(::grpc::ServerContext* context, const CfgInputBufferRequest* request, CfgInputBufferResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + uInt32 num_samps_per_chan = request->num_samps_per_chan(); + auto status = library_->CfgInputBuffer(task, num_samps_per_chan); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - auto status = library_->CreateAITempBuiltInSensorChan(task, physical_channel, name_to_assign_to_channel, units); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAIThrmcplChan(::grpc::ServerContext* context, const CreateAIThrmcplChanRequest* request, CreateAIThrmcplChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAIThrmcplChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateAIThrmcplChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateAIThrmcplChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CfgOutputBuffer(::grpc::ServerContext* context, const CfgOutputBufferRequest* request, CfgOutputBufferResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + uInt32 num_samps_per_chan = request->num_samps_per_chan(); + auto status = library_->CfgOutputBuffer(task, num_samps_per_chan); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - int32 thermocouple_type; - switch (request->thermocouple_type_enum_case()) { - case nidaqmx_grpc::CreateAIThrmcplChanRequest::ThermocoupleTypeEnumCase::kThermocoupleType: { - thermocouple_type = static_cast(request->thermocouple_type()); - break; + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CfgPipelinedSampClkTiming(::grpc::ServerContext* context, const CfgPipelinedSampClkTimingRequest* request, CfgPipelinedSampClkTimingResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto source_mbcs = convert_from_grpc(request->source()); + auto source = source_mbcs.c_str(); + float64 rate = request->rate(); + int32 active_edge; + switch (request->active_edge_enum_case()) { + case nidaqmx_grpc::CfgPipelinedSampClkTimingRequest::ActiveEdgeEnumCase::kActiveEdge: { + active_edge = static_cast(request->active_edge()); + break; + } + case nidaqmx_grpc::CfgPipelinedSampClkTimingRequest::ActiveEdgeEnumCase::kActiveEdgeRaw: { + active_edge = static_cast(request->active_edge_raw()); + break; + } + case nidaqmx_grpc::CfgPipelinedSampClkTimingRequest::ActiveEdgeEnumCase::ACTIVE_EDGE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for active_edge was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIThrmcplChanRequest::ThermocoupleTypeEnumCase::kThermocoupleTypeRaw: { - thermocouple_type = static_cast(request->thermocouple_type_raw()); - break; + + int32 sample_mode; + switch (request->sample_mode_enum_case()) { + case nidaqmx_grpc::CfgPipelinedSampClkTimingRequest::SampleModeEnumCase::kSampleMode: { + sample_mode = static_cast(request->sample_mode()); + break; + } + case nidaqmx_grpc::CfgPipelinedSampClkTimingRequest::SampleModeEnumCase::kSampleModeRaw: { + sample_mode = static_cast(request->sample_mode_raw()); + break; + } + case nidaqmx_grpc::CfgPipelinedSampClkTimingRequest::SampleModeEnumCase::SAMPLE_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sample_mode was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIThrmcplChanRequest::ThermocoupleTypeEnumCase::THERMOCOUPLE_TYPE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for thermocouple_type was not specified or out of range"); - break; + + uInt64 samps_per_chan = request->samps_per_chan(); + auto status = library_->CfgPipelinedSampClkTiming(task, source, rate, active_edge, sample_mode, samps_per_chan); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - int32 cjc_source; - switch (request->cjc_source_enum_case()) { - case nidaqmx_grpc::CreateAIThrmcplChanRequest::CjcSourceEnumCase::kCjcSource: { - cjc_source = static_cast(request->cjc_source()); - break; + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CfgSampClkTiming(::grpc::ServerContext* context, const CfgSampClkTimingRequest* request, CfgSampClkTimingResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto source_mbcs = convert_from_grpc(request->source()); + auto source = source_mbcs.c_str(); + float64 rate = request->rate(); + int32 active_edge; + switch (request->active_edge_enum_case()) { + case nidaqmx_grpc::CfgSampClkTimingRequest::ActiveEdgeEnumCase::kActiveEdge: { + active_edge = static_cast(request->active_edge()); + break; + } + case nidaqmx_grpc::CfgSampClkTimingRequest::ActiveEdgeEnumCase::kActiveEdgeRaw: { + active_edge = static_cast(request->active_edge_raw()); + break; + } + case nidaqmx_grpc::CfgSampClkTimingRequest::ActiveEdgeEnumCase::ACTIVE_EDGE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for active_edge was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIThrmcplChanRequest::CjcSourceEnumCase::kCjcSourceRaw: { - cjc_source = static_cast(request->cjc_source_raw()); - break; + + int32 sample_mode; + switch (request->sample_mode_enum_case()) { + case nidaqmx_grpc::CfgSampClkTimingRequest::SampleModeEnumCase::kSampleMode: { + sample_mode = static_cast(request->sample_mode()); + break; + } + case nidaqmx_grpc::CfgSampClkTimingRequest::SampleModeEnumCase::kSampleModeRaw: { + sample_mode = static_cast(request->sample_mode_raw()); + break; + } + case nidaqmx_grpc::CfgSampClkTimingRequest::SampleModeEnumCase::SAMPLE_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sample_mode was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIThrmcplChanRequest::CjcSourceEnumCase::CJC_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for cjc_source was not specified or out of range"); - break; + + uInt64 samps_per_chan = request->samps_per_chan(); + auto status = library_->CfgSampClkTiming(task, source, rate, active_edge, sample_mode, samps_per_chan); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - float64 cjc_val = request->cjc_val(); - auto cjc_channel_mbcs = convert_from_grpc(request->cjc_channel()); - auto cjc_channel = cjc_channel_mbcs.c_str(); - auto status = library_->CreateAIThrmcplChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, thermocouple_type, cjc_source, cjc_val, cjc_channel); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAIThrmstrChanIex(::grpc::ServerContext* context, const CreateAIThrmstrChanIexRequest* request, CreateAIThrmstrChanIexResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAIThrmstrChanIexRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateAIThrmstrChanIexRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateAIThrmstrChanIexRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CfgTimeStartTrig(::grpc::ServerContext* context, const CfgTimeStartTrigRequest* request, CfgTimeStartTrigResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - - int32 resistance_config; - switch (request->resistance_config_enum_case()) { - case nidaqmx_grpc::CreateAIThrmstrChanIexRequest::ResistanceConfigEnumCase::kResistanceConfig: { - resistance_config = static_cast(request->resistance_config()); - break; - } - case nidaqmx_grpc::CreateAIThrmstrChanIexRequest::ResistanceConfigEnumCase::kResistanceConfigRaw: { - resistance_config = static_cast(request->resistance_config_raw()); - break; - } - case nidaqmx_grpc::CreateAIThrmstrChanIexRequest::ResistanceConfigEnumCase::RESISTANCE_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for resistance_config was not specified or out of range"); - break; + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto when = convert_from_grpc(request->when()); + int32 timescale; + switch (request->timescale_enum_case()) { + case nidaqmx_grpc::CfgTimeStartTrigRequest::TimescaleEnumCase::kTimescale: { + timescale = static_cast(request->timescale()); + break; + } + case nidaqmx_grpc::CfgTimeStartTrigRequest::TimescaleEnumCase::kTimescaleRaw: { + timescale = static_cast(request->timescale_raw()); + break; + } + case nidaqmx_grpc::CfgTimeStartTrigRequest::TimescaleEnumCase::TIMESCALE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for timescale was not specified or out of range"); + break; + } } - } - int32 current_excit_source; - switch (request->current_excit_source_enum_case()) { - case nidaqmx_grpc::CreateAIThrmstrChanIexRequest::CurrentExcitSourceEnumCase::kCurrentExcitSource: { - current_excit_source = static_cast(request->current_excit_source()); - break; - } - case nidaqmx_grpc::CreateAIThrmstrChanIexRequest::CurrentExcitSourceEnumCase::kCurrentExcitSourceRaw: { - current_excit_source = static_cast(request->current_excit_source_raw()); - break; - } - case nidaqmx_grpc::CreateAIThrmstrChanIexRequest::CurrentExcitSourceEnumCase::CURRENT_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for current_excit_source was not specified or out of range"); - break; + auto status = library_->CfgTimeStartTrig(task, when, timescale); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - float64 current_excit_val = request->current_excit_val(); - float64 a = request->a(); - float64 b = request->b(); - float64 c = request->c(); - auto status = library_->CreateAIThrmstrChanIex(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, resistance_config, current_excit_source, current_excit_val, a, b, c); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAIThrmstrChanVex(::grpc::ServerContext* context, const CreateAIThrmstrChanVexRequest* request, CreateAIThrmstrChanVexResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAIThrmstrChanVexRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateAIThrmstrChanVexRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateAIThrmstrChanVexRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CfgWatchdogAOExpirStates(::grpc::ServerContext* context, const CfgWatchdogAOExpirStatesRequest* request, CfgWatchdogAOExpirStatesResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto channel_names_mbcs = convert_from_grpc(request->channel_names()); + auto channel_names = channel_names_mbcs.c_str(); + auto expir_state_array = const_cast(request->expir_state_array().data()); + auto output_type_array_vector = std::vector(); + output_type_array_vector.reserve(request->output_type_array().size()); + std::transform( + request->output_type_array().begin(), + request->output_type_array().end(), + std::back_inserter(output_type_array_vector), + [](auto x) { return x; }); + auto output_type_array = output_type_array_vector.data(); - int32 resistance_config; - switch (request->resistance_config_enum_case()) { - case nidaqmx_grpc::CreateAIThrmstrChanVexRequest::ResistanceConfigEnumCase::kResistanceConfig: { - resistance_config = static_cast(request->resistance_config()); - break; - } - case nidaqmx_grpc::CreateAIThrmstrChanVexRequest::ResistanceConfigEnumCase::kResistanceConfigRaw: { - resistance_config = static_cast(request->resistance_config_raw()); - break; - } - case nidaqmx_grpc::CreateAIThrmstrChanVexRequest::ResistanceConfigEnumCase::RESISTANCE_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for resistance_config was not specified or out of range"); - break; - } - } + auto array_size_determine_from_sizes = std::array + { + request->expir_state_array_size(), + request->output_type_array_size() + }; + const auto array_size_size_calculation = calculate_linked_array_size(array_size_determine_from_sizes, false); - int32 voltage_excit_source; - switch (request->voltage_excit_source_enum_case()) { - case nidaqmx_grpc::CreateAIThrmstrChanVexRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { - voltage_excit_source = static_cast(request->voltage_excit_source()); - break; - } - case nidaqmx_grpc::CreateAIThrmstrChanVexRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { - voltage_excit_source = static_cast(request->voltage_excit_source_raw()); - break; + if (array_size_size_calculation.match_state == MatchState::MISMATCH) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The sizes of linked repeated fields [expir_state_array, output_type_array] do not match"); } - case nidaqmx_grpc::CreateAIThrmstrChanVexRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); - break; + auto array_size = array_size_size_calculation.size; + + auto status = library_->CfgWatchdogAOExpirStates(task, channel_names, expir_state_array, output_type_array, array_size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - float64 voltage_excit_val = request->voltage_excit_val(); - float64 a = request->a(); - float64 b = request->b(); - float64 c = request->c(); - float64 r1 = request->r1(); - auto status = library_->CreateAIThrmstrChanVex(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, resistance_config, voltage_excit_source, voltage_excit_val, a, b, c, r1); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAITorqueBridgePolynomialChan(::grpc::ServerContext* context, const CreateAITorqueBridgePolynomialChanRequest* request, CreateAITorqueBridgePolynomialChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAITorqueBridgePolynomialChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateAITorqueBridgePolynomialChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateAITorqueBridgePolynomialChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CfgWatchdogCOExpirStates(::grpc::ServerContext* context, const CfgWatchdogCOExpirStatesRequest* request, CfgWatchdogCOExpirStatesResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto channel_names_mbcs = convert_from_grpc(request->channel_names()); + auto channel_names = channel_names_mbcs.c_str(); + auto expir_state_array_vector = std::vector(); + expir_state_array_vector.reserve(request->expir_state_array().size()); + std::transform( + request->expir_state_array().begin(), + request->expir_state_array().end(), + std::back_inserter(expir_state_array_vector), + [](auto x) { return x; }); + auto expir_state_array = expir_state_array_vector.data(); - int32 bridge_config; - switch (request->bridge_config_enum_case()) { - case nidaqmx_grpc::CreateAITorqueBridgePolynomialChanRequest::BridgeConfigEnumCase::kBridgeConfig: { - bridge_config = static_cast(request->bridge_config()); - break; - } - case nidaqmx_grpc::CreateAITorqueBridgePolynomialChanRequest::BridgeConfigEnumCase::kBridgeConfigRaw: { - bridge_config = static_cast(request->bridge_config_raw()); - break; - } - case nidaqmx_grpc::CreateAITorqueBridgePolynomialChanRequest::BridgeConfigEnumCase::BRIDGE_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for bridge_config was not specified or out of range"); - break; + uInt32 array_size = static_cast(request->expir_state_array().size()); + auto status = library_->CfgWatchdogCOExpirStates(task, channel_names, expir_state_array, array_size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - int32 voltage_excit_source; - switch (request->voltage_excit_source_enum_case()) { - case nidaqmx_grpc::CreateAITorqueBridgePolynomialChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { - voltage_excit_source = static_cast(request->voltage_excit_source()); - break; - } - case nidaqmx_grpc::CreateAITorqueBridgePolynomialChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { - voltage_excit_source = static_cast(request->voltage_excit_source_raw()); - break; - } - case nidaqmx_grpc::CreateAITorqueBridgePolynomialChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); - break; - } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } + } - float64 voltage_excit_val = request->voltage_excit_val(); - float64 nominal_bridge_resistance = request->nominal_bridge_resistance(); - auto forward_coeffs = const_cast(request->forward_coeffs().data()); - uInt32 num_forward_coeffs = static_cast(request->forward_coeffs().size()); - auto reverse_coeffs = const_cast(request->reverse_coeffs().data()); - uInt32 num_reverse_coeffs = static_cast(request->reverse_coeffs().size()); - int32 electrical_units; - switch (request->electrical_units_enum_case()) { - case nidaqmx_grpc::CreateAITorqueBridgePolynomialChanRequest::ElectricalUnitsEnumCase::kElectricalUnits: { - electrical_units = static_cast(request->electrical_units()); - break; - } - case nidaqmx_grpc::CreateAITorqueBridgePolynomialChanRequest::ElectricalUnitsEnumCase::kElectricalUnitsRaw: { - electrical_units = static_cast(request->electrical_units_raw()); - break; - } - case nidaqmx_grpc::CreateAITorqueBridgePolynomialChanRequest::ElectricalUnitsEnumCase::ELECTRICAL_UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for electrical_units was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CfgWatchdogDOExpirStates(::grpc::ServerContext* context, const CfgWatchdogDOExpirStatesRequest* request, CfgWatchdogDOExpirStatesResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto channel_names_mbcs = convert_from_grpc(request->channel_names()); + auto channel_names = channel_names_mbcs.c_str(); + auto expir_state_array_vector = std::vector(); + expir_state_array_vector.reserve(request->expir_state_array().size()); + std::transform( + request->expir_state_array().begin(), + request->expir_state_array().end(), + std::back_inserter(expir_state_array_vector), + [](auto x) { return x; }); + auto expir_state_array = expir_state_array_vector.data(); - int32 physical_units; - switch (request->physical_units_enum_case()) { - case nidaqmx_grpc::CreateAITorqueBridgePolynomialChanRequest::PhysicalUnitsEnumCase::kPhysicalUnits: { - physical_units = static_cast(request->physical_units()); - break; - } - case nidaqmx_grpc::CreateAITorqueBridgePolynomialChanRequest::PhysicalUnitsEnumCase::kPhysicalUnitsRaw: { - physical_units = static_cast(request->physical_units_raw()); - break; - } - case nidaqmx_grpc::CreateAITorqueBridgePolynomialChanRequest::PhysicalUnitsEnumCase::PHYSICAL_UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for physical_units was not specified or out of range"); - break; + uInt32 array_size = static_cast(request->expir_state_array().size()); + auto status = library_->CfgWatchdogDOExpirStates(task, channel_names, expir_state_array, array_size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateAITorqueBridgePolynomialChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, bridge_config, voltage_excit_source, voltage_excit_val, nominal_bridge_resistance, forward_coeffs, num_forward_coeffs, reverse_coeffs, num_reverse_coeffs, electrical_units, physical_units, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAITorqueBridgeTableChan(::grpc::ServerContext* context, const CreateAITorqueBridgeTableChanRequest* request, CreateAITorqueBridgeTableChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAITorqueBridgeTableChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateAITorqueBridgeTableChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateAITorqueBridgeTableChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ClearTEDS(::grpc::ServerContext* context, const ClearTEDSRequest* request, ClearTEDSResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - - int32 bridge_config; - switch (request->bridge_config_enum_case()) { - case nidaqmx_grpc::CreateAITorqueBridgeTableChanRequest::BridgeConfigEnumCase::kBridgeConfig: { - bridge_config = static_cast(request->bridge_config()); - break; - } - case nidaqmx_grpc::CreateAITorqueBridgeTableChanRequest::BridgeConfigEnumCase::kBridgeConfigRaw: { - bridge_config = static_cast(request->bridge_config_raw()); - break; - } - case nidaqmx_grpc::CreateAITorqueBridgeTableChanRequest::BridgeConfigEnumCase::BRIDGE_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for bridge_config was not specified or out of range"); - break; + try { + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto status = library_->ClearTEDS(physical_channel); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } + response->set_status(status); + return ::grpc::Status::OK; } - - int32 voltage_excit_source; - switch (request->voltage_excit_source_enum_case()) { - case nidaqmx_grpc::CreateAITorqueBridgeTableChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { - voltage_excit_source = static_cast(request->voltage_excit_source()); - break; - } - case nidaqmx_grpc::CreateAITorqueBridgeTableChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { - voltage_excit_source = static_cast(request->voltage_excit_source_raw()); - break; - } - case nidaqmx_grpc::CreateAITorqueBridgeTableChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); - break; - } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } + } - float64 voltage_excit_val = request->voltage_excit_val(); - float64 nominal_bridge_resistance = request->nominal_bridge_resistance(); - auto electrical_vals = const_cast(request->electrical_vals().data()); - uInt32 num_electrical_vals = static_cast(request->electrical_vals().size()); - int32 electrical_units; - switch (request->electrical_units_enum_case()) { - case nidaqmx_grpc::CreateAITorqueBridgeTableChanRequest::ElectricalUnitsEnumCase::kElectricalUnits: { - electrical_units = static_cast(request->electrical_units()); - break; - } - case nidaqmx_grpc::CreateAITorqueBridgeTableChanRequest::ElectricalUnitsEnumCase::kElectricalUnitsRaw: { - electrical_units = static_cast(request->electrical_units_raw()); - break; - } - case nidaqmx_grpc::CreateAITorqueBridgeTableChanRequest::ElectricalUnitsEnumCase::ELECTRICAL_UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for electrical_units was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ClearTask(::grpc::ServerContext* context, const ClearTaskRequest* request, ClearTaskResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - - auto physical_vals = const_cast(request->physical_vals().data()); - uInt32 num_physical_vals = static_cast(request->physical_vals().size()); - int32 physical_units; - switch (request->physical_units_enum_case()) { - case nidaqmx_grpc::CreateAITorqueBridgeTableChanRequest::PhysicalUnitsEnumCase::kPhysicalUnits: { - physical_units = static_cast(request->physical_units()); - break; - } - case nidaqmx_grpc::CreateAITorqueBridgeTableChanRequest::PhysicalUnitsEnumCase::kPhysicalUnitsRaw: { - physical_units = static_cast(request->physical_units_raw()); - break; - } - case nidaqmx_grpc::CreateAITorqueBridgeTableChanRequest::PhysicalUnitsEnumCase::PHYSICAL_UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for physical_units was not specified or out of range"); - break; + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + session_repository_->remove_session(task_grpc_session.name()); + auto status = library_->ClearTask(task); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateAITorqueBridgeTableChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, bridge_config, voltage_excit_source, voltage_excit_val, nominal_bridge_resistance, electrical_vals, num_electrical_vals, electrical_units, physical_vals, num_physical_vals, physical_units, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAITorqueBridgeTwoPointLinChan(::grpc::ServerContext* context, const CreateAITorqueBridgeTwoPointLinChanRequest* request, CreateAITorqueBridgeTwoPointLinChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAITorqueBridgeTwoPointLinChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateAITorqueBridgeTwoPointLinChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateAITorqueBridgeTwoPointLinChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ConfigureLogging(::grpc::ServerContext* context, const ConfigureLoggingRequest* request, ConfigureLoggingResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - - int32 bridge_config; - switch (request->bridge_config_enum_case()) { - case nidaqmx_grpc::CreateAITorqueBridgeTwoPointLinChanRequest::BridgeConfigEnumCase::kBridgeConfig: { - bridge_config = static_cast(request->bridge_config()); - break; - } - case nidaqmx_grpc::CreateAITorqueBridgeTwoPointLinChanRequest::BridgeConfigEnumCase::kBridgeConfigRaw: { - bridge_config = static_cast(request->bridge_config_raw()); - break; - } - case nidaqmx_grpc::CreateAITorqueBridgeTwoPointLinChanRequest::BridgeConfigEnumCase::BRIDGE_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for bridge_config was not specified or out of range"); - break; + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto file_path_mbcs = convert_from_grpc(request->file_path()); + auto file_path = file_path_mbcs.c_str(); + int32 logging_mode; + switch (request->logging_mode_enum_case()) { + case nidaqmx_grpc::ConfigureLoggingRequest::LoggingModeEnumCase::kLoggingMode: { + logging_mode = static_cast(request->logging_mode()); + break; + } + case nidaqmx_grpc::ConfigureLoggingRequest::LoggingModeEnumCase::kLoggingModeRaw: { + logging_mode = static_cast(request->logging_mode_raw()); + break; + } + case nidaqmx_grpc::ConfigureLoggingRequest::LoggingModeEnumCase::LOGGING_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for logging_mode was not specified or out of range"); + break; + } } - } - int32 voltage_excit_source; - switch (request->voltage_excit_source_enum_case()) { - case nidaqmx_grpc::CreateAITorqueBridgeTwoPointLinChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { - voltage_excit_source = static_cast(request->voltage_excit_source()); - break; - } - case nidaqmx_grpc::CreateAITorqueBridgeTwoPointLinChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { - voltage_excit_source = static_cast(request->voltage_excit_source_raw()); - break; - } - case nidaqmx_grpc::CreateAITorqueBridgeTwoPointLinChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); - break; + auto group_name_mbcs = convert_from_grpc(request->group_name()); + auto group_name = group_name_mbcs.c_str(); + int32 operation; + switch (request->operation_enum_case()) { + case nidaqmx_grpc::ConfigureLoggingRequest::OperationEnumCase::kOperation: { + operation = static_cast(request->operation()); + break; + } + case nidaqmx_grpc::ConfigureLoggingRequest::OperationEnumCase::kOperationRaw: { + operation = static_cast(request->operation_raw()); + break; + } + case nidaqmx_grpc::ConfigureLoggingRequest::OperationEnumCase::OPERATION_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for operation was not specified or out of range"); + break; + } } - } - float64 voltage_excit_val = request->voltage_excit_val(); - float64 nominal_bridge_resistance = request->nominal_bridge_resistance(); - float64 first_electrical_val = request->first_electrical_val(); - float64 second_electrical_val = request->second_electrical_val(); - int32 electrical_units; - switch (request->electrical_units_enum_case()) { - case nidaqmx_grpc::CreateAITorqueBridgeTwoPointLinChanRequest::ElectricalUnitsEnumCase::kElectricalUnits: { - electrical_units = static_cast(request->electrical_units()); - break; - } - case nidaqmx_grpc::CreateAITorqueBridgeTwoPointLinChanRequest::ElectricalUnitsEnumCase::kElectricalUnitsRaw: { - electrical_units = static_cast(request->electrical_units_raw()); - break; - } - case nidaqmx_grpc::CreateAITorqueBridgeTwoPointLinChanRequest::ElectricalUnitsEnumCase::ELECTRICAL_UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for electrical_units was not specified or out of range"); - break; + auto status = library_->ConfigureLogging(task, file_path, logging_mode, group_name, operation); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } + } - float64 first_physical_val = request->first_physical_val(); - float64 second_physical_val = request->second_physical_val(); - int32 physical_units; - switch (request->physical_units_enum_case()) { - case nidaqmx_grpc::CreateAITorqueBridgeTwoPointLinChanRequest::PhysicalUnitsEnumCase::kPhysicalUnits: { - physical_units = static_cast(request->physical_units()); - break; - } - case nidaqmx_grpc::CreateAITorqueBridgeTwoPointLinChanRequest::PhysicalUnitsEnumCase::kPhysicalUnitsRaw: { - physical_units = static_cast(request->physical_units_raw()); - break; - } - case nidaqmx_grpc::CreateAITorqueBridgeTwoPointLinChanRequest::PhysicalUnitsEnumCase::PHYSICAL_UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for physical_units was not specified or out of range"); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ConfigureTEDS(::grpc::ServerContext* context, const ConfigureTEDSRequest* request, ConfigureTEDSResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto file_path_mbcs = convert_from_grpc(request->file_path()); + auto file_path = file_path_mbcs.c_str(); + auto status = library_->ConfigureTEDS(physical_channel, file_path); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } + response->set_status(status); + return ::grpc::Status::OK; } - - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateAITorqueBridgeTwoPointLinChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, bridge_config, voltage_excit_source, voltage_excit_val, nominal_bridge_resistance, first_electrical_val, second_electrical_val, electrical_units, first_physical_val, second_physical_val, physical_units, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAIVelocityIEPEChan(::grpc::ServerContext* context, const CreateAIVelocityIEPEChanRequest* request, CreateAIVelocityIEPEChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - int32 terminal_config; - switch (request->terminal_config_enum_case()) { - case nidaqmx_grpc::CreateAIVelocityIEPEChanRequest::TerminalConfigEnumCase::kTerminalConfig: { - terminal_config = static_cast(request->terminal_config()); - break; - } - case nidaqmx_grpc::CreateAIVelocityIEPEChanRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { - terminal_config = static_cast(request->terminal_config_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ConnectTerms(::grpc::ServerContext* context, const ConnectTermsRequest* request, ConnectTermsResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto source_terminal_mbcs = convert_from_grpc(request->source_terminal()); + auto source_terminal = source_terminal_mbcs.c_str(); + auto destination_terminal_mbcs = convert_from_grpc(request->destination_terminal()); + auto destination_terminal = destination_terminal_mbcs.c_str(); + int32 signal_modifiers; + switch (request->signal_modifiers_enum_case()) { + case nidaqmx_grpc::ConnectTermsRequest::SignalModifiersEnumCase::kSignalModifiers: { + signal_modifiers = static_cast(request->signal_modifiers()); + break; + } + case nidaqmx_grpc::ConnectTermsRequest::SignalModifiersEnumCase::kSignalModifiersRaw: { + signal_modifiers = static_cast(request->signal_modifiers_raw()); + break; + } + case nidaqmx_grpc::ConnectTermsRequest::SignalModifiersEnumCase::SIGNAL_MODIFIERS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for signal_modifiers was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIVelocityIEPEChanRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); - break; + + auto status = library_->ConnectTerms(source_terminal, destination_terminal, signal_modifiers); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAIVelocityIEPEChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateAIVelocityIEPEChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateAIVelocityIEPEChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ControlWatchdogTask(::grpc::ServerContext* context, const ControlWatchdogTaskRequest* request, ControlWatchdogTaskResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 action; + switch (request->action_enum_case()) { + case nidaqmx_grpc::ControlWatchdogTaskRequest::ActionEnumCase::kAction: { + action = static_cast(request->action()); + break; + } + case nidaqmx_grpc::ControlWatchdogTaskRequest::ActionEnumCase::kActionRaw: { + action = static_cast(request->action_raw()); + break; + } + case nidaqmx_grpc::ControlWatchdogTaskRequest::ActionEnumCase::ACTION_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for action was not specified or out of range"); + break; + } + } - float64 sensitivity = request->sensitivity(); - int32 sensitivity_units; - switch (request->sensitivity_units_enum_case()) { - case nidaqmx_grpc::CreateAIVelocityIEPEChanRequest::SensitivityUnitsEnumCase::kSensitivityUnits: { - sensitivity_units = static_cast(request->sensitivity_units()); - break; + auto status = library_->ControlWatchdogTask(task, action); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - case nidaqmx_grpc::CreateAIVelocityIEPEChanRequest::SensitivityUnitsEnumCase::kSensitivityUnitsRaw: { - sensitivity_units = static_cast(request->sensitivity_units_raw()); - break; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAIAccel4WireDCVoltageChan(::grpc::ServerContext* context, const CreateAIAccel4WireDCVoltageChanRequest* request, CreateAIAccel4WireDCVoltageChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + int32 terminal_config; + switch (request->terminal_config_enum_case()) { + case nidaqmx_grpc::CreateAIAccel4WireDCVoltageChanRequest::TerminalConfigEnumCase::kTerminalConfig: { + terminal_config = static_cast(request->terminal_config()); + break; + } + case nidaqmx_grpc::CreateAIAccel4WireDCVoltageChanRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { + terminal_config = static_cast(request->terminal_config_raw()); + break; + } + case nidaqmx_grpc::CreateAIAccel4WireDCVoltageChanRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIVelocityIEPEChanRequest::SensitivityUnitsEnumCase::SENSITIVITY_UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sensitivity_units was not specified or out of range"); - break; + + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAIAccel4WireDCVoltageChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAIAccel4WireDCVoltageChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAIAccel4WireDCVoltageChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - } - int32 current_excit_source; - switch (request->current_excit_source_enum_case()) { - case nidaqmx_grpc::CreateAIVelocityIEPEChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSource: { - current_excit_source = static_cast(request->current_excit_source()); - break; + float64 sensitivity = request->sensitivity(); + int32 sensitivity_units; + switch (request->sensitivity_units_enum_case()) { + case nidaqmx_grpc::CreateAIAccel4WireDCVoltageChanRequest::SensitivityUnitsEnumCase::kSensitivityUnits: { + sensitivity_units = static_cast(request->sensitivity_units()); + break; + } + case nidaqmx_grpc::CreateAIAccel4WireDCVoltageChanRequest::SensitivityUnitsEnumCase::kSensitivityUnitsRaw: { + sensitivity_units = static_cast(request->sensitivity_units_raw()); + break; + } + case nidaqmx_grpc::CreateAIAccel4WireDCVoltageChanRequest::SensitivityUnitsEnumCase::SENSITIVITY_UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sensitivity_units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIVelocityIEPEChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSourceRaw: { - current_excit_source = static_cast(request->current_excit_source_raw()); - break; + + int32 voltage_excit_source; + switch (request->voltage_excit_source_enum_case()) { + case nidaqmx_grpc::CreateAIAccel4WireDCVoltageChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { + voltage_excit_source = static_cast(request->voltage_excit_source()); + break; + } + case nidaqmx_grpc::CreateAIAccel4WireDCVoltageChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { + voltage_excit_source = static_cast(request->voltage_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateAIAccel4WireDCVoltageChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIVelocityIEPEChanRequest::CurrentExcitSourceEnumCase::CURRENT_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for current_excit_source was not specified or out of range"); - break; + + float64 voltage_excit_val = request->voltage_excit_val(); + bool32 use_excit_for_scaling = request->use_excit_for_scaling(); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateAIAccel4WireDCVoltageChan(task, physical_channel, name_to_assign_to_channel, terminal_config, min_val, max_val, units, sensitivity, sensitivity_units, voltage_excit_source, voltage_excit_val, use_excit_for_scaling, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAIAccelChan(::grpc::ServerContext* context, const CreateAIAccelChanRequest* request, CreateAIAccelChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + int32 terminal_config; + switch (request->terminal_config_enum_case()) { + case nidaqmx_grpc::CreateAIAccelChanRequest::TerminalConfigEnumCase::kTerminalConfig: { + terminal_config = static_cast(request->terminal_config()); + break; + } + case nidaqmx_grpc::CreateAIAccelChanRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { + terminal_config = static_cast(request->terminal_config_raw()); + break; + } + case nidaqmx_grpc::CreateAIAccelChanRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); + break; + } + } - float64 current_excit_val = request->current_excit_val(); - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateAIVelocityIEPEChan(task, physical_channel, name_to_assign_to_channel, terminal_config, min_val, max_val, units, sensitivity, sensitivity_units, current_excit_source, current_excit_val, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAIAccelChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAIAccelChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAIAccelChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAIVoltageChan(::grpc::ServerContext* context, const CreateAIVoltageChanRequest* request, CreateAIVoltageChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - int32 terminal_config; - switch (request->terminal_config_enum_case()) { - case nidaqmx_grpc::CreateAIVoltageChanRequest::TerminalConfigEnumCase::kTerminalConfig: { - terminal_config = static_cast(request->terminal_config()); - break; + float64 sensitivity = request->sensitivity(); + int32 sensitivity_units; + switch (request->sensitivity_units_enum_case()) { + case nidaqmx_grpc::CreateAIAccelChanRequest::SensitivityUnitsEnumCase::kSensitivityUnits: { + sensitivity_units = static_cast(request->sensitivity_units()); + break; + } + case nidaqmx_grpc::CreateAIAccelChanRequest::SensitivityUnitsEnumCase::kSensitivityUnitsRaw: { + sensitivity_units = static_cast(request->sensitivity_units_raw()); + break; + } + case nidaqmx_grpc::CreateAIAccelChanRequest::SensitivityUnitsEnumCase::SENSITIVITY_UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sensitivity_units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIVoltageChanRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { - terminal_config = static_cast(request->terminal_config_raw()); - break; + + int32 current_excit_source; + switch (request->current_excit_source_enum_case()) { + case nidaqmx_grpc::CreateAIAccelChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSource: { + current_excit_source = static_cast(request->current_excit_source()); + break; + } + case nidaqmx_grpc::CreateAIAccelChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSourceRaw: { + current_excit_source = static_cast(request->current_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateAIAccelChanRequest::CurrentExcitSourceEnumCase::CURRENT_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for current_excit_source was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIVoltageChanRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); - break; + + float64 current_excit_val = request->current_excit_val(); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateAIAccelChan(task, physical_channel, name_to_assign_to_channel, terminal_config, min_val, max_val, units, sensitivity, sensitivity_units, current_excit_source, current_excit_val, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAIVoltageChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAIAccelChargeChan(::grpc::ServerContext* context, const CreateAIAccelChargeChanRequest* request, CreateAIAccelChargeChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + int32 terminal_config; + switch (request->terminal_config_enum_case()) { + case nidaqmx_grpc::CreateAIAccelChargeChanRequest::TerminalConfigEnumCase::kTerminalConfig: { + terminal_config = static_cast(request->terminal_config()); + break; + } + case nidaqmx_grpc::CreateAIAccelChargeChanRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { + terminal_config = static_cast(request->terminal_config_raw()); + break; + } + case nidaqmx_grpc::CreateAIAccelChargeChanRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIVoltageChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; + + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAIAccelChargeChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAIAccelChargeChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAIAccelChargeChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIVoltageChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + + float64 sensitivity = request->sensitivity(); + int32 sensitivity_units; + switch (request->sensitivity_units_enum_case()) { + case nidaqmx_grpc::CreateAIAccelChargeChanRequest::SensitivityUnitsEnumCase::kSensitivityUnits: { + sensitivity_units = static_cast(request->sensitivity_units()); + break; + } + case nidaqmx_grpc::CreateAIAccelChargeChanRequest::SensitivityUnitsEnumCase::kSensitivityUnitsRaw: { + sensitivity_units = static_cast(request->sensitivity_units_raw()); + break; + } + case nidaqmx_grpc::CreateAIAccelChargeChanRequest::SensitivityUnitsEnumCase::SENSITIVITY_UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sensitivity_units was not specified or out of range"); + break; + } } - } - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateAIVoltageChan(task, physical_channel, name_to_assign_to_channel, terminal_config, min_val, max_val, units, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateAIAccelChargeChan(task, physical_channel, name_to_assign_to_channel, terminal_config, min_val, max_val, units, sensitivity, sensitivity_units, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAIBridgeChan(::grpc::ServerContext* context, const CreateAIBridgeChanRequest* request, CreateAIBridgeChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAIBridgeChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAIBridgeChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAIBridgeChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAIVoltageChanWithExcit(::grpc::ServerContext* context, const CreateAIVoltageChanWithExcitRequest* request, CreateAIVoltageChanWithExcitResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - int32 terminal_config; - switch (request->terminal_config_enum_case()) { - case nidaqmx_grpc::CreateAIVoltageChanWithExcitRequest::TerminalConfigEnumCase::kTerminalConfig: { - terminal_config = static_cast(request->terminal_config()); - break; + int32 bridge_config; + switch (request->bridge_config_enum_case()) { + case nidaqmx_grpc::CreateAIBridgeChanRequest::BridgeConfigEnumCase::kBridgeConfig: { + bridge_config = static_cast(request->bridge_config()); + break; + } + case nidaqmx_grpc::CreateAIBridgeChanRequest::BridgeConfigEnumCase::kBridgeConfigRaw: { + bridge_config = static_cast(request->bridge_config_raw()); + break; + } + case nidaqmx_grpc::CreateAIBridgeChanRequest::BridgeConfigEnumCase::BRIDGE_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for bridge_config was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIVoltageChanWithExcitRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { - terminal_config = static_cast(request->terminal_config_raw()); - break; + + int32 voltage_excit_source; + switch (request->voltage_excit_source_enum_case()) { + case nidaqmx_grpc::CreateAIBridgeChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { + voltage_excit_source = static_cast(request->voltage_excit_source()); + break; + } + case nidaqmx_grpc::CreateAIBridgeChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { + voltage_excit_source = static_cast(request->voltage_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateAIBridgeChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIVoltageChanWithExcitRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); - break; + + float64 voltage_excit_val = request->voltage_excit_val(); + float64 nominal_bridge_resistance = request->nominal_bridge_resistance(); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateAIBridgeChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, bridge_config, voltage_excit_source, voltage_excit_val, nominal_bridge_resistance, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAIVoltageChanWithExcitRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAIChargeChan(::grpc::ServerContext* context, const CreateAIChargeChanRequest* request, CreateAIChargeChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + int32 terminal_config; + switch (request->terminal_config_enum_case()) { + case nidaqmx_grpc::CreateAIChargeChanRequest::TerminalConfigEnumCase::kTerminalConfig: { + terminal_config = static_cast(request->terminal_config()); + break; + } + case nidaqmx_grpc::CreateAIChargeChanRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { + terminal_config = static_cast(request->terminal_config_raw()); + break; + } + case nidaqmx_grpc::CreateAIChargeChanRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIVoltageChanWithExcitRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; + + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAIChargeChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAIChargeChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAIChargeChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIVoltageChanWithExcitRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateAIChargeChan(task, physical_channel, name_to_assign_to_channel, terminal_config, min_val, max_val, units, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAICurrentChan(::grpc::ServerContext* context, const CreateAICurrentChanRequest* request, CreateAICurrentChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + int32 terminal_config; + switch (request->terminal_config_enum_case()) { + case nidaqmx_grpc::CreateAICurrentChanRequest::TerminalConfigEnumCase::kTerminalConfig: { + terminal_config = static_cast(request->terminal_config()); + break; + } + case nidaqmx_grpc::CreateAICurrentChanRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { + terminal_config = static_cast(request->terminal_config_raw()); + break; + } + case nidaqmx_grpc::CreateAICurrentChanRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); + break; + } + } - int32 bridge_config; - switch (request->bridge_config_enum_case()) { - case nidaqmx_grpc::CreateAIVoltageChanWithExcitRequest::BridgeConfigEnumCase::kBridgeConfig: { - bridge_config = static_cast(request->bridge_config()); - break; + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAICurrentChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAICurrentChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAICurrentChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIVoltageChanWithExcitRequest::BridgeConfigEnumCase::kBridgeConfigRaw: { - bridge_config = static_cast(request->bridge_config_raw()); - break; + + int32 shunt_resistor_loc; + switch (request->shunt_resistor_loc_enum_case()) { + case nidaqmx_grpc::CreateAICurrentChanRequest::ShuntResistorLocEnumCase::kShuntResistorLoc: { + shunt_resistor_loc = static_cast(request->shunt_resistor_loc()); + break; + } + case nidaqmx_grpc::CreateAICurrentChanRequest::ShuntResistorLocEnumCase::kShuntResistorLocRaw: { + shunt_resistor_loc = static_cast(request->shunt_resistor_loc_raw()); + break; + } + case nidaqmx_grpc::CreateAICurrentChanRequest::ShuntResistorLocEnumCase::SHUNT_RESISTOR_LOC_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for shunt_resistor_loc was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIVoltageChanWithExcitRequest::BridgeConfigEnumCase::BRIDGE_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for bridge_config was not specified or out of range"); - break; + + float64 ext_shunt_resistor_val = request->ext_shunt_resistor_val(); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateAICurrentChan(task, physical_channel, name_to_assign_to_channel, terminal_config, min_val, max_val, units, shunt_resistor_loc, ext_shunt_resistor_val, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - int32 voltage_excit_source; - switch (request->voltage_excit_source_enum_case()) { - case nidaqmx_grpc::CreateAIVoltageChanWithExcitRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { - voltage_excit_source = static_cast(request->voltage_excit_source()); - break; + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAICurrentRMSChan(::grpc::ServerContext* context, const CreateAICurrentRMSChanRequest* request, CreateAICurrentRMSChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + int32 terminal_config; + switch (request->terminal_config_enum_case()) { + case nidaqmx_grpc::CreateAICurrentRMSChanRequest::TerminalConfigEnumCase::kTerminalConfig: { + terminal_config = static_cast(request->terminal_config()); + break; + } + case nidaqmx_grpc::CreateAICurrentRMSChanRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { + terminal_config = static_cast(request->terminal_config_raw()); + break; + } + case nidaqmx_grpc::CreateAICurrentRMSChanRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIVoltageChanWithExcitRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { - voltage_excit_source = static_cast(request->voltage_excit_source_raw()); - break; + + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAICurrentRMSChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAICurrentRMSChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAICurrentRMSChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateAIVoltageChanWithExcitRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); - break; + + int32 shunt_resistor_loc; + switch (request->shunt_resistor_loc_enum_case()) { + case nidaqmx_grpc::CreateAICurrentRMSChanRequest::ShuntResistorLocEnumCase::kShuntResistorLoc: { + shunt_resistor_loc = static_cast(request->shunt_resistor_loc()); + break; + } + case nidaqmx_grpc::CreateAICurrentRMSChanRequest::ShuntResistorLocEnumCase::kShuntResistorLocRaw: { + shunt_resistor_loc = static_cast(request->shunt_resistor_loc_raw()); + break; + } + case nidaqmx_grpc::CreateAICurrentRMSChanRequest::ShuntResistorLocEnumCase::SHUNT_RESISTOR_LOC_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for shunt_resistor_loc was not specified or out of range"); + break; + } } - } - float64 voltage_excit_val = request->voltage_excit_val(); - bool32 use_excit_for_scaling = request->use_excit_for_scaling(); - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateAIVoltageChanWithExcit(task, physical_channel, name_to_assign_to_channel, terminal_config, min_val, max_val, units, bridge_config, voltage_excit_source, voltage_excit_val, use_excit_for_scaling, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + float64 ext_shunt_resistor_val = request->ext_shunt_resistor_val(); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateAICurrentRMSChan(task, physical_channel, name_to_assign_to_channel, terminal_config, min_val, max_val, units, shunt_resistor_loc, ext_shunt_resistor_val, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAIVoltageRMSChan(::grpc::ServerContext* context, const CreateAIVoltageRMSChanRequest* request, CreateAIVoltageRMSChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - int32 terminal_config; - switch (request->terminal_config_enum_case()) { - case nidaqmx_grpc::CreateAIVoltageRMSChanRequest::TerminalConfigEnumCase::kTerminalConfig: { - terminal_config = static_cast(request->terminal_config()); - break; - } - case nidaqmx_grpc::CreateAIVoltageRMSChanRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { - terminal_config = static_cast(request->terminal_config_raw()); - break; - } - case nidaqmx_grpc::CreateAIVoltageRMSChanRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); - break; + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAIForceBridgePolynomialChan(::grpc::ServerContext* context, const CreateAIForceBridgePolynomialChanRequest* request, CreateAIForceBridgePolynomialChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAIForceBridgePolynomialChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAIForceBridgePolynomialChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAIForceBridgePolynomialChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - } - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAIVoltageRMSChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateAIVoltageRMSChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateAIVoltageRMSChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + int32 bridge_config; + switch (request->bridge_config_enum_case()) { + case nidaqmx_grpc::CreateAIForceBridgePolynomialChanRequest::BridgeConfigEnumCase::kBridgeConfig: { + bridge_config = static_cast(request->bridge_config()); + break; + } + case nidaqmx_grpc::CreateAIForceBridgePolynomialChanRequest::BridgeConfigEnumCase::kBridgeConfigRaw: { + bridge_config = static_cast(request->bridge_config_raw()); + break; + } + case nidaqmx_grpc::CreateAIForceBridgePolynomialChanRequest::BridgeConfigEnumCase::BRIDGE_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for bridge_config was not specified or out of range"); + break; + } } - } - - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateAIVoltageRMSChan(task, physical_channel, name_to_assign_to_channel, terminal_config, min_val, max_val, units, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAOCurrentChan(::grpc::ServerContext* context, const CreateAOCurrentChanRequest* request, CreateAOCurrentChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAOCurrentChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateAOCurrentChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateAOCurrentChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; - } - } - - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateAOCurrentChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAOFuncGenChan(::grpc::ServerContext* context, const CreateAOFuncGenChanRequest* request, CreateAOFuncGenChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - int32 type; - switch (request->type_enum_case()) { - case nidaqmx_grpc::CreateAOFuncGenChanRequest::TypeEnumCase::kType: { - type = static_cast(request->type()); - break; - } - case nidaqmx_grpc::CreateAOFuncGenChanRequest::TypeEnumCase::kTypeRaw: { - type = static_cast(request->type_raw()); - break; - } - case nidaqmx_grpc::CreateAOFuncGenChanRequest::TypeEnumCase::TYPE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for type was not specified or out of range"); - break; - } - } - - float64 freq = request->freq(); - float64 amplitude = request->amplitude(); - float64 offset = request->offset(); - auto status = library_->CreateAOFuncGenChan(task, physical_channel, name_to_assign_to_channel, type, freq, amplitude, offset); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateAOVoltageChan(::grpc::ServerContext* context, const CreateAOVoltageChanRequest* request, CreateAOVoltageChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateAOVoltageChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateAOVoltageChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateAOVoltageChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; - } - } - - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateAOVoltageChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateCIAngEncoderChan(::grpc::ServerContext* context, const CreateCIAngEncoderChanRequest* request, CreateCIAngEncoderChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto counter_mbcs = convert_from_grpc(request->counter()); - auto counter = counter_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - int32 decoding_type; - switch (request->decoding_type_enum_case()) { - case nidaqmx_grpc::CreateCIAngEncoderChanRequest::DecodingTypeEnumCase::kDecodingType: { - decoding_type = static_cast(request->decoding_type()); - break; + int32 voltage_excit_source; + switch (request->voltage_excit_source_enum_case()) { + case nidaqmx_grpc::CreateAIForceBridgePolynomialChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { + voltage_excit_source = static_cast(request->voltage_excit_source()); + break; + } + case nidaqmx_grpc::CreateAIForceBridgePolynomialChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { + voltage_excit_source = static_cast(request->voltage_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateAIForceBridgePolynomialChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateCIAngEncoderChanRequest::DecodingTypeEnumCase::kDecodingTypeRaw: { - decoding_type = static_cast(request->decoding_type_raw()); - break; + + float64 voltage_excit_val = request->voltage_excit_val(); + float64 nominal_bridge_resistance = request->nominal_bridge_resistance(); + auto forward_coeffs = const_cast(request->forward_coeffs().data()); + uInt32 num_forward_coeffs = static_cast(request->forward_coeffs().size()); + auto reverse_coeffs = const_cast(request->reverse_coeffs().data()); + uInt32 num_reverse_coeffs = static_cast(request->reverse_coeffs().size()); + int32 electrical_units; + switch (request->electrical_units_enum_case()) { + case nidaqmx_grpc::CreateAIForceBridgePolynomialChanRequest::ElectricalUnitsEnumCase::kElectricalUnits: { + electrical_units = static_cast(request->electrical_units()); + break; + } + case nidaqmx_grpc::CreateAIForceBridgePolynomialChanRequest::ElectricalUnitsEnumCase::kElectricalUnitsRaw: { + electrical_units = static_cast(request->electrical_units_raw()); + break; + } + case nidaqmx_grpc::CreateAIForceBridgePolynomialChanRequest::ElectricalUnitsEnumCase::ELECTRICAL_UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for electrical_units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateCIAngEncoderChanRequest::DecodingTypeEnumCase::DECODING_TYPE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for decoding_type was not specified or out of range"); - break; + + int32 physical_units; + switch (request->physical_units_enum_case()) { + case nidaqmx_grpc::CreateAIForceBridgePolynomialChanRequest::PhysicalUnitsEnumCase::kPhysicalUnits: { + physical_units = static_cast(request->physical_units()); + break; + } + case nidaqmx_grpc::CreateAIForceBridgePolynomialChanRequest::PhysicalUnitsEnumCase::kPhysicalUnitsRaw: { + physical_units = static_cast(request->physical_units_raw()); + break; + } + case nidaqmx_grpc::CreateAIForceBridgePolynomialChanRequest::PhysicalUnitsEnumCase::PHYSICAL_UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for physical_units was not specified or out of range"); + break; + } } - } - bool32 zidx_enable = request->zidx_enable(); - float64 zidx_val = request->zidx_val(); - int32 zidx_phase; - switch (request->zidx_phase_enum_case()) { - case nidaqmx_grpc::CreateCIAngEncoderChanRequest::ZidxPhaseEnumCase::kZidxPhase: { - zidx_phase = static_cast(request->zidx_phase()); - break; + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateAIForceBridgePolynomialChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, bridge_config, voltage_excit_source, voltage_excit_val, nominal_bridge_resistance, forward_coeffs, num_forward_coeffs, reverse_coeffs, num_reverse_coeffs, electrical_units, physical_units, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - case nidaqmx_grpc::CreateCIAngEncoderChanRequest::ZidxPhaseEnumCase::kZidxPhaseRaw: { - zidx_phase = static_cast(request->zidx_phase_raw()); - break; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAIForceBridgeTableChan(::grpc::ServerContext* context, const CreateAIForceBridgeTableChanRequest* request, CreateAIForceBridgeTableChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAIForceBridgeTableChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAIForceBridgeTableChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAIForceBridgeTableChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateCIAngEncoderChanRequest::ZidxPhaseEnumCase::ZIDX_PHASE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for zidx_phase was not specified or out of range"); - break; + + int32 bridge_config; + switch (request->bridge_config_enum_case()) { + case nidaqmx_grpc::CreateAIForceBridgeTableChanRequest::BridgeConfigEnumCase::kBridgeConfig: { + bridge_config = static_cast(request->bridge_config()); + break; + } + case nidaqmx_grpc::CreateAIForceBridgeTableChanRequest::BridgeConfigEnumCase::kBridgeConfigRaw: { + bridge_config = static_cast(request->bridge_config_raw()); + break; + } + case nidaqmx_grpc::CreateAIForceBridgeTableChanRequest::BridgeConfigEnumCase::BRIDGE_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for bridge_config was not specified or out of range"); + break; + } } - } - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateCIAngEncoderChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; + int32 voltage_excit_source; + switch (request->voltage_excit_source_enum_case()) { + case nidaqmx_grpc::CreateAIForceBridgeTableChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { + voltage_excit_source = static_cast(request->voltage_excit_source()); + break; + } + case nidaqmx_grpc::CreateAIForceBridgeTableChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { + voltage_excit_source = static_cast(request->voltage_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateAIForceBridgeTableChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateCIAngEncoderChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; + + float64 voltage_excit_val = request->voltage_excit_val(); + float64 nominal_bridge_resistance = request->nominal_bridge_resistance(); + auto electrical_vals = const_cast(request->electrical_vals().data()); + uInt32 num_electrical_vals = static_cast(request->electrical_vals().size()); + int32 electrical_units; + switch (request->electrical_units_enum_case()) { + case nidaqmx_grpc::CreateAIForceBridgeTableChanRequest::ElectricalUnitsEnumCase::kElectricalUnits: { + electrical_units = static_cast(request->electrical_units()); + break; + } + case nidaqmx_grpc::CreateAIForceBridgeTableChanRequest::ElectricalUnitsEnumCase::kElectricalUnitsRaw: { + electrical_units = static_cast(request->electrical_units_raw()); + break; + } + case nidaqmx_grpc::CreateAIForceBridgeTableChanRequest::ElectricalUnitsEnumCase::ELECTRICAL_UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for electrical_units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateCIAngEncoderChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + + auto physical_vals = const_cast(request->physical_vals().data()); + uInt32 num_physical_vals = static_cast(request->physical_vals().size()); + int32 physical_units; + switch (request->physical_units_enum_case()) { + case nidaqmx_grpc::CreateAIForceBridgeTableChanRequest::PhysicalUnitsEnumCase::kPhysicalUnits: { + physical_units = static_cast(request->physical_units()); + break; + } + case nidaqmx_grpc::CreateAIForceBridgeTableChanRequest::PhysicalUnitsEnumCase::kPhysicalUnitsRaw: { + physical_units = static_cast(request->physical_units_raw()); + break; + } + case nidaqmx_grpc::CreateAIForceBridgeTableChanRequest::PhysicalUnitsEnumCase::PHYSICAL_UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for physical_units was not specified or out of range"); + break; + } } - } - uInt32 pulses_per_rev = request->pulses_per_rev(); - float64 initial_angle = request->initial_angle(); - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateCIAngEncoderChan(task, counter, name_to_assign_to_channel, decoding_type, zidx_enable, zidx_val, zidx_phase, units, pulses_per_rev, initial_angle, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateAIForceBridgeTableChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, bridge_config, voltage_excit_source, voltage_excit_val, nominal_bridge_resistance, electrical_vals, num_electrical_vals, electrical_units, physical_vals, num_physical_vals, physical_units, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAIForceBridgeTwoPointLinChan(::grpc::ServerContext* context, const CreateAIForceBridgeTwoPointLinChanRequest* request, CreateAIForceBridgeTwoPointLinChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAIForceBridgeTwoPointLinChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAIForceBridgeTwoPointLinChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAIForceBridgeTwoPointLinChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateCIAngVelocityChan(::grpc::ServerContext* context, const CreateCIAngVelocityChanRequest* request, CreateCIAngVelocityChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto counter_mbcs = convert_from_grpc(request->counter()); - auto counter = counter_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 decoding_type; - switch (request->decoding_type_enum_case()) { - case nidaqmx_grpc::CreateCIAngVelocityChanRequest::DecodingTypeEnumCase::kDecodingType: { - decoding_type = static_cast(request->decoding_type()); - break; - } - case nidaqmx_grpc::CreateCIAngVelocityChanRequest::DecodingTypeEnumCase::kDecodingTypeRaw: { - decoding_type = static_cast(request->decoding_type_raw()); - break; - } - case nidaqmx_grpc::CreateCIAngVelocityChanRequest::DecodingTypeEnumCase::DECODING_TYPE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for decoding_type was not specified or out of range"); - break; - } - } - - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateCIAngVelocityChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateCIAngVelocityChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateCIAngVelocityChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; - } - } - - uInt32 pulses_per_rev = request->pulses_per_rev(); - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateCIAngVelocityChan(task, counter, name_to_assign_to_channel, min_val, max_val, decoding_type, units, pulses_per_rev, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + int32 bridge_config; + switch (request->bridge_config_enum_case()) { + case nidaqmx_grpc::CreateAIForceBridgeTwoPointLinChanRequest::BridgeConfigEnumCase::kBridgeConfig: { + bridge_config = static_cast(request->bridge_config()); + break; + } + case nidaqmx_grpc::CreateAIForceBridgeTwoPointLinChanRequest::BridgeConfigEnumCase::kBridgeConfigRaw: { + bridge_config = static_cast(request->bridge_config_raw()); + break; + } + case nidaqmx_grpc::CreateAIForceBridgeTwoPointLinChanRequest::BridgeConfigEnumCase::BRIDGE_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for bridge_config was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateCICountEdgesChan(::grpc::ServerContext* context, const CreateCICountEdgesChanRequest* request, CreateCICountEdgesChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto counter_mbcs = convert_from_grpc(request->counter()); - auto counter = counter_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - int32 edge; - switch (request->edge_enum_case()) { - case nidaqmx_grpc::CreateCICountEdgesChanRequest::EdgeEnumCase::kEdge: { - edge = static_cast(request->edge()); - break; + int32 voltage_excit_source; + switch (request->voltage_excit_source_enum_case()) { + case nidaqmx_grpc::CreateAIForceBridgeTwoPointLinChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { + voltage_excit_source = static_cast(request->voltage_excit_source()); + break; + } + case nidaqmx_grpc::CreateAIForceBridgeTwoPointLinChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { + voltage_excit_source = static_cast(request->voltage_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateAIForceBridgeTwoPointLinChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateCICountEdgesChanRequest::EdgeEnumCase::kEdgeRaw: { - edge = static_cast(request->edge_raw()); - break; + + float64 voltage_excit_val = request->voltage_excit_val(); + float64 nominal_bridge_resistance = request->nominal_bridge_resistance(); + float64 first_electrical_val = request->first_electrical_val(); + float64 second_electrical_val = request->second_electrical_val(); + int32 electrical_units; + switch (request->electrical_units_enum_case()) { + case nidaqmx_grpc::CreateAIForceBridgeTwoPointLinChanRequest::ElectricalUnitsEnumCase::kElectricalUnits: { + electrical_units = static_cast(request->electrical_units()); + break; + } + case nidaqmx_grpc::CreateAIForceBridgeTwoPointLinChanRequest::ElectricalUnitsEnumCase::kElectricalUnitsRaw: { + electrical_units = static_cast(request->electrical_units_raw()); + break; + } + case nidaqmx_grpc::CreateAIForceBridgeTwoPointLinChanRequest::ElectricalUnitsEnumCase::ELECTRICAL_UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for electrical_units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateCICountEdgesChanRequest::EdgeEnumCase::EDGE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for edge was not specified or out of range"); - break; + + float64 first_physical_val = request->first_physical_val(); + float64 second_physical_val = request->second_physical_val(); + int32 physical_units; + switch (request->physical_units_enum_case()) { + case nidaqmx_grpc::CreateAIForceBridgeTwoPointLinChanRequest::PhysicalUnitsEnumCase::kPhysicalUnits: { + physical_units = static_cast(request->physical_units()); + break; + } + case nidaqmx_grpc::CreateAIForceBridgeTwoPointLinChanRequest::PhysicalUnitsEnumCase::kPhysicalUnitsRaw: { + physical_units = static_cast(request->physical_units_raw()); + break; + } + case nidaqmx_grpc::CreateAIForceBridgeTwoPointLinChanRequest::PhysicalUnitsEnumCase::PHYSICAL_UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for physical_units was not specified or out of range"); + break; + } } - } - uInt32 initial_count = request->initial_count(); - int32 count_direction; - switch (request->count_direction_enum_case()) { - case nidaqmx_grpc::CreateCICountEdgesChanRequest::CountDirectionEnumCase::kCountDirection: { - count_direction = static_cast(request->count_direction()); - break; + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateAIForceBridgeTwoPointLinChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, bridge_config, voltage_excit_source, voltage_excit_val, nominal_bridge_resistance, first_electrical_val, second_electrical_val, electrical_units, first_physical_val, second_physical_val, physical_units, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - case nidaqmx_grpc::CreateCICountEdgesChanRequest::CountDirectionEnumCase::kCountDirectionRaw: { - count_direction = static_cast(request->count_direction_raw()); - break; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAIForceIEPEChan(::grpc::ServerContext* context, const CreateAIForceIEPEChanRequest* request, CreateAIForceIEPEChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + int32 terminal_config; + switch (request->terminal_config_enum_case()) { + case nidaqmx_grpc::CreateAIForceIEPEChanRequest::TerminalConfigEnumCase::kTerminalConfig: { + terminal_config = static_cast(request->terminal_config()); + break; + } + case nidaqmx_grpc::CreateAIForceIEPEChanRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { + terminal_config = static_cast(request->terminal_config_raw()); + break; + } + case nidaqmx_grpc::CreateAIForceIEPEChanRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateCICountEdgesChanRequest::CountDirectionEnumCase::COUNT_DIRECTION_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for count_direction was not specified or out of range"); - break; + + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAIForceIEPEChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAIForceIEPEChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAIForceIEPEChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - } - auto status = library_->CreateCICountEdgesChan(task, counter, name_to_assign_to_channel, edge, initial_count, count_direction); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + float64 sensitivity = request->sensitivity(); + int32 sensitivity_units; + switch (request->sensitivity_units_enum_case()) { + case nidaqmx_grpc::CreateAIForceIEPEChanRequest::SensitivityUnitsEnumCase::kSensitivityUnits: { + sensitivity_units = static_cast(request->sensitivity_units()); + break; + } + case nidaqmx_grpc::CreateAIForceIEPEChanRequest::SensitivityUnitsEnumCase::kSensitivityUnitsRaw: { + sensitivity_units = static_cast(request->sensitivity_units_raw()); + break; + } + case nidaqmx_grpc::CreateAIForceIEPEChanRequest::SensitivityUnitsEnumCase::SENSITIVITY_UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sensitivity_units was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateCIDutyCycleChan(::grpc::ServerContext* context, const CreateCIDutyCycleChanRequest* request, CreateCIDutyCycleChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto counter_mbcs = convert_from_grpc(request->counter()); - auto counter = counter_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_freq = request->min_freq(); - float64 max_freq = request->max_freq(); - int32 edge; - switch (request->edge_enum_case()) { - case nidaqmx_grpc::CreateCIDutyCycleChanRequest::EdgeEnumCase::kEdge: { - edge = static_cast(request->edge()); - break; - } - case nidaqmx_grpc::CreateCIDutyCycleChanRequest::EdgeEnumCase::kEdgeRaw: { - edge = static_cast(request->edge_raw()); - break; - } - case nidaqmx_grpc::CreateCIDutyCycleChanRequest::EdgeEnumCase::EDGE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for edge was not specified or out of range"); - break; - } - } - - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateCIDutyCycleChan(task, counter, name_to_assign_to_channel, min_freq, max_freq, edge, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + int32 current_excit_source; + switch (request->current_excit_source_enum_case()) { + case nidaqmx_grpc::CreateAIForceIEPEChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSource: { + current_excit_source = static_cast(request->current_excit_source()); + break; + } + case nidaqmx_grpc::CreateAIForceIEPEChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSourceRaw: { + current_excit_source = static_cast(request->current_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateAIForceIEPEChanRequest::CurrentExcitSourceEnumCase::CURRENT_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for current_excit_source was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateCIFreqChan(::grpc::ServerContext* context, const CreateCIFreqChanRequest* request, CreateCIFreqChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto counter_mbcs = convert_from_grpc(request->counter()); - auto counter = counter_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateCIFreqChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; + float64 current_excit_val = request->current_excit_val(); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateAIForceIEPEChan(task, physical_channel, name_to_assign_to_channel, terminal_config, min_val, max_val, units, sensitivity, sensitivity_units, current_excit_source, current_excit_val, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - case nidaqmx_grpc::CreateCIFreqChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAIFreqVoltageChan(::grpc::ServerContext* context, const CreateAIFreqVoltageChanRequest* request, CreateAIFreqVoltageChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAIFreqVoltageChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAIFreqVoltageChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAIFreqVoltageChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateCIFreqChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + + float64 threshold_level = request->threshold_level(); + float64 hysteresis = request->hysteresis(); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateAIFreqVoltageChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, threshold_level, hysteresis, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAIMicrophoneChan(::grpc::ServerContext* context, const CreateAIMicrophoneChanRequest* request, CreateAIMicrophoneChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + int32 terminal_config; + switch (request->terminal_config_enum_case()) { + case nidaqmx_grpc::CreateAIMicrophoneChanRequest::TerminalConfigEnumCase::kTerminalConfig: { + terminal_config = static_cast(request->terminal_config()); + break; + } + case nidaqmx_grpc::CreateAIMicrophoneChanRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { + terminal_config = static_cast(request->terminal_config_raw()); + break; + } + case nidaqmx_grpc::CreateAIMicrophoneChanRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); + break; + } + } - int32 edge; - switch (request->edge_enum_case()) { - case nidaqmx_grpc::CreateCIFreqChanRequest::EdgeEnumCase::kEdge: { - edge = static_cast(request->edge()); - break; + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAIMicrophoneChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAIMicrophoneChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAIMicrophoneChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateCIFreqChanRequest::EdgeEnumCase::kEdgeRaw: { - edge = static_cast(request->edge_raw()); - break; + + float64 mic_sensitivity = request->mic_sensitivity(); + float64 max_snd_press_level = request->max_snd_press_level(); + int32 current_excit_source; + switch (request->current_excit_source_enum_case()) { + case nidaqmx_grpc::CreateAIMicrophoneChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSource: { + current_excit_source = static_cast(request->current_excit_source()); + break; + } + case nidaqmx_grpc::CreateAIMicrophoneChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSourceRaw: { + current_excit_source = static_cast(request->current_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateAIMicrophoneChanRequest::CurrentExcitSourceEnumCase::CURRENT_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for current_excit_source was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateCIFreqChanRequest::EdgeEnumCase::EDGE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for edge was not specified or out of range"); - break; + + float64 current_excit_val = request->current_excit_val(); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateAIMicrophoneChan(task, physical_channel, name_to_assign_to_channel, terminal_config, units, mic_sensitivity, max_snd_press_level, current_excit_source, current_excit_val, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - int32 meas_method; - switch (request->meas_method_enum_case()) { - case nidaqmx_grpc::CreateCIFreqChanRequest::MeasMethodEnumCase::kMeasMethod: { - meas_method = static_cast(request->meas_method()); - break; + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAIPosEddyCurrProxProbeChan(::grpc::ServerContext* context, const CreateAIPosEddyCurrProxProbeChanRequest* request, CreateAIPosEddyCurrProxProbeChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAIPosEddyCurrProxProbeChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAIPosEddyCurrProxProbeChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAIPosEddyCurrProxProbeChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateCIFreqChanRequest::MeasMethodEnumCase::kMeasMethodRaw: { - meas_method = static_cast(request->meas_method_raw()); - break; + + float64 sensitivity = request->sensitivity(); + int32 sensitivity_units; + switch (request->sensitivity_units_enum_case()) { + case nidaqmx_grpc::CreateAIPosEddyCurrProxProbeChanRequest::SensitivityUnitsEnumCase::kSensitivityUnits: { + sensitivity_units = static_cast(request->sensitivity_units()); + break; + } + case nidaqmx_grpc::CreateAIPosEddyCurrProxProbeChanRequest::SensitivityUnitsEnumCase::kSensitivityUnitsRaw: { + sensitivity_units = static_cast(request->sensitivity_units_raw()); + break; + } + case nidaqmx_grpc::CreateAIPosEddyCurrProxProbeChanRequest::SensitivityUnitsEnumCase::SENSITIVITY_UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sensitivity_units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateCIFreqChanRequest::MeasMethodEnumCase::MEAS_METHOD_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for meas_method was not specified or out of range"); - break; + + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateAIPosEddyCurrProxProbeChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, sensitivity, sensitivity_units, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAIPosLVDTChan(::grpc::ServerContext* context, const CreateAIPosLVDTChanRequest* request, CreateAIPosLVDTChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAIPosLVDTChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAIPosLVDTChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAIPosLVDTChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } + } - float64 meas_time = request->meas_time(); - uInt32 divisor = request->divisor(); - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateCIFreqChan(task, counter, name_to_assign_to_channel, min_val, max_val, units, edge, meas_method, meas_time, divisor, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + float64 sensitivity = request->sensitivity(); + int32 sensitivity_units; + switch (request->sensitivity_units_enum_case()) { + case nidaqmx_grpc::CreateAIPosLVDTChanRequest::SensitivityUnitsEnumCase::kSensitivityUnits: { + sensitivity_units = static_cast(request->sensitivity_units()); + break; + } + case nidaqmx_grpc::CreateAIPosLVDTChanRequest::SensitivityUnitsEnumCase::kSensitivityUnitsRaw: { + sensitivity_units = static_cast(request->sensitivity_units_raw()); + break; + } + case nidaqmx_grpc::CreateAIPosLVDTChanRequest::SensitivityUnitsEnumCase::SENSITIVITY_UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sensitivity_units was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateCIGPSTimestampChan(::grpc::ServerContext* context, const CreateCIGPSTimestampChanRequest* request, CreateCIGPSTimestampChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto counter_mbcs = convert_from_grpc(request->counter()); - auto counter = counter_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateCIGPSTimestampChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; + int32 voltage_excit_source; + switch (request->voltage_excit_source_enum_case()) { + case nidaqmx_grpc::CreateAIPosLVDTChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { + voltage_excit_source = static_cast(request->voltage_excit_source()); + break; + } + case nidaqmx_grpc::CreateAIPosLVDTChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { + voltage_excit_source = static_cast(request->voltage_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateAIPosLVDTChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateCIGPSTimestampChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; + + float64 voltage_excit_val = request->voltage_excit_val(); + float64 voltage_excit_freq = request->voltage_excit_freq(); + int32 ac_excit_wire_mode; + switch (request->ac_excit_wire_mode_enum_case()) { + case nidaqmx_grpc::CreateAIPosLVDTChanRequest::AcExcitWireModeEnumCase::kAcExcitWireMode: { + ac_excit_wire_mode = static_cast(request->ac_excit_wire_mode()); + break; + } + case nidaqmx_grpc::CreateAIPosLVDTChanRequest::AcExcitWireModeEnumCase::kAcExcitWireModeRaw: { + ac_excit_wire_mode = static_cast(request->ac_excit_wire_mode_raw()); + break; + } + case nidaqmx_grpc::CreateAIPosLVDTChanRequest::AcExcitWireModeEnumCase::AC_EXCIT_WIRE_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for ac_excit_wire_mode was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateCIGPSTimestampChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateAIPosLVDTChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, sensitivity, sensitivity_units, voltage_excit_source, voltage_excit_val, voltage_excit_freq, ac_excit_wire_mode, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAIPosRVDTChan(::grpc::ServerContext* context, const CreateAIPosRVDTChanRequest* request, CreateAIPosRVDTChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAIPosRVDTChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAIPosRVDTChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAIPosRVDTChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } + } - int32 sync_method; - switch (request->sync_method_enum_case()) { - case nidaqmx_grpc::CreateCIGPSTimestampChanRequest::SyncMethodEnumCase::kSyncMethod: { - sync_method = static_cast(request->sync_method()); - break; + float64 sensitivity = request->sensitivity(); + int32 sensitivity_units; + switch (request->sensitivity_units_enum_case()) { + case nidaqmx_grpc::CreateAIPosRVDTChanRequest::SensitivityUnitsEnumCase::kSensitivityUnits: { + sensitivity_units = static_cast(request->sensitivity_units()); + break; + } + case nidaqmx_grpc::CreateAIPosRVDTChanRequest::SensitivityUnitsEnumCase::kSensitivityUnitsRaw: { + sensitivity_units = static_cast(request->sensitivity_units_raw()); + break; + } + case nidaqmx_grpc::CreateAIPosRVDTChanRequest::SensitivityUnitsEnumCase::SENSITIVITY_UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sensitivity_units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateCIGPSTimestampChanRequest::SyncMethodEnumCase::kSyncMethodRaw: { - sync_method = static_cast(request->sync_method_raw()); - break; + + int32 voltage_excit_source; + switch (request->voltage_excit_source_enum_case()) { + case nidaqmx_grpc::CreateAIPosRVDTChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { + voltage_excit_source = static_cast(request->voltage_excit_source()); + break; + } + case nidaqmx_grpc::CreateAIPosRVDTChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { + voltage_excit_source = static_cast(request->voltage_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateAIPosRVDTChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateCIGPSTimestampChanRequest::SyncMethodEnumCase::SYNC_METHOD_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sync_method was not specified or out of range"); - break; + + float64 voltage_excit_val = request->voltage_excit_val(); + float64 voltage_excit_freq = request->voltage_excit_freq(); + int32 ac_excit_wire_mode; + switch (request->ac_excit_wire_mode_enum_case()) { + case nidaqmx_grpc::CreateAIPosRVDTChanRequest::AcExcitWireModeEnumCase::kAcExcitWireMode: { + ac_excit_wire_mode = static_cast(request->ac_excit_wire_mode()); + break; + } + case nidaqmx_grpc::CreateAIPosRVDTChanRequest::AcExcitWireModeEnumCase::kAcExcitWireModeRaw: { + ac_excit_wire_mode = static_cast(request->ac_excit_wire_mode_raw()); + break; + } + case nidaqmx_grpc::CreateAIPosRVDTChanRequest::AcExcitWireModeEnumCase::AC_EXCIT_WIRE_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for ac_excit_wire_mode was not specified or out of range"); + break; + } } - } - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateCIGPSTimestampChan(task, counter, name_to_assign_to_channel, units, sync_method, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateCILinEncoderChan(::grpc::ServerContext* context, const CreateCILinEncoderChanRequest* request, CreateCILinEncoderChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto counter_mbcs = convert_from_grpc(request->counter()); - auto counter = counter_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - int32 decoding_type; - switch (request->decoding_type_enum_case()) { - case nidaqmx_grpc::CreateCILinEncoderChanRequest::DecodingTypeEnumCase::kDecodingType: { - decoding_type = static_cast(request->decoding_type()); - break; - } - case nidaqmx_grpc::CreateCILinEncoderChanRequest::DecodingTypeEnumCase::kDecodingTypeRaw: { - decoding_type = static_cast(request->decoding_type_raw()); - break; - } - case nidaqmx_grpc::CreateCILinEncoderChanRequest::DecodingTypeEnumCase::DECODING_TYPE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for decoding_type was not specified or out of range"); - break; + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateAIPosRVDTChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, sensitivity, sensitivity_units, voltage_excit_source, voltage_excit_val, voltage_excit_freq, ac_excit_wire_mode, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - bool32 zidx_enable = request->zidx_enable(); - float64 zidx_val = request->zidx_val(); - int32 zidx_phase; - switch (request->zidx_phase_enum_case()) { - case nidaqmx_grpc::CreateCILinEncoderChanRequest::ZidxPhaseEnumCase::kZidxPhase: { - zidx_phase = static_cast(request->zidx_phase()); - break; + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAIPowerChan(::grpc::ServerContext* context, const CreateAIPowerChanRequest* request, CreateAIPowerChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 voltage_setpoint = request->voltage_setpoint(); + float64 current_setpoint = request->current_setpoint(); + bool32 output_enable = request->output_enable(); + auto status = library_->CreateAIPowerChan(task, physical_channel, name_to_assign_to_channel, voltage_setpoint, current_setpoint, output_enable); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - case nidaqmx_grpc::CreateCILinEncoderChanRequest::ZidxPhaseEnumCase::kZidxPhaseRaw: { - zidx_phase = static_cast(request->zidx_phase_raw()); - break; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAIPressureBridgePolynomialChan(::grpc::ServerContext* context, const CreateAIPressureBridgePolynomialChanRequest* request, CreateAIPressureBridgePolynomialChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAIPressureBridgePolynomialChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAIPressureBridgePolynomialChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAIPressureBridgePolynomialChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateCILinEncoderChanRequest::ZidxPhaseEnumCase::ZIDX_PHASE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for zidx_phase was not specified or out of range"); - break; + + int32 bridge_config; + switch (request->bridge_config_enum_case()) { + case nidaqmx_grpc::CreateAIPressureBridgePolynomialChanRequest::BridgeConfigEnumCase::kBridgeConfig: { + bridge_config = static_cast(request->bridge_config()); + break; + } + case nidaqmx_grpc::CreateAIPressureBridgePolynomialChanRequest::BridgeConfigEnumCase::kBridgeConfigRaw: { + bridge_config = static_cast(request->bridge_config_raw()); + break; + } + case nidaqmx_grpc::CreateAIPressureBridgePolynomialChanRequest::BridgeConfigEnumCase::BRIDGE_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for bridge_config was not specified or out of range"); + break; + } } - } - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateCILinEncoderChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; + int32 voltage_excit_source; + switch (request->voltage_excit_source_enum_case()) { + case nidaqmx_grpc::CreateAIPressureBridgePolynomialChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { + voltage_excit_source = static_cast(request->voltage_excit_source()); + break; + } + case nidaqmx_grpc::CreateAIPressureBridgePolynomialChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { + voltage_excit_source = static_cast(request->voltage_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateAIPressureBridgePolynomialChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateCILinEncoderChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; + + float64 voltage_excit_val = request->voltage_excit_val(); + float64 nominal_bridge_resistance = request->nominal_bridge_resistance(); + auto forward_coeffs = const_cast(request->forward_coeffs().data()); + uInt32 num_forward_coeffs = static_cast(request->forward_coeffs().size()); + auto reverse_coeffs = const_cast(request->reverse_coeffs().data()); + uInt32 num_reverse_coeffs = static_cast(request->reverse_coeffs().size()); + int32 electrical_units; + switch (request->electrical_units_enum_case()) { + case nidaqmx_grpc::CreateAIPressureBridgePolynomialChanRequest::ElectricalUnitsEnumCase::kElectricalUnits: { + electrical_units = static_cast(request->electrical_units()); + break; + } + case nidaqmx_grpc::CreateAIPressureBridgePolynomialChanRequest::ElectricalUnitsEnumCase::kElectricalUnitsRaw: { + electrical_units = static_cast(request->electrical_units_raw()); + break; + } + case nidaqmx_grpc::CreateAIPressureBridgePolynomialChanRequest::ElectricalUnitsEnumCase::ELECTRICAL_UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for electrical_units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateCILinEncoderChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + + int32 physical_units; + switch (request->physical_units_enum_case()) { + case nidaqmx_grpc::CreateAIPressureBridgePolynomialChanRequest::PhysicalUnitsEnumCase::kPhysicalUnits: { + physical_units = static_cast(request->physical_units()); + break; + } + case nidaqmx_grpc::CreateAIPressureBridgePolynomialChanRequest::PhysicalUnitsEnumCase::kPhysicalUnitsRaw: { + physical_units = static_cast(request->physical_units_raw()); + break; + } + case nidaqmx_grpc::CreateAIPressureBridgePolynomialChanRequest::PhysicalUnitsEnumCase::PHYSICAL_UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for physical_units was not specified or out of range"); + break; + } } - } - float64 dist_per_pulse = request->dist_per_pulse(); - float64 initial_pos = request->initial_pos(); - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateCILinEncoderChan(task, counter, name_to_assign_to_channel, decoding_type, zidx_enable, zidx_val, zidx_phase, units, dist_per_pulse, initial_pos, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateAIPressureBridgePolynomialChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, bridge_config, voltage_excit_source, voltage_excit_val, nominal_bridge_resistance, forward_coeffs, num_forward_coeffs, reverse_coeffs, num_reverse_coeffs, electrical_units, physical_units, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAIPressureBridgeTableChan(::grpc::ServerContext* context, const CreateAIPressureBridgeTableChanRequest* request, CreateAIPressureBridgeTableChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAIPressureBridgeTableChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAIPressureBridgeTableChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAIPressureBridgeTableChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateCILinVelocityChan(::grpc::ServerContext* context, const CreateCILinVelocityChanRequest* request, CreateCILinVelocityChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto counter_mbcs = convert_from_grpc(request->counter()); - auto counter = counter_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 decoding_type; - switch (request->decoding_type_enum_case()) { - case nidaqmx_grpc::CreateCILinVelocityChanRequest::DecodingTypeEnumCase::kDecodingType: { - decoding_type = static_cast(request->decoding_type()); - break; - } - case nidaqmx_grpc::CreateCILinVelocityChanRequest::DecodingTypeEnumCase::kDecodingTypeRaw: { - decoding_type = static_cast(request->decoding_type_raw()); - break; - } - case nidaqmx_grpc::CreateCILinVelocityChanRequest::DecodingTypeEnumCase::DECODING_TYPE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for decoding_type was not specified or out of range"); - break; - } - } - - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateCILinVelocityChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateCILinVelocityChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateCILinVelocityChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; - } - } - - float64 dist_per_pulse = request->dist_per_pulse(); - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateCILinVelocityChan(task, counter, name_to_assign_to_channel, min_val, max_val, decoding_type, units, dist_per_pulse, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + int32 bridge_config; + switch (request->bridge_config_enum_case()) { + case nidaqmx_grpc::CreateAIPressureBridgeTableChanRequest::BridgeConfigEnumCase::kBridgeConfig: { + bridge_config = static_cast(request->bridge_config()); + break; + } + case nidaqmx_grpc::CreateAIPressureBridgeTableChanRequest::BridgeConfigEnumCase::kBridgeConfigRaw: { + bridge_config = static_cast(request->bridge_config_raw()); + break; + } + case nidaqmx_grpc::CreateAIPressureBridgeTableChanRequest::BridgeConfigEnumCase::BRIDGE_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for bridge_config was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateCIPeriodChan(::grpc::ServerContext* context, const CreateCIPeriodChanRequest* request, CreateCIPeriodChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto counter_mbcs = convert_from_grpc(request->counter()); - auto counter = counter_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateCIPeriodChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; + int32 voltage_excit_source; + switch (request->voltage_excit_source_enum_case()) { + case nidaqmx_grpc::CreateAIPressureBridgeTableChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { + voltage_excit_source = static_cast(request->voltage_excit_source()); + break; + } + case nidaqmx_grpc::CreateAIPressureBridgeTableChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { + voltage_excit_source = static_cast(request->voltage_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateAIPressureBridgeTableChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateCIPeriodChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; + + float64 voltage_excit_val = request->voltage_excit_val(); + float64 nominal_bridge_resistance = request->nominal_bridge_resistance(); + auto electrical_vals = const_cast(request->electrical_vals().data()); + uInt32 num_electrical_vals = static_cast(request->electrical_vals().size()); + int32 electrical_units; + switch (request->electrical_units_enum_case()) { + case nidaqmx_grpc::CreateAIPressureBridgeTableChanRequest::ElectricalUnitsEnumCase::kElectricalUnits: { + electrical_units = static_cast(request->electrical_units()); + break; + } + case nidaqmx_grpc::CreateAIPressureBridgeTableChanRequest::ElectricalUnitsEnumCase::kElectricalUnitsRaw: { + electrical_units = static_cast(request->electrical_units_raw()); + break; + } + case nidaqmx_grpc::CreateAIPressureBridgeTableChanRequest::ElectricalUnitsEnumCase::ELECTRICAL_UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for electrical_units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateCIPeriodChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + + auto physical_vals = const_cast(request->physical_vals().data()); + uInt32 num_physical_vals = static_cast(request->physical_vals().size()); + int32 physical_units; + switch (request->physical_units_enum_case()) { + case nidaqmx_grpc::CreateAIPressureBridgeTableChanRequest::PhysicalUnitsEnumCase::kPhysicalUnits: { + physical_units = static_cast(request->physical_units()); + break; + } + case nidaqmx_grpc::CreateAIPressureBridgeTableChanRequest::PhysicalUnitsEnumCase::kPhysicalUnitsRaw: { + physical_units = static_cast(request->physical_units_raw()); + break; + } + case nidaqmx_grpc::CreateAIPressureBridgeTableChanRequest::PhysicalUnitsEnumCase::PHYSICAL_UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for physical_units was not specified or out of range"); + break; + } } - } - int32 edge; - switch (request->edge_enum_case()) { - case nidaqmx_grpc::CreateCIPeriodChanRequest::EdgeEnumCase::kEdge: { - edge = static_cast(request->edge()); - break; + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateAIPressureBridgeTableChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, bridge_config, voltage_excit_source, voltage_excit_val, nominal_bridge_resistance, electrical_vals, num_electrical_vals, electrical_units, physical_vals, num_physical_vals, physical_units, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - case nidaqmx_grpc::CreateCIPeriodChanRequest::EdgeEnumCase::kEdgeRaw: { - edge = static_cast(request->edge_raw()); - break; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAIPressureBridgeTwoPointLinChan(::grpc::ServerContext* context, const CreateAIPressureBridgeTwoPointLinChanRequest* request, CreateAIPressureBridgeTwoPointLinChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAIPressureBridgeTwoPointLinChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAIPressureBridgeTwoPointLinChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAIPressureBridgeTwoPointLinChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateCIPeriodChanRequest::EdgeEnumCase::EDGE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for edge was not specified or out of range"); - break; + + int32 bridge_config; + switch (request->bridge_config_enum_case()) { + case nidaqmx_grpc::CreateAIPressureBridgeTwoPointLinChanRequest::BridgeConfigEnumCase::kBridgeConfig: { + bridge_config = static_cast(request->bridge_config()); + break; + } + case nidaqmx_grpc::CreateAIPressureBridgeTwoPointLinChanRequest::BridgeConfigEnumCase::kBridgeConfigRaw: { + bridge_config = static_cast(request->bridge_config_raw()); + break; + } + case nidaqmx_grpc::CreateAIPressureBridgeTwoPointLinChanRequest::BridgeConfigEnumCase::BRIDGE_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for bridge_config was not specified or out of range"); + break; + } } - } - int32 meas_method; - switch (request->meas_method_enum_case()) { - case nidaqmx_grpc::CreateCIPeriodChanRequest::MeasMethodEnumCase::kMeasMethod: { - meas_method = static_cast(request->meas_method()); - break; + int32 voltage_excit_source; + switch (request->voltage_excit_source_enum_case()) { + case nidaqmx_grpc::CreateAIPressureBridgeTwoPointLinChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { + voltage_excit_source = static_cast(request->voltage_excit_source()); + break; + } + case nidaqmx_grpc::CreateAIPressureBridgeTwoPointLinChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { + voltage_excit_source = static_cast(request->voltage_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateAIPressureBridgeTwoPointLinChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateCIPeriodChanRequest::MeasMethodEnumCase::kMeasMethodRaw: { - meas_method = static_cast(request->meas_method_raw()); - break; + + float64 voltage_excit_val = request->voltage_excit_val(); + float64 nominal_bridge_resistance = request->nominal_bridge_resistance(); + float64 first_electrical_val = request->first_electrical_val(); + float64 second_electrical_val = request->second_electrical_val(); + int32 electrical_units; + switch (request->electrical_units_enum_case()) { + case nidaqmx_grpc::CreateAIPressureBridgeTwoPointLinChanRequest::ElectricalUnitsEnumCase::kElectricalUnits: { + electrical_units = static_cast(request->electrical_units()); + break; + } + case nidaqmx_grpc::CreateAIPressureBridgeTwoPointLinChanRequest::ElectricalUnitsEnumCase::kElectricalUnitsRaw: { + electrical_units = static_cast(request->electrical_units_raw()); + break; + } + case nidaqmx_grpc::CreateAIPressureBridgeTwoPointLinChanRequest::ElectricalUnitsEnumCase::ELECTRICAL_UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for electrical_units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateCIPeriodChanRequest::MeasMethodEnumCase::MEAS_METHOD_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for meas_method was not specified or out of range"); - break; + + float64 first_physical_val = request->first_physical_val(); + float64 second_physical_val = request->second_physical_val(); + int32 physical_units; + switch (request->physical_units_enum_case()) { + case nidaqmx_grpc::CreateAIPressureBridgeTwoPointLinChanRequest::PhysicalUnitsEnumCase::kPhysicalUnits: { + physical_units = static_cast(request->physical_units()); + break; + } + case nidaqmx_grpc::CreateAIPressureBridgeTwoPointLinChanRequest::PhysicalUnitsEnumCase::kPhysicalUnitsRaw: { + physical_units = static_cast(request->physical_units_raw()); + break; + } + case nidaqmx_grpc::CreateAIPressureBridgeTwoPointLinChanRequest::PhysicalUnitsEnumCase::PHYSICAL_UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for physical_units was not specified or out of range"); + break; + } } - } - float64 meas_time = request->meas_time(); - uInt32 divisor = request->divisor(); - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateCIPeriodChan(task, counter, name_to_assign_to_channel, min_val, max_val, units, edge, meas_method, meas_time, divisor, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateAIPressureBridgeTwoPointLinChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, bridge_config, voltage_excit_source, voltage_excit_val, nominal_bridge_resistance, first_electrical_val, second_electrical_val, electrical_units, first_physical_val, second_physical_val, physical_units, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateCIPulseChanFreq(::grpc::ServerContext* context, const CreateCIPulseChanFreqRequest* request, CreateCIPulseChanFreqResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto counter_mbcs = convert_from_grpc(request->counter()); - auto counter = counter_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateCIPulseChanFreqRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateCIPulseChanFreqRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateCIPulseChanFreqRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; - } - } - - auto status = library_->CreateCIPulseChanFreq(task, counter, name_to_assign_to_channel, min_val, max_val, units); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateCIPulseChanTicks(::grpc::ServerContext* context, const CreateCIPulseChanTicksRequest* request, CreateCIPulseChanTicksResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto counter_mbcs = convert_from_grpc(request->counter()); - auto counter = counter_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - auto source_terminal_mbcs = convert_from_grpc(request->source_terminal()); - auto source_terminal = source_terminal_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - auto status = library_->CreateCIPulseChanTicks(task, counter, name_to_assign_to_channel, source_terminal, min_val, max_val); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAIRTDChan(::grpc::ServerContext* context, const CreateAIRTDChanRequest* request, CreateAIRTDChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAIRTDChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAIRTDChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAIRTDChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateCIPulseChanTime(::grpc::ServerContext* context, const CreateCIPulseChanTimeRequest* request, CreateCIPulseChanTimeResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto counter_mbcs = convert_from_grpc(request->counter()); - auto counter = counter_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateCIPulseChanTimeRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateCIPulseChanTimeRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateCIPulseChanTimeRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; - } - } - - auto status = library_->CreateCIPulseChanTime(task, counter, name_to_assign_to_channel, min_val, max_val, units); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + int32 rtd_type; + switch (request->rtd_type_enum_case()) { + case nidaqmx_grpc::CreateAIRTDChanRequest::RtdTypeEnumCase::kRtdType: { + rtd_type = static_cast(request->rtd_type()); + break; + } + case nidaqmx_grpc::CreateAIRTDChanRequest::RtdTypeEnumCase::kRtdTypeRaw: { + rtd_type = static_cast(request->rtd_type_raw()); + break; + } + case nidaqmx_grpc::CreateAIRTDChanRequest::RtdTypeEnumCase::RTD_TYPE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for rtd_type was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateCIPulseWidthChan(::grpc::ServerContext* context, const CreateCIPulseWidthChanRequest* request, CreateCIPulseWidthChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto counter_mbcs = convert_from_grpc(request->counter()); - auto counter = counter_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateCIPulseWidthChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; + int32 resistance_config; + switch (request->resistance_config_enum_case()) { + case nidaqmx_grpc::CreateAIRTDChanRequest::ResistanceConfigEnumCase::kResistanceConfig: { + resistance_config = static_cast(request->resistance_config()); + break; + } + case nidaqmx_grpc::CreateAIRTDChanRequest::ResistanceConfigEnumCase::kResistanceConfigRaw: { + resistance_config = static_cast(request->resistance_config_raw()); + break; + } + case nidaqmx_grpc::CreateAIRTDChanRequest::ResistanceConfigEnumCase::RESISTANCE_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for resistance_config was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateCIPulseWidthChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; + + int32 current_excit_source; + switch (request->current_excit_source_enum_case()) { + case nidaqmx_grpc::CreateAIRTDChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSource: { + current_excit_source = static_cast(request->current_excit_source()); + break; + } + case nidaqmx_grpc::CreateAIRTDChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSourceRaw: { + current_excit_source = static_cast(request->current_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateAIRTDChanRequest::CurrentExcitSourceEnumCase::CURRENT_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for current_excit_source was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateCIPulseWidthChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + + float64 current_excit_val = request->current_excit_val(); + float64 r0 = request->r0(); + auto status = library_->CreateAIRTDChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, rtd_type, resistance_config, current_excit_source, current_excit_val, r0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - int32 starting_edge; - switch (request->starting_edge_enum_case()) { - case nidaqmx_grpc::CreateCIPulseWidthChanRequest::StartingEdgeEnumCase::kStartingEdge: { - starting_edge = static_cast(request->starting_edge()); - break; + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAIResistanceChan(::grpc::ServerContext* context, const CreateAIResistanceChanRequest* request, CreateAIResistanceChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAIResistanceChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAIResistanceChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAIResistanceChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateCIPulseWidthChanRequest::StartingEdgeEnumCase::kStartingEdgeRaw: { - starting_edge = static_cast(request->starting_edge_raw()); - break; + + int32 resistance_config; + switch (request->resistance_config_enum_case()) { + case nidaqmx_grpc::CreateAIResistanceChanRequest::ResistanceConfigEnumCase::kResistanceConfig: { + resistance_config = static_cast(request->resistance_config()); + break; + } + case nidaqmx_grpc::CreateAIResistanceChanRequest::ResistanceConfigEnumCase::kResistanceConfigRaw: { + resistance_config = static_cast(request->resistance_config_raw()); + break; + } + case nidaqmx_grpc::CreateAIResistanceChanRequest::ResistanceConfigEnumCase::RESISTANCE_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for resistance_config was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateCIPulseWidthChanRequest::StartingEdgeEnumCase::STARTING_EDGE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for starting_edge was not specified or out of range"); - break; + + int32 current_excit_source; + switch (request->current_excit_source_enum_case()) { + case nidaqmx_grpc::CreateAIResistanceChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSource: { + current_excit_source = static_cast(request->current_excit_source()); + break; + } + case nidaqmx_grpc::CreateAIResistanceChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSourceRaw: { + current_excit_source = static_cast(request->current_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateAIResistanceChanRequest::CurrentExcitSourceEnumCase::CURRENT_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for current_excit_source was not specified or out of range"); + break; + } } - } - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateCIPulseWidthChan(task, counter, name_to_assign_to_channel, min_val, max_val, units, starting_edge, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + float64 current_excit_val = request->current_excit_val(); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateAIResistanceChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, resistance_config, current_excit_source, current_excit_val, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateCISemiPeriodChan(::grpc::ServerContext* context, const CreateCISemiPeriodChanRequest* request, CreateCISemiPeriodChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto counter_mbcs = convert_from_grpc(request->counter()); - auto counter = counter_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateCISemiPeriodChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateCISemiPeriodChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateCISemiPeriodChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; - } - } - - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateCISemiPeriodChan(task, counter, name_to_assign_to_channel, min_val, max_val, units, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAIRosetteStrainGageChan(::grpc::ServerContext* context, const CreateAIRosetteStrainGageChanRequest* request, CreateAIRosetteStrainGageChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 rosette_type; + switch (request->rosette_type_enum_case()) { + case nidaqmx_grpc::CreateAIRosetteStrainGageChanRequest::RosetteTypeEnumCase::kRosetteType: { + rosette_type = static_cast(request->rosette_type()); + break; + } + case nidaqmx_grpc::CreateAIRosetteStrainGageChanRequest::RosetteTypeEnumCase::kRosetteTypeRaw: { + rosette_type = static_cast(request->rosette_type_raw()); + break; + } + case nidaqmx_grpc::CreateAIRosetteStrainGageChanRequest::RosetteTypeEnumCase::ROSETTE_TYPE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for rosette_type was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateCITwoEdgeSepChan(::grpc::ServerContext* context, const CreateCITwoEdgeSepChanRequest* request, CreateCITwoEdgeSepChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto counter_mbcs = convert_from_grpc(request->counter()); - auto counter = counter_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateCITwoEdgeSepChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; + float64 gage_orientation = request->gage_orientation(); + auto rosette_meas_types_vector = std::vector(); + rosette_meas_types_vector.reserve(request->rosette_meas_types().size()); + std::transform( + request->rosette_meas_types().begin(), + request->rosette_meas_types().end(), + std::back_inserter(rosette_meas_types_vector), + [](auto x) { return x; }); + auto rosette_meas_types = rosette_meas_types_vector.data(); + + uInt32 num_rosette_meas_types = static_cast(request->rosette_meas_types().size()); + int32 strain_config; + switch (request->strain_config_enum_case()) { + case nidaqmx_grpc::CreateAIRosetteStrainGageChanRequest::StrainConfigEnumCase::kStrainConfig: { + strain_config = static_cast(request->strain_config()); + break; + } + case nidaqmx_grpc::CreateAIRosetteStrainGageChanRequest::StrainConfigEnumCase::kStrainConfigRaw: { + strain_config = static_cast(request->strain_config_raw()); + break; + } + case nidaqmx_grpc::CreateAIRosetteStrainGageChanRequest::StrainConfigEnumCase::STRAIN_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for strain_config was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateCITwoEdgeSepChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; + + int32 voltage_excit_source; + switch (request->voltage_excit_source_enum_case()) { + case nidaqmx_grpc::CreateAIRosetteStrainGageChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { + voltage_excit_source = static_cast(request->voltage_excit_source()); + break; + } + case nidaqmx_grpc::CreateAIRosetteStrainGageChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { + voltage_excit_source = static_cast(request->voltage_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateAIRosetteStrainGageChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateCITwoEdgeSepChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + + float64 voltage_excit_val = request->voltage_excit_val(); + float64 gage_factor = request->gage_factor(); + float64 nominal_gage_resistance = request->nominal_gage_resistance(); + float64 poisson_ratio = request->poisson_ratio(); + float64 lead_wire_resistance = request->lead_wire_resistance(); + auto status = library_->CreateAIRosetteStrainGageChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, rosette_type, gage_orientation, rosette_meas_types, num_rosette_meas_types, strain_config, voltage_excit_source, voltage_excit_val, gage_factor, nominal_gage_resistance, poisson_ratio, lead_wire_resistance); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAIStrainGageChan(::grpc::ServerContext* context, const CreateAIStrainGageChanRequest* request, CreateAIStrainGageChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAIStrainGageChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAIStrainGageChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAIStrainGageChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } + } - int32 first_edge; - switch (request->first_edge_enum_case()) { - case nidaqmx_grpc::CreateCITwoEdgeSepChanRequest::FirstEdgeEnumCase::kFirstEdge: { - first_edge = static_cast(request->first_edge()); - break; + int32 strain_config; + switch (request->strain_config_enum_case()) { + case nidaqmx_grpc::CreateAIStrainGageChanRequest::StrainConfigEnumCase::kStrainConfig: { + strain_config = static_cast(request->strain_config()); + break; + } + case nidaqmx_grpc::CreateAIStrainGageChanRequest::StrainConfigEnumCase::kStrainConfigRaw: { + strain_config = static_cast(request->strain_config_raw()); + break; + } + case nidaqmx_grpc::CreateAIStrainGageChanRequest::StrainConfigEnumCase::STRAIN_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for strain_config was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateCITwoEdgeSepChanRequest::FirstEdgeEnumCase::kFirstEdgeRaw: { - first_edge = static_cast(request->first_edge_raw()); - break; + + int32 voltage_excit_source; + switch (request->voltage_excit_source_enum_case()) { + case nidaqmx_grpc::CreateAIStrainGageChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { + voltage_excit_source = static_cast(request->voltage_excit_source()); + break; + } + case nidaqmx_grpc::CreateAIStrainGageChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { + voltage_excit_source = static_cast(request->voltage_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateAIStrainGageChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateCITwoEdgeSepChanRequest::FirstEdgeEnumCase::FIRST_EDGE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for first_edge was not specified or out of range"); - break; + + float64 voltage_excit_val = request->voltage_excit_val(); + float64 gage_factor = request->gage_factor(); + float64 initial_bridge_voltage = request->initial_bridge_voltage(); + float64 nominal_gage_resistance = request->nominal_gage_resistance(); + float64 poisson_ratio = request->poisson_ratio(); + float64 lead_wire_resistance = request->lead_wire_resistance(); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateAIStrainGageChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, strain_config, voltage_excit_source, voltage_excit_val, gage_factor, initial_bridge_voltage, nominal_gage_resistance, poisson_ratio, lead_wire_resistance, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAITempBuiltInSensorChan(::grpc::ServerContext* context, const CreateAITempBuiltInSensorChanRequest* request, CreateAITempBuiltInSensorChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAITempBuiltInSensorChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAITempBuiltInSensorChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAITempBuiltInSensorChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } + } - int32 second_edge; - switch (request->second_edge_enum_case()) { - case nidaqmx_grpc::CreateCITwoEdgeSepChanRequest::SecondEdgeEnumCase::kSecondEdge: { - second_edge = static_cast(request->second_edge()); - break; + auto status = library_->CreateAITempBuiltInSensorChan(task, physical_channel, name_to_assign_to_channel, units); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - case nidaqmx_grpc::CreateCITwoEdgeSepChanRequest::SecondEdgeEnumCase::kSecondEdgeRaw: { - second_edge = static_cast(request->second_edge_raw()); - break; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAIThrmcplChan(::grpc::ServerContext* context, const CreateAIThrmcplChanRequest* request, CreateAIThrmcplChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAIThrmcplChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAIThrmcplChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAIThrmcplChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateCITwoEdgeSepChanRequest::SecondEdgeEnumCase::SECOND_EDGE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for second_edge was not specified or out of range"); - break; + + int32 thermocouple_type; + switch (request->thermocouple_type_enum_case()) { + case nidaqmx_grpc::CreateAIThrmcplChanRequest::ThermocoupleTypeEnumCase::kThermocoupleType: { + thermocouple_type = static_cast(request->thermocouple_type()); + break; + } + case nidaqmx_grpc::CreateAIThrmcplChanRequest::ThermocoupleTypeEnumCase::kThermocoupleTypeRaw: { + thermocouple_type = static_cast(request->thermocouple_type_raw()); + break; + } + case nidaqmx_grpc::CreateAIThrmcplChanRequest::ThermocoupleTypeEnumCase::THERMOCOUPLE_TYPE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for thermocouple_type was not specified or out of range"); + break; + } } - } - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateCITwoEdgeSepChan(task, counter, name_to_assign_to_channel, min_val, max_val, units, first_edge, second_edge, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateCOPulseChanFreq(::grpc::ServerContext* context, const CreateCOPulseChanFreqRequest* request, CreateCOPulseChanFreqResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto counter_mbcs = convert_from_grpc(request->counter()); - auto counter = counter_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateCOPulseChanFreqRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateCOPulseChanFreqRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; + int32 cjc_source; + switch (request->cjc_source_enum_case()) { + case nidaqmx_grpc::CreateAIThrmcplChanRequest::CjcSourceEnumCase::kCjcSource: { + cjc_source = static_cast(request->cjc_source()); + break; + } + case nidaqmx_grpc::CreateAIThrmcplChanRequest::CjcSourceEnumCase::kCjcSourceRaw: { + cjc_source = static_cast(request->cjc_source_raw()); + break; + } + case nidaqmx_grpc::CreateAIThrmcplChanRequest::CjcSourceEnumCase::CJC_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for cjc_source was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateCOPulseChanFreqRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + + float64 cjc_val = request->cjc_val(); + auto cjc_channel_mbcs = convert_from_grpc(request->cjc_channel()); + auto cjc_channel = cjc_channel_mbcs.c_str(); + auto status = library_->CreateAIThrmcplChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, thermocouple_type, cjc_source, cjc_val, cjc_channel); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAIThrmstrChanIex(::grpc::ServerContext* context, const CreateAIThrmstrChanIexRequest* request, CreateAIThrmstrChanIexResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAIThrmstrChanIexRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAIThrmstrChanIexRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAIThrmstrChanIexRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } + } - int32 idle_state; - switch (request->idle_state_enum_case()) { - case nidaqmx_grpc::CreateCOPulseChanFreqRequest::IdleStateEnumCase::kIdleState: { - idle_state = static_cast(request->idle_state()); - break; + int32 resistance_config; + switch (request->resistance_config_enum_case()) { + case nidaqmx_grpc::CreateAIThrmstrChanIexRequest::ResistanceConfigEnumCase::kResistanceConfig: { + resistance_config = static_cast(request->resistance_config()); + break; + } + case nidaqmx_grpc::CreateAIThrmstrChanIexRequest::ResistanceConfigEnumCase::kResistanceConfigRaw: { + resistance_config = static_cast(request->resistance_config_raw()); + break; + } + case nidaqmx_grpc::CreateAIThrmstrChanIexRequest::ResistanceConfigEnumCase::RESISTANCE_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for resistance_config was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateCOPulseChanFreqRequest::IdleStateEnumCase::kIdleStateRaw: { - idle_state = static_cast(request->idle_state_raw()); - break; + + int32 current_excit_source; + switch (request->current_excit_source_enum_case()) { + case nidaqmx_grpc::CreateAIThrmstrChanIexRequest::CurrentExcitSourceEnumCase::kCurrentExcitSource: { + current_excit_source = static_cast(request->current_excit_source()); + break; + } + case nidaqmx_grpc::CreateAIThrmstrChanIexRequest::CurrentExcitSourceEnumCase::kCurrentExcitSourceRaw: { + current_excit_source = static_cast(request->current_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateAIThrmstrChanIexRequest::CurrentExcitSourceEnumCase::CURRENT_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for current_excit_source was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateCOPulseChanFreqRequest::IdleStateEnumCase::IDLE_STATE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for idle_state was not specified or out of range"); - break; + + float64 current_excit_val = request->current_excit_val(); + float64 a = request->a(); + float64 b = request->b(); + float64 c = request->c(); + auto status = library_->CreateAIThrmstrChanIex(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, resistance_config, current_excit_source, current_excit_val, a, b, c); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAIThrmstrChanVex(::grpc::ServerContext* context, const CreateAIThrmstrChanVexRequest* request, CreateAIThrmstrChanVexResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAIThrmstrChanVexRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAIThrmstrChanVexRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAIThrmstrChanVexRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } + } - float64 initial_delay = request->initial_delay(); - float64 freq = request->freq(); - float64 duty_cycle = request->duty_cycle(); - auto status = library_->CreateCOPulseChanFreq(task, counter, name_to_assign_to_channel, units, idle_state, initial_delay, freq, duty_cycle); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + int32 resistance_config; + switch (request->resistance_config_enum_case()) { + case nidaqmx_grpc::CreateAIThrmstrChanVexRequest::ResistanceConfigEnumCase::kResistanceConfig: { + resistance_config = static_cast(request->resistance_config()); + break; + } + case nidaqmx_grpc::CreateAIThrmstrChanVexRequest::ResistanceConfigEnumCase::kResistanceConfigRaw: { + resistance_config = static_cast(request->resistance_config_raw()); + break; + } + case nidaqmx_grpc::CreateAIThrmstrChanVexRequest::ResistanceConfigEnumCase::RESISTANCE_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for resistance_config was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateCOPulseChanTicks(::grpc::ServerContext* context, const CreateCOPulseChanTicksRequest* request, CreateCOPulseChanTicksResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto counter_mbcs = convert_from_grpc(request->counter()); - auto counter = counter_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - auto source_terminal_mbcs = convert_from_grpc(request->source_terminal()); - auto source_terminal = source_terminal_mbcs.c_str(); - int32 idle_state; - switch (request->idle_state_enum_case()) { - case nidaqmx_grpc::CreateCOPulseChanTicksRequest::IdleStateEnumCase::kIdleState: { - idle_state = static_cast(request->idle_state()); - break; - } - case nidaqmx_grpc::CreateCOPulseChanTicksRequest::IdleStateEnumCase::kIdleStateRaw: { - idle_state = static_cast(request->idle_state_raw()); - break; - } - case nidaqmx_grpc::CreateCOPulseChanTicksRequest::IdleStateEnumCase::IDLE_STATE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for idle_state was not specified or out of range"); - break; - } - } - - int32 initial_delay = request->initial_delay(); - int32 low_ticks = request->low_ticks(); - int32 high_ticks = request->high_ticks(); - auto status = library_->CreateCOPulseChanTicks(task, counter, name_to_assign_to_channel, source_terminal, idle_state, initial_delay, low_ticks, high_ticks); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + int32 voltage_excit_source; + switch (request->voltage_excit_source_enum_case()) { + case nidaqmx_grpc::CreateAIThrmstrChanVexRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { + voltage_excit_source = static_cast(request->voltage_excit_source()); + break; + } + case nidaqmx_grpc::CreateAIThrmstrChanVexRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { + voltage_excit_source = static_cast(request->voltage_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateAIThrmstrChanVexRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateCOPulseChanTime(::grpc::ServerContext* context, const CreateCOPulseChanTimeRequest* request, CreateCOPulseChanTimeResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto counter_mbcs = convert_from_grpc(request->counter()); - auto counter = counter_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateCOPulseChanTimeRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; + float64 voltage_excit_val = request->voltage_excit_val(); + float64 a = request->a(); + float64 b = request->b(); + float64 c = request->c(); + float64 r1 = request->r1(); + auto status = library_->CreateAIThrmstrChanVex(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, resistance_config, voltage_excit_source, voltage_excit_val, a, b, c, r1); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - case nidaqmx_grpc::CreateCOPulseChanTimeRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAITorqueBridgePolynomialChan(::grpc::ServerContext* context, const CreateAITorqueBridgePolynomialChanRequest* request, CreateAITorqueBridgePolynomialChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAITorqueBridgePolynomialChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAITorqueBridgePolynomialChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAITorqueBridgePolynomialChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateCOPulseChanTimeRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + + int32 bridge_config; + switch (request->bridge_config_enum_case()) { + case nidaqmx_grpc::CreateAITorqueBridgePolynomialChanRequest::BridgeConfigEnumCase::kBridgeConfig: { + bridge_config = static_cast(request->bridge_config()); + break; + } + case nidaqmx_grpc::CreateAITorqueBridgePolynomialChanRequest::BridgeConfigEnumCase::kBridgeConfigRaw: { + bridge_config = static_cast(request->bridge_config_raw()); + break; + } + case nidaqmx_grpc::CreateAITorqueBridgePolynomialChanRequest::BridgeConfigEnumCase::BRIDGE_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for bridge_config was not specified or out of range"); + break; + } } - } - int32 idle_state; - switch (request->idle_state_enum_case()) { - case nidaqmx_grpc::CreateCOPulseChanTimeRequest::IdleStateEnumCase::kIdleState: { - idle_state = static_cast(request->idle_state()); - break; + int32 voltage_excit_source; + switch (request->voltage_excit_source_enum_case()) { + case nidaqmx_grpc::CreateAITorqueBridgePolynomialChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { + voltage_excit_source = static_cast(request->voltage_excit_source()); + break; + } + case nidaqmx_grpc::CreateAITorqueBridgePolynomialChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { + voltage_excit_source = static_cast(request->voltage_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateAITorqueBridgePolynomialChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateCOPulseChanTimeRequest::IdleStateEnumCase::kIdleStateRaw: { - idle_state = static_cast(request->idle_state_raw()); - break; + + float64 voltage_excit_val = request->voltage_excit_val(); + float64 nominal_bridge_resistance = request->nominal_bridge_resistance(); + auto forward_coeffs = const_cast(request->forward_coeffs().data()); + uInt32 num_forward_coeffs = static_cast(request->forward_coeffs().size()); + auto reverse_coeffs = const_cast(request->reverse_coeffs().data()); + uInt32 num_reverse_coeffs = static_cast(request->reverse_coeffs().size()); + int32 electrical_units; + switch (request->electrical_units_enum_case()) { + case nidaqmx_grpc::CreateAITorqueBridgePolynomialChanRequest::ElectricalUnitsEnumCase::kElectricalUnits: { + electrical_units = static_cast(request->electrical_units()); + break; + } + case nidaqmx_grpc::CreateAITorqueBridgePolynomialChanRequest::ElectricalUnitsEnumCase::kElectricalUnitsRaw: { + electrical_units = static_cast(request->electrical_units_raw()); + break; + } + case nidaqmx_grpc::CreateAITorqueBridgePolynomialChanRequest::ElectricalUnitsEnumCase::ELECTRICAL_UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for electrical_units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateCOPulseChanTimeRequest::IdleStateEnumCase::IDLE_STATE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for idle_state was not specified or out of range"); - break; + + int32 physical_units; + switch (request->physical_units_enum_case()) { + case nidaqmx_grpc::CreateAITorqueBridgePolynomialChanRequest::PhysicalUnitsEnumCase::kPhysicalUnits: { + physical_units = static_cast(request->physical_units()); + break; + } + case nidaqmx_grpc::CreateAITorqueBridgePolynomialChanRequest::PhysicalUnitsEnumCase::kPhysicalUnitsRaw: { + physical_units = static_cast(request->physical_units_raw()); + break; + } + case nidaqmx_grpc::CreateAITorqueBridgePolynomialChanRequest::PhysicalUnitsEnumCase::PHYSICAL_UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for physical_units was not specified or out of range"); + break; + } } - } - float64 initial_delay = request->initial_delay(); - float64 low_time = request->low_time(); - float64 high_time = request->high_time(); - auto status = library_->CreateCOPulseChanTime(task, counter, name_to_assign_to_channel, units, idle_state, initial_delay, low_time, high_time); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateAITorqueBridgePolynomialChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, bridge_config, voltage_excit_source, voltage_excit_val, nominal_bridge_resistance, forward_coeffs, num_forward_coeffs, reverse_coeffs, num_reverse_coeffs, electrical_units, physical_units, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAITorqueBridgeTableChan(::grpc::ServerContext* context, const CreateAITorqueBridgeTableChanRequest* request, CreateAITorqueBridgeTableChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAITorqueBridgeTableChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAITorqueBridgeTableChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAITorqueBridgeTableChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateDIChan(::grpc::ServerContext* context, const CreateDIChanRequest* request, CreateDIChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto lines_mbcs = convert_from_grpc(request->lines()); - auto lines = lines_mbcs.c_str(); - auto name_to_assign_to_lines_mbcs = convert_from_grpc(request->name_to_assign_to_lines()); - auto name_to_assign_to_lines = name_to_assign_to_lines_mbcs.c_str(); - int32 line_grouping; - switch (request->line_grouping_enum_case()) { - case nidaqmx_grpc::CreateDIChanRequest::LineGroupingEnumCase::kLineGrouping: { - line_grouping = static_cast(request->line_grouping()); - break; + int32 bridge_config; + switch (request->bridge_config_enum_case()) { + case nidaqmx_grpc::CreateAITorqueBridgeTableChanRequest::BridgeConfigEnumCase::kBridgeConfig: { + bridge_config = static_cast(request->bridge_config()); + break; + } + case nidaqmx_grpc::CreateAITorqueBridgeTableChanRequest::BridgeConfigEnumCase::kBridgeConfigRaw: { + bridge_config = static_cast(request->bridge_config_raw()); + break; + } + case nidaqmx_grpc::CreateAITorqueBridgeTableChanRequest::BridgeConfigEnumCase::BRIDGE_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for bridge_config was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateDIChanRequest::LineGroupingEnumCase::kLineGroupingRaw: { - line_grouping = static_cast(request->line_grouping_raw()); - break; + + int32 voltage_excit_source; + switch (request->voltage_excit_source_enum_case()) { + case nidaqmx_grpc::CreateAITorqueBridgeTableChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { + voltage_excit_source = static_cast(request->voltage_excit_source()); + break; + } + case nidaqmx_grpc::CreateAITorqueBridgeTableChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { + voltage_excit_source = static_cast(request->voltage_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateAITorqueBridgeTableChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateDIChanRequest::LineGroupingEnumCase::LINE_GROUPING_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for line_grouping was not specified or out of range"); - break; + + float64 voltage_excit_val = request->voltage_excit_val(); + float64 nominal_bridge_resistance = request->nominal_bridge_resistance(); + auto electrical_vals = const_cast(request->electrical_vals().data()); + uInt32 num_electrical_vals = static_cast(request->electrical_vals().size()); + int32 electrical_units; + switch (request->electrical_units_enum_case()) { + case nidaqmx_grpc::CreateAITorqueBridgeTableChanRequest::ElectricalUnitsEnumCase::kElectricalUnits: { + electrical_units = static_cast(request->electrical_units()); + break; + } + case nidaqmx_grpc::CreateAITorqueBridgeTableChanRequest::ElectricalUnitsEnumCase::kElectricalUnitsRaw: { + electrical_units = static_cast(request->electrical_units_raw()); + break; + } + case nidaqmx_grpc::CreateAITorqueBridgeTableChanRequest::ElectricalUnitsEnumCase::ELECTRICAL_UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for electrical_units was not specified or out of range"); + break; + } } - } - auto status = library_->CreateDIChan(task, lines, name_to_assign_to_lines, line_grouping); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + auto physical_vals = const_cast(request->physical_vals().data()); + uInt32 num_physical_vals = static_cast(request->physical_vals().size()); + int32 physical_units; + switch (request->physical_units_enum_case()) { + case nidaqmx_grpc::CreateAITorqueBridgeTableChanRequest::PhysicalUnitsEnumCase::kPhysicalUnits: { + physical_units = static_cast(request->physical_units()); + break; + } + case nidaqmx_grpc::CreateAITorqueBridgeTableChanRequest::PhysicalUnitsEnumCase::kPhysicalUnitsRaw: { + physical_units = static_cast(request->physical_units_raw()); + break; + } + case nidaqmx_grpc::CreateAITorqueBridgeTableChanRequest::PhysicalUnitsEnumCase::PHYSICAL_UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for physical_units was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateDOChan(::grpc::ServerContext* context, const CreateDOChanRequest* request, CreateDOChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto lines_mbcs = convert_from_grpc(request->lines()); - auto lines = lines_mbcs.c_str(); - auto name_to_assign_to_lines_mbcs = convert_from_grpc(request->name_to_assign_to_lines()); - auto name_to_assign_to_lines = name_to_assign_to_lines_mbcs.c_str(); - int32 line_grouping; - switch (request->line_grouping_enum_case()) { - case nidaqmx_grpc::CreateDOChanRequest::LineGroupingEnumCase::kLineGrouping: { - line_grouping = static_cast(request->line_grouping()); - break; + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateAITorqueBridgeTableChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, bridge_config, voltage_excit_source, voltage_excit_val, nominal_bridge_resistance, electrical_vals, num_electrical_vals, electrical_units, physical_vals, num_physical_vals, physical_units, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - case nidaqmx_grpc::CreateDOChanRequest::LineGroupingEnumCase::kLineGroupingRaw: { - line_grouping = static_cast(request->line_grouping_raw()); - break; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAITorqueBridgeTwoPointLinChan(::grpc::ServerContext* context, const CreateAITorqueBridgeTwoPointLinChanRequest* request, CreateAITorqueBridgeTwoPointLinChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAITorqueBridgeTwoPointLinChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAITorqueBridgeTwoPointLinChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAITorqueBridgeTwoPointLinChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateDOChanRequest::LineGroupingEnumCase::LINE_GROUPING_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for line_grouping was not specified or out of range"); - break; + + int32 bridge_config; + switch (request->bridge_config_enum_case()) { + case nidaqmx_grpc::CreateAITorqueBridgeTwoPointLinChanRequest::BridgeConfigEnumCase::kBridgeConfig: { + bridge_config = static_cast(request->bridge_config()); + break; + } + case nidaqmx_grpc::CreateAITorqueBridgeTwoPointLinChanRequest::BridgeConfigEnumCase::kBridgeConfigRaw: { + bridge_config = static_cast(request->bridge_config_raw()); + break; + } + case nidaqmx_grpc::CreateAITorqueBridgeTwoPointLinChanRequest::BridgeConfigEnumCase::BRIDGE_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for bridge_config was not specified or out of range"); + break; + } } - } - auto status = library_->CreateDOChan(task, lines, name_to_assign_to_lines, line_grouping); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + int32 voltage_excit_source; + switch (request->voltage_excit_source_enum_case()) { + case nidaqmx_grpc::CreateAITorqueBridgeTwoPointLinChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { + voltage_excit_source = static_cast(request->voltage_excit_source()); + break; + } + case nidaqmx_grpc::CreateAITorqueBridgeTwoPointLinChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { + voltage_excit_source = static_cast(request->voltage_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateAITorqueBridgeTwoPointLinChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateLinScale(::grpc::ServerContext* context, const CreateLinScaleRequest* request, CreateLinScaleResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto name_mbcs = convert_from_grpc(request->name()); - auto name = name_mbcs.c_str(); - float64 slope = request->slope(); - float64 y_intercept = request->y_intercept(); - int32 pre_scaled_units; - switch (request->pre_scaled_units_enum_case()) { - case nidaqmx_grpc::CreateLinScaleRequest::PreScaledUnitsEnumCase::kPreScaledUnits: { - pre_scaled_units = static_cast(request->pre_scaled_units()); - break; + float64 voltage_excit_val = request->voltage_excit_val(); + float64 nominal_bridge_resistance = request->nominal_bridge_resistance(); + float64 first_electrical_val = request->first_electrical_val(); + float64 second_electrical_val = request->second_electrical_val(); + int32 electrical_units; + switch (request->electrical_units_enum_case()) { + case nidaqmx_grpc::CreateAITorqueBridgeTwoPointLinChanRequest::ElectricalUnitsEnumCase::kElectricalUnits: { + electrical_units = static_cast(request->electrical_units()); + break; + } + case nidaqmx_grpc::CreateAITorqueBridgeTwoPointLinChanRequest::ElectricalUnitsEnumCase::kElectricalUnitsRaw: { + electrical_units = static_cast(request->electrical_units_raw()); + break; + } + case nidaqmx_grpc::CreateAITorqueBridgeTwoPointLinChanRequest::ElectricalUnitsEnumCase::ELECTRICAL_UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for electrical_units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateLinScaleRequest::PreScaledUnitsEnumCase::kPreScaledUnitsRaw: { - pre_scaled_units = static_cast(request->pre_scaled_units_raw()); - break; + + float64 first_physical_val = request->first_physical_val(); + float64 second_physical_val = request->second_physical_val(); + int32 physical_units; + switch (request->physical_units_enum_case()) { + case nidaqmx_grpc::CreateAITorqueBridgeTwoPointLinChanRequest::PhysicalUnitsEnumCase::kPhysicalUnits: { + physical_units = static_cast(request->physical_units()); + break; + } + case nidaqmx_grpc::CreateAITorqueBridgeTwoPointLinChanRequest::PhysicalUnitsEnumCase::kPhysicalUnitsRaw: { + physical_units = static_cast(request->physical_units_raw()); + break; + } + case nidaqmx_grpc::CreateAITorqueBridgeTwoPointLinChanRequest::PhysicalUnitsEnumCase::PHYSICAL_UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for physical_units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateLinScaleRequest::PreScaledUnitsEnumCase::PRE_SCALED_UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for pre_scaled_units was not specified or out of range"); - break; + + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateAITorqueBridgeTwoPointLinChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, bridge_config, voltage_excit_source, voltage_excit_val, nominal_bridge_resistance, first_electrical_val, second_electrical_val, electrical_units, first_physical_val, second_physical_val, physical_units, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAIVelocityIEPEChan(::grpc::ServerContext* context, const CreateAIVelocityIEPEChanRequest* request, CreateAIVelocityIEPEChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + int32 terminal_config; + switch (request->terminal_config_enum_case()) { + case nidaqmx_grpc::CreateAIVelocityIEPEChanRequest::TerminalConfigEnumCase::kTerminalConfig: { + terminal_config = static_cast(request->terminal_config()); + break; + } + case nidaqmx_grpc::CreateAIVelocityIEPEChanRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { + terminal_config = static_cast(request->terminal_config_raw()); + break; + } + case nidaqmx_grpc::CreateAIVelocityIEPEChanRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); + break; + } + } - auto scaled_units_mbcs = convert_from_grpc(request->scaled_units()); - auto scaled_units = scaled_units_mbcs.c_str(); - auto status = library_->CreateLinScale(name, slope, y_intercept, pre_scaled_units, scaled_units); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAIVelocityIEPEChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAIVelocityIEPEChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAIVelocityIEPEChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateMapScale(::grpc::ServerContext* context, const CreateMapScaleRequest* request, CreateMapScaleResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto name_mbcs = convert_from_grpc(request->name()); - auto name = name_mbcs.c_str(); - float64 prescaled_min = request->prescaled_min(); - float64 prescaled_max = request->prescaled_max(); - float64 scaled_min = request->scaled_min(); - float64 scaled_max = request->scaled_max(); - int32 pre_scaled_units; - switch (request->pre_scaled_units_enum_case()) { - case nidaqmx_grpc::CreateMapScaleRequest::PreScaledUnitsEnumCase::kPreScaledUnits: { - pre_scaled_units = static_cast(request->pre_scaled_units()); - break; - } - case nidaqmx_grpc::CreateMapScaleRequest::PreScaledUnitsEnumCase::kPreScaledUnitsRaw: { - pre_scaled_units = static_cast(request->pre_scaled_units_raw()); - break; - } - case nidaqmx_grpc::CreateMapScaleRequest::PreScaledUnitsEnumCase::PRE_SCALED_UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for pre_scaled_units was not specified or out of range"); - break; - } - } - - auto scaled_units_mbcs = convert_from_grpc(request->scaled_units()); - auto scaled_units = scaled_units_mbcs.c_str(); - auto status = library_->CreateMapScale(name, prescaled_min, prescaled_max, scaled_min, scaled_max, pre_scaled_units, scaled_units); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + float64 sensitivity = request->sensitivity(); + int32 sensitivity_units; + switch (request->sensitivity_units_enum_case()) { + case nidaqmx_grpc::CreateAIVelocityIEPEChanRequest::SensitivityUnitsEnumCase::kSensitivityUnits: { + sensitivity_units = static_cast(request->sensitivity_units()); + break; + } + case nidaqmx_grpc::CreateAIVelocityIEPEChanRequest::SensitivityUnitsEnumCase::kSensitivityUnitsRaw: { + sensitivity_units = static_cast(request->sensitivity_units_raw()); + break; + } + case nidaqmx_grpc::CreateAIVelocityIEPEChanRequest::SensitivityUnitsEnumCase::SENSITIVITY_UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sensitivity_units was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreatePolynomialScale(::grpc::ServerContext* context, const CreatePolynomialScaleRequest* request, CreatePolynomialScaleResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto name_mbcs = convert_from_grpc(request->name()); - auto name = name_mbcs.c_str(); - auto forward_coeffs = const_cast(request->forward_coeffs().data()); - uInt32 num_forward_coeffs_in = static_cast(request->forward_coeffs().size()); - auto reverse_coeffs = const_cast(request->reverse_coeffs().data()); - uInt32 num_reverse_coeffs_in = static_cast(request->reverse_coeffs().size()); - int32 pre_scaled_units; - switch (request->pre_scaled_units_enum_case()) { - case nidaqmx_grpc::CreatePolynomialScaleRequest::PreScaledUnitsEnumCase::kPreScaledUnits: { - pre_scaled_units = static_cast(request->pre_scaled_units()); - break; - } - case nidaqmx_grpc::CreatePolynomialScaleRequest::PreScaledUnitsEnumCase::kPreScaledUnitsRaw: { - pre_scaled_units = static_cast(request->pre_scaled_units_raw()); - break; - } - case nidaqmx_grpc::CreatePolynomialScaleRequest::PreScaledUnitsEnumCase::PRE_SCALED_UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for pre_scaled_units was not specified or out of range"); - break; - } - } - - auto scaled_units_mbcs = convert_from_grpc(request->scaled_units()); - auto scaled_units = scaled_units_mbcs.c_str(); - auto status = library_->CreatePolynomialScale(name, forward_coeffs, num_forward_coeffs_in, reverse_coeffs, num_reverse_coeffs_in, pre_scaled_units, scaled_units); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + int32 current_excit_source; + switch (request->current_excit_source_enum_case()) { + case nidaqmx_grpc::CreateAIVelocityIEPEChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSource: { + current_excit_source = static_cast(request->current_excit_source()); + break; + } + case nidaqmx_grpc::CreateAIVelocityIEPEChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSourceRaw: { + current_excit_source = static_cast(request->current_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateAIVelocityIEPEChanRequest::CurrentExcitSourceEnumCase::CURRENT_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for current_excit_source was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateTEDSAIAccelChan(::grpc::ServerContext* context, const CreateTEDSAIAccelChanRequest* request, CreateTEDSAIAccelChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - int32 terminal_config; - switch (request->terminal_config_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIAccelChanRequest::TerminalConfigEnumCase::kTerminalConfig: { - terminal_config = static_cast(request->terminal_config()); - break; + float64 current_excit_val = request->current_excit_val(); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateAIVelocityIEPEChan(task, physical_channel, name_to_assign_to_channel, terminal_config, min_val, max_val, units, sensitivity, sensitivity_units, current_excit_source, current_excit_val, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - case nidaqmx_grpc::CreateTEDSAIAccelChanRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { - terminal_config = static_cast(request->terminal_config_raw()); - break; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAIVoltageChan(::grpc::ServerContext* context, const CreateAIVoltageChanRequest* request, CreateAIVoltageChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + int32 terminal_config; + switch (request->terminal_config_enum_case()) { + case nidaqmx_grpc::CreateAIVoltageChanRequest::TerminalConfigEnumCase::kTerminalConfig: { + terminal_config = static_cast(request->terminal_config()); + break; + } + case nidaqmx_grpc::CreateAIVoltageChanRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { + terminal_config = static_cast(request->terminal_config_raw()); + break; + } + case nidaqmx_grpc::CreateAIVoltageChanRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateTEDSAIAccelChanRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); - break; + + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAIVoltageChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAIVoltageChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAIVoltageChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - } - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIAccelChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateAIVoltageChan(task, physical_channel, name_to_assign_to_channel, terminal_config, min_val, max_val, units, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - case nidaqmx_grpc::CreateTEDSAIAccelChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAIVoltageChanWithExcit(::grpc::ServerContext* context, const CreateAIVoltageChanWithExcitRequest* request, CreateAIVoltageChanWithExcitResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + int32 terminal_config; + switch (request->terminal_config_enum_case()) { + case nidaqmx_grpc::CreateAIVoltageChanWithExcitRequest::TerminalConfigEnumCase::kTerminalConfig: { + terminal_config = static_cast(request->terminal_config()); + break; + } + case nidaqmx_grpc::CreateAIVoltageChanWithExcitRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { + terminal_config = static_cast(request->terminal_config_raw()); + break; + } + case nidaqmx_grpc::CreateAIVoltageChanWithExcitRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateTEDSAIAccelChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAIVoltageChanWithExcitRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAIVoltageChanWithExcitRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAIVoltageChanWithExcitRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - } - int32 current_excit_source; - switch (request->current_excit_source_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIAccelChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSource: { - current_excit_source = static_cast(request->current_excit_source()); - break; + int32 bridge_config; + switch (request->bridge_config_enum_case()) { + case nidaqmx_grpc::CreateAIVoltageChanWithExcitRequest::BridgeConfigEnumCase::kBridgeConfig: { + bridge_config = static_cast(request->bridge_config()); + break; + } + case nidaqmx_grpc::CreateAIVoltageChanWithExcitRequest::BridgeConfigEnumCase::kBridgeConfigRaw: { + bridge_config = static_cast(request->bridge_config_raw()); + break; + } + case nidaqmx_grpc::CreateAIVoltageChanWithExcitRequest::BridgeConfigEnumCase::BRIDGE_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for bridge_config was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateTEDSAIAccelChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSourceRaw: { - current_excit_source = static_cast(request->current_excit_source_raw()); - break; + + int32 voltage_excit_source; + switch (request->voltage_excit_source_enum_case()) { + case nidaqmx_grpc::CreateAIVoltageChanWithExcitRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { + voltage_excit_source = static_cast(request->voltage_excit_source()); + break; + } + case nidaqmx_grpc::CreateAIVoltageChanWithExcitRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { + voltage_excit_source = static_cast(request->voltage_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateAIVoltageChanWithExcitRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateTEDSAIAccelChanRequest::CurrentExcitSourceEnumCase::CURRENT_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for current_excit_source was not specified or out of range"); - break; + + float64 voltage_excit_val = request->voltage_excit_val(); + bool32 use_excit_for_scaling = request->use_excit_for_scaling(); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateAIVoltageChanWithExcit(task, physical_channel, name_to_assign_to_channel, terminal_config, min_val, max_val, units, bridge_config, voltage_excit_source, voltage_excit_val, use_excit_for_scaling, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAIVoltageRMSChan(::grpc::ServerContext* context, const CreateAIVoltageRMSChanRequest* request, CreateAIVoltageRMSChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + int32 terminal_config; + switch (request->terminal_config_enum_case()) { + case nidaqmx_grpc::CreateAIVoltageRMSChanRequest::TerminalConfigEnumCase::kTerminalConfig: { + terminal_config = static_cast(request->terminal_config()); + break; + } + case nidaqmx_grpc::CreateAIVoltageRMSChanRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { + terminal_config = static_cast(request->terminal_config_raw()); + break; + } + case nidaqmx_grpc::CreateAIVoltageRMSChanRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); + break; + } + } - float64 current_excit_val = request->current_excit_val(); - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateTEDSAIAccelChan(task, physical_channel, name_to_assign_to_channel, terminal_config, min_val, max_val, units, current_excit_source, current_excit_val, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAIVoltageRMSChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAIVoltageRMSChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAIVoltageRMSChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateTEDSAIBridgeChan(::grpc::ServerContext* context, const CreateTEDSAIBridgeChanRequest* request, CreateTEDSAIBridgeChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIBridgeChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateTEDSAIBridgeChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateTEDSAIBridgeChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; - } - } - - int32 voltage_excit_source; - switch (request->voltage_excit_source_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIBridgeChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { - voltage_excit_source = static_cast(request->voltage_excit_source()); - break; - } - case nidaqmx_grpc::CreateTEDSAIBridgeChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { - voltage_excit_source = static_cast(request->voltage_excit_source_raw()); - break; - } - case nidaqmx_grpc::CreateTEDSAIBridgeChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); - break; - } - } - - float64 voltage_excit_val = request->voltage_excit_val(); - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateTEDSAIBridgeChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, voltage_excit_source, voltage_excit_val, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateTEDSAICurrentChan(::grpc::ServerContext* context, const CreateTEDSAICurrentChanRequest* request, CreateTEDSAICurrentChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - int32 terminal_config; - switch (request->terminal_config_enum_case()) { - case nidaqmx_grpc::CreateTEDSAICurrentChanRequest::TerminalConfigEnumCase::kTerminalConfig: { - terminal_config = static_cast(request->terminal_config()); - break; - } - case nidaqmx_grpc::CreateTEDSAICurrentChanRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { - terminal_config = static_cast(request->terminal_config_raw()); - break; - } - case nidaqmx_grpc::CreateTEDSAICurrentChanRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); - break; + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateAIVoltageRMSChan(task, physical_channel, name_to_assign_to_channel, terminal_config, min_val, max_val, units, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateTEDSAICurrentChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateTEDSAICurrentChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateTEDSAICurrentChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAOCurrentChan(::grpc::ServerContext* context, const CreateAOCurrentChanRequest* request, CreateAOCurrentChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAOCurrentChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAOCurrentChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAOCurrentChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - } - int32 shunt_resistor_loc; - switch (request->shunt_resistor_loc_enum_case()) { - case nidaqmx_grpc::CreateTEDSAICurrentChanRequest::ShuntResistorLocEnumCase::kShuntResistorLoc: { - shunt_resistor_loc = static_cast(request->shunt_resistor_loc()); - break; - } - case nidaqmx_grpc::CreateTEDSAICurrentChanRequest::ShuntResistorLocEnumCase::kShuntResistorLocRaw: { - shunt_resistor_loc = static_cast(request->shunt_resistor_loc_raw()); - break; - } - case nidaqmx_grpc::CreateTEDSAICurrentChanRequest::ShuntResistorLocEnumCase::SHUNT_RESISTOR_LOC_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for shunt_resistor_loc was not specified or out of range"); - break; + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateAOCurrentChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAOFuncGenChan(::grpc::ServerContext* context, const CreateAOFuncGenChanRequest* request, CreateAOFuncGenChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + int32 type; + switch (request->type_enum_case()) { + case nidaqmx_grpc::CreateAOFuncGenChanRequest::TypeEnumCase::kType: { + type = static_cast(request->type()); + break; + } + case nidaqmx_grpc::CreateAOFuncGenChanRequest::TypeEnumCase::kTypeRaw: { + type = static_cast(request->type_raw()); + break; + } + case nidaqmx_grpc::CreateAOFuncGenChanRequest::TypeEnumCase::TYPE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for type was not specified or out of range"); + break; + } + } - float64 ext_shunt_resistor_val = request->ext_shunt_resistor_val(); - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateTEDSAICurrentChan(task, physical_channel, name_to_assign_to_channel, terminal_config, min_val, max_val, units, shunt_resistor_loc, ext_shunt_resistor_val, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateTEDSAIForceBridgeChan(::grpc::ServerContext* context, const CreateTEDSAIForceBridgeChanRequest* request, CreateTEDSAIForceBridgeChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIForceBridgeChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateTEDSAIForceBridgeChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateTEDSAIForceBridgeChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; - } - } - - int32 voltage_excit_source; - switch (request->voltage_excit_source_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIForceBridgeChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { - voltage_excit_source = static_cast(request->voltage_excit_source()); - break; - } - case nidaqmx_grpc::CreateTEDSAIForceBridgeChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { - voltage_excit_source = static_cast(request->voltage_excit_source_raw()); - break; - } - case nidaqmx_grpc::CreateTEDSAIForceBridgeChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); - break; - } - } - - float64 voltage_excit_val = request->voltage_excit_val(); - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateTEDSAIForceBridgeChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, voltage_excit_source, voltage_excit_val, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateTEDSAIForceIEPEChan(::grpc::ServerContext* context, const CreateTEDSAIForceIEPEChanRequest* request, CreateTEDSAIForceIEPEChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - int32 terminal_config; - switch (request->terminal_config_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIForceIEPEChanRequest::TerminalConfigEnumCase::kTerminalConfig: { - terminal_config = static_cast(request->terminal_config()); - break; + float64 freq = request->freq(); + float64 amplitude = request->amplitude(); + float64 offset = request->offset(); + auto status = library_->CreateAOFuncGenChan(task, physical_channel, name_to_assign_to_channel, type, freq, amplitude, offset); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - case nidaqmx_grpc::CreateTEDSAIForceIEPEChanRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { - terminal_config = static_cast(request->terminal_config_raw()); - break; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateAOVoltageChan(::grpc::ServerContext* context, const CreateAOVoltageChanRequest* request, CreateAOVoltageChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateAOVoltageChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateAOVoltageChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateAOVoltageChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateTEDSAIForceIEPEChanRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); - break; + + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateAOVoltageChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateCIAngEncoderChan(::grpc::ServerContext* context, const CreateCIAngEncoderChanRequest* request, CreateCIAngEncoderChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto counter_mbcs = convert_from_grpc(request->counter()); + auto counter = counter_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + int32 decoding_type; + switch (request->decoding_type_enum_case()) { + case nidaqmx_grpc::CreateCIAngEncoderChanRequest::DecodingTypeEnumCase::kDecodingType: { + decoding_type = static_cast(request->decoding_type()); + break; + } + case nidaqmx_grpc::CreateCIAngEncoderChanRequest::DecodingTypeEnumCase::kDecodingTypeRaw: { + decoding_type = static_cast(request->decoding_type_raw()); + break; + } + case nidaqmx_grpc::CreateCIAngEncoderChanRequest::DecodingTypeEnumCase::DECODING_TYPE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for decoding_type was not specified or out of range"); + break; + } + } - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIForceIEPEChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; + bool32 zidx_enable = request->zidx_enable(); + float64 zidx_val = request->zidx_val(); + int32 zidx_phase; + switch (request->zidx_phase_enum_case()) { + case nidaqmx_grpc::CreateCIAngEncoderChanRequest::ZidxPhaseEnumCase::kZidxPhase: { + zidx_phase = static_cast(request->zidx_phase()); + break; + } + case nidaqmx_grpc::CreateCIAngEncoderChanRequest::ZidxPhaseEnumCase::kZidxPhaseRaw: { + zidx_phase = static_cast(request->zidx_phase_raw()); + break; + } + case nidaqmx_grpc::CreateCIAngEncoderChanRequest::ZidxPhaseEnumCase::ZIDX_PHASE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for zidx_phase was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateTEDSAIForceIEPEChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; + + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateCIAngEncoderChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateCIAngEncoderChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateCIAngEncoderChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateTEDSAIForceIEPEChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + + uInt32 pulses_per_rev = request->pulses_per_rev(); + float64 initial_angle = request->initial_angle(); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateCIAngEncoderChan(task, counter, name_to_assign_to_channel, decoding_type, zidx_enable, zidx_val, zidx_phase, units, pulses_per_rev, initial_angle, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - int32 current_excit_source; - switch (request->current_excit_source_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIForceIEPEChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSource: { - current_excit_source = static_cast(request->current_excit_source()); - break; + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateCIAngVelocityChan(::grpc::ServerContext* context, const CreateCIAngVelocityChanRequest* request, CreateCIAngVelocityChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto counter_mbcs = convert_from_grpc(request->counter()); + auto counter = counter_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 decoding_type; + switch (request->decoding_type_enum_case()) { + case nidaqmx_grpc::CreateCIAngVelocityChanRequest::DecodingTypeEnumCase::kDecodingType: { + decoding_type = static_cast(request->decoding_type()); + break; + } + case nidaqmx_grpc::CreateCIAngVelocityChanRequest::DecodingTypeEnumCase::kDecodingTypeRaw: { + decoding_type = static_cast(request->decoding_type_raw()); + break; + } + case nidaqmx_grpc::CreateCIAngVelocityChanRequest::DecodingTypeEnumCase::DECODING_TYPE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for decoding_type was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateTEDSAIForceIEPEChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSourceRaw: { - current_excit_source = static_cast(request->current_excit_source_raw()); - break; + + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateCIAngVelocityChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateCIAngVelocityChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateCIAngVelocityChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateTEDSAIForceIEPEChanRequest::CurrentExcitSourceEnumCase::CURRENT_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for current_excit_source was not specified or out of range"); - break; + + uInt32 pulses_per_rev = request->pulses_per_rev(); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateCIAngVelocityChan(task, counter, name_to_assign_to_channel, min_val, max_val, decoding_type, units, pulses_per_rev, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateCICountEdgesChan(::grpc::ServerContext* context, const CreateCICountEdgesChanRequest* request, CreateCICountEdgesChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto counter_mbcs = convert_from_grpc(request->counter()); + auto counter = counter_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + int32 edge; + switch (request->edge_enum_case()) { + case nidaqmx_grpc::CreateCICountEdgesChanRequest::EdgeEnumCase::kEdge: { + edge = static_cast(request->edge()); + break; + } + case nidaqmx_grpc::CreateCICountEdgesChanRequest::EdgeEnumCase::kEdgeRaw: { + edge = static_cast(request->edge_raw()); + break; + } + case nidaqmx_grpc::CreateCICountEdgesChanRequest::EdgeEnumCase::EDGE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for edge was not specified or out of range"); + break; + } + } - float64 current_excit_val = request->current_excit_val(); - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateTEDSAIForceIEPEChan(task, physical_channel, name_to_assign_to_channel, terminal_config, min_val, max_val, units, current_excit_source, current_excit_val, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + uInt32 initial_count = request->initial_count(); + int32 count_direction; + switch (request->count_direction_enum_case()) { + case nidaqmx_grpc::CreateCICountEdgesChanRequest::CountDirectionEnumCase::kCountDirection: { + count_direction = static_cast(request->count_direction()); + break; + } + case nidaqmx_grpc::CreateCICountEdgesChanRequest::CountDirectionEnumCase::kCountDirectionRaw: { + count_direction = static_cast(request->count_direction_raw()); + break; + } + case nidaqmx_grpc::CreateCICountEdgesChanRequest::CountDirectionEnumCase::COUNT_DIRECTION_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for count_direction was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateTEDSAIMicrophoneChan(::grpc::ServerContext* context, const CreateTEDSAIMicrophoneChanRequest* request, CreateTEDSAIMicrophoneChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - int32 terminal_config; - switch (request->terminal_config_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIMicrophoneChanRequest::TerminalConfigEnumCase::kTerminalConfig: { - terminal_config = static_cast(request->terminal_config()); - break; + auto status = library_->CreateCICountEdgesChan(task, counter, name_to_assign_to_channel, edge, initial_count, count_direction); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - case nidaqmx_grpc::CreateTEDSAIMicrophoneChanRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { - terminal_config = static_cast(request->terminal_config_raw()); - break; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateCIDutyCycleChan(::grpc::ServerContext* context, const CreateCIDutyCycleChanRequest* request, CreateCIDutyCycleChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto counter_mbcs = convert_from_grpc(request->counter()); + auto counter = counter_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_freq = request->min_freq(); + float64 max_freq = request->max_freq(); + int32 edge; + switch (request->edge_enum_case()) { + case nidaqmx_grpc::CreateCIDutyCycleChanRequest::EdgeEnumCase::kEdge: { + edge = static_cast(request->edge()); + break; + } + case nidaqmx_grpc::CreateCIDutyCycleChanRequest::EdgeEnumCase::kEdgeRaw: { + edge = static_cast(request->edge_raw()); + break; + } + case nidaqmx_grpc::CreateCIDutyCycleChanRequest::EdgeEnumCase::EDGE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for edge was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateTEDSAIMicrophoneChanRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); - break; + + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateCIDutyCycleChan(task, counter, name_to_assign_to_channel, min_freq, max_freq, edge, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIMicrophoneChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateCIFreqChan(::grpc::ServerContext* context, const CreateCIFreqChanRequest* request, CreateCIFreqChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto counter_mbcs = convert_from_grpc(request->counter()); + auto counter = counter_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateCIFreqChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateCIFreqChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateCIFreqChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateTEDSAIMicrophoneChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; + + int32 edge; + switch (request->edge_enum_case()) { + case nidaqmx_grpc::CreateCIFreqChanRequest::EdgeEnumCase::kEdge: { + edge = static_cast(request->edge()); + break; + } + case nidaqmx_grpc::CreateCIFreqChanRequest::EdgeEnumCase::kEdgeRaw: { + edge = static_cast(request->edge_raw()); + break; + } + case nidaqmx_grpc::CreateCIFreqChanRequest::EdgeEnumCase::EDGE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for edge was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateTEDSAIMicrophoneChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + + int32 meas_method; + switch (request->meas_method_enum_case()) { + case nidaqmx_grpc::CreateCIFreqChanRequest::MeasMethodEnumCase::kMeasMethod: { + meas_method = static_cast(request->meas_method()); + break; + } + case nidaqmx_grpc::CreateCIFreqChanRequest::MeasMethodEnumCase::kMeasMethodRaw: { + meas_method = static_cast(request->meas_method_raw()); + break; + } + case nidaqmx_grpc::CreateCIFreqChanRequest::MeasMethodEnumCase::MEAS_METHOD_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for meas_method was not specified or out of range"); + break; + } } - } - float64 max_snd_press_level = request->max_snd_press_level(); - int32 current_excit_source; - switch (request->current_excit_source_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIMicrophoneChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSource: { - current_excit_source = static_cast(request->current_excit_source()); - break; + float64 meas_time = request->meas_time(); + uInt32 divisor = request->divisor(); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateCIFreqChan(task, counter, name_to_assign_to_channel, min_val, max_val, units, edge, meas_method, meas_time, divisor, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - case nidaqmx_grpc::CreateTEDSAIMicrophoneChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSourceRaw: { - current_excit_source = static_cast(request->current_excit_source_raw()); - break; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateCIGPSTimestampChan(::grpc::ServerContext* context, const CreateCIGPSTimestampChanRequest* request, CreateCIGPSTimestampChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto counter_mbcs = convert_from_grpc(request->counter()); + auto counter = counter_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateCIGPSTimestampChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateCIGPSTimestampChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateCIGPSTimestampChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateTEDSAIMicrophoneChanRequest::CurrentExcitSourceEnumCase::CURRENT_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for current_excit_source was not specified or out of range"); - break; + + int32 sync_method; + switch (request->sync_method_enum_case()) { + case nidaqmx_grpc::CreateCIGPSTimestampChanRequest::SyncMethodEnumCase::kSyncMethod: { + sync_method = static_cast(request->sync_method()); + break; + } + case nidaqmx_grpc::CreateCIGPSTimestampChanRequest::SyncMethodEnumCase::kSyncMethodRaw: { + sync_method = static_cast(request->sync_method_raw()); + break; + } + case nidaqmx_grpc::CreateCIGPSTimestampChanRequest::SyncMethodEnumCase::SYNC_METHOD_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for sync_method was not specified or out of range"); + break; + } } - } - float64 current_excit_val = request->current_excit_val(); - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateTEDSAIMicrophoneChan(task, physical_channel, name_to_assign_to_channel, terminal_config, units, max_snd_press_level, current_excit_source, current_excit_val, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateCIGPSTimestampChan(task, counter, name_to_assign_to_channel, units, sync_method, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateCILinEncoderChan(::grpc::ServerContext* context, const CreateCILinEncoderChanRequest* request, CreateCILinEncoderChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto counter_mbcs = convert_from_grpc(request->counter()); + auto counter = counter_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + int32 decoding_type; + switch (request->decoding_type_enum_case()) { + case nidaqmx_grpc::CreateCILinEncoderChanRequest::DecodingTypeEnumCase::kDecodingType: { + decoding_type = static_cast(request->decoding_type()); + break; + } + case nidaqmx_grpc::CreateCILinEncoderChanRequest::DecodingTypeEnumCase::kDecodingTypeRaw: { + decoding_type = static_cast(request->decoding_type_raw()); + break; + } + case nidaqmx_grpc::CreateCILinEncoderChanRequest::DecodingTypeEnumCase::DECODING_TYPE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for decoding_type was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateTEDSAIPosLVDTChan(::grpc::ServerContext* context, const CreateTEDSAIPosLVDTChanRequest* request, CreateTEDSAIPosLVDTChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIPosLVDTChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; + bool32 zidx_enable = request->zidx_enable(); + float64 zidx_val = request->zidx_val(); + int32 zidx_phase; + switch (request->zidx_phase_enum_case()) { + case nidaqmx_grpc::CreateCILinEncoderChanRequest::ZidxPhaseEnumCase::kZidxPhase: { + zidx_phase = static_cast(request->zidx_phase()); + break; + } + case nidaqmx_grpc::CreateCILinEncoderChanRequest::ZidxPhaseEnumCase::kZidxPhaseRaw: { + zidx_phase = static_cast(request->zidx_phase_raw()); + break; + } + case nidaqmx_grpc::CreateCILinEncoderChanRequest::ZidxPhaseEnumCase::ZIDX_PHASE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for zidx_phase was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateTEDSAIPosLVDTChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; + + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateCILinEncoderChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateCILinEncoderChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateCILinEncoderChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateTEDSAIPosLVDTChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + + float64 dist_per_pulse = request->dist_per_pulse(); + float64 initial_pos = request->initial_pos(); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateCILinEncoderChan(task, counter, name_to_assign_to_channel, decoding_type, zidx_enable, zidx_val, zidx_phase, units, dist_per_pulse, initial_pos, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - int32 voltage_excit_source; - switch (request->voltage_excit_source_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIPosLVDTChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { - voltage_excit_source = static_cast(request->voltage_excit_source()); - break; + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateCILinVelocityChan(::grpc::ServerContext* context, const CreateCILinVelocityChanRequest* request, CreateCILinVelocityChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto counter_mbcs = convert_from_grpc(request->counter()); + auto counter = counter_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 decoding_type; + switch (request->decoding_type_enum_case()) { + case nidaqmx_grpc::CreateCILinVelocityChanRequest::DecodingTypeEnumCase::kDecodingType: { + decoding_type = static_cast(request->decoding_type()); + break; + } + case nidaqmx_grpc::CreateCILinVelocityChanRequest::DecodingTypeEnumCase::kDecodingTypeRaw: { + decoding_type = static_cast(request->decoding_type_raw()); + break; + } + case nidaqmx_grpc::CreateCILinVelocityChanRequest::DecodingTypeEnumCase::DECODING_TYPE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for decoding_type was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateTEDSAIPosLVDTChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { - voltage_excit_source = static_cast(request->voltage_excit_source_raw()); - break; + + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateCILinVelocityChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateCILinVelocityChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateCILinVelocityChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateTEDSAIPosLVDTChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); - break; + + float64 dist_per_pulse = request->dist_per_pulse(); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateCILinVelocityChan(task, counter, name_to_assign_to_channel, min_val, max_val, decoding_type, units, dist_per_pulse, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateCIPeriodChan(::grpc::ServerContext* context, const CreateCIPeriodChanRequest* request, CreateCIPeriodChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto counter_mbcs = convert_from_grpc(request->counter()); + auto counter = counter_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateCIPeriodChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateCIPeriodChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateCIPeriodChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } + } - float64 voltage_excit_val = request->voltage_excit_val(); - float64 voltage_excit_freq = request->voltage_excit_freq(); - int32 ac_excit_wire_mode; - switch (request->ac_excit_wire_mode_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIPosLVDTChanRequest::AcExcitWireModeEnumCase::kAcExcitWireMode: { - ac_excit_wire_mode = static_cast(request->ac_excit_wire_mode()); - break; + int32 edge; + switch (request->edge_enum_case()) { + case nidaqmx_grpc::CreateCIPeriodChanRequest::EdgeEnumCase::kEdge: { + edge = static_cast(request->edge()); + break; + } + case nidaqmx_grpc::CreateCIPeriodChanRequest::EdgeEnumCase::kEdgeRaw: { + edge = static_cast(request->edge_raw()); + break; + } + case nidaqmx_grpc::CreateCIPeriodChanRequest::EdgeEnumCase::EDGE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for edge was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateTEDSAIPosLVDTChanRequest::AcExcitWireModeEnumCase::kAcExcitWireModeRaw: { - ac_excit_wire_mode = static_cast(request->ac_excit_wire_mode_raw()); - break; + + int32 meas_method; + switch (request->meas_method_enum_case()) { + case nidaqmx_grpc::CreateCIPeriodChanRequest::MeasMethodEnumCase::kMeasMethod: { + meas_method = static_cast(request->meas_method()); + break; + } + case nidaqmx_grpc::CreateCIPeriodChanRequest::MeasMethodEnumCase::kMeasMethodRaw: { + meas_method = static_cast(request->meas_method_raw()); + break; + } + case nidaqmx_grpc::CreateCIPeriodChanRequest::MeasMethodEnumCase::MEAS_METHOD_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for meas_method was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateTEDSAIPosLVDTChanRequest::AcExcitWireModeEnumCase::AC_EXCIT_WIRE_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for ac_excit_wire_mode was not specified or out of range"); - break; + + float64 meas_time = request->meas_time(); + uInt32 divisor = request->divisor(); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateCIPeriodChan(task, counter, name_to_assign_to_channel, min_val, max_val, units, edge, meas_method, meas_time, divisor, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateCIPulseChanFreq(::grpc::ServerContext* context, const CreateCIPulseChanFreqRequest* request, CreateCIPulseChanFreqResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto counter_mbcs = convert_from_grpc(request->counter()); + auto counter = counter_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateCIPulseChanFreqRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateCIPulseChanFreqRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateCIPulseChanFreqRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } + } - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateTEDSAIPosLVDTChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, voltage_excit_source, voltage_excit_val, voltage_excit_freq, ac_excit_wire_mode, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + auto status = library_->CreateCIPulseChanFreq(task, counter, name_to_assign_to_channel, min_val, max_val, units); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateTEDSAIPosRVDTChan(::grpc::ServerContext* context, const CreateTEDSAIPosRVDTChanRequest* request, CreateTEDSAIPosRVDTChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIPosRVDTChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateCIPulseChanTicks(::grpc::ServerContext* context, const CreateCIPulseChanTicksRequest* request, CreateCIPulseChanTicksResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto counter_mbcs = convert_from_grpc(request->counter()); + auto counter = counter_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + auto source_terminal_mbcs = convert_from_grpc(request->source_terminal()); + auto source_terminal = source_terminal_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + auto status = library_->CreateCIPulseChanTicks(task, counter, name_to_assign_to_channel, source_terminal, min_val, max_val); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - case nidaqmx_grpc::CreateTEDSAIPosRVDTChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateCIPulseChanTime(::grpc::ServerContext* context, const CreateCIPulseChanTimeRequest* request, CreateCIPulseChanTimeResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto counter_mbcs = convert_from_grpc(request->counter()); + auto counter = counter_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateCIPulseChanTimeRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateCIPulseChanTimeRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateCIPulseChanTimeRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateTEDSAIPosRVDTChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + + auto status = library_->CreateCIPulseChanTime(task, counter, name_to_assign_to_channel, min_val, max_val, units); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - int32 voltage_excit_source; - switch (request->voltage_excit_source_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIPosRVDTChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { - voltage_excit_source = static_cast(request->voltage_excit_source()); - break; + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateCIPulseWidthChan(::grpc::ServerContext* context, const CreateCIPulseWidthChanRequest* request, CreateCIPulseWidthChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto counter_mbcs = convert_from_grpc(request->counter()); + auto counter = counter_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateCIPulseWidthChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateCIPulseWidthChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateCIPulseWidthChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateTEDSAIPosRVDTChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { - voltage_excit_source = static_cast(request->voltage_excit_source_raw()); - break; + + int32 starting_edge; + switch (request->starting_edge_enum_case()) { + case nidaqmx_grpc::CreateCIPulseWidthChanRequest::StartingEdgeEnumCase::kStartingEdge: { + starting_edge = static_cast(request->starting_edge()); + break; + } + case nidaqmx_grpc::CreateCIPulseWidthChanRequest::StartingEdgeEnumCase::kStartingEdgeRaw: { + starting_edge = static_cast(request->starting_edge_raw()); + break; + } + case nidaqmx_grpc::CreateCIPulseWidthChanRequest::StartingEdgeEnumCase::STARTING_EDGE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for starting_edge was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateTEDSAIPosRVDTChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); - break; + + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateCIPulseWidthChan(task, counter, name_to_assign_to_channel, min_val, max_val, units, starting_edge, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateCISemiPeriodChan(::grpc::ServerContext* context, const CreateCISemiPeriodChanRequest* request, CreateCISemiPeriodChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto counter_mbcs = convert_from_grpc(request->counter()); + auto counter = counter_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateCISemiPeriodChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateCISemiPeriodChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateCISemiPeriodChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } + } - float64 voltage_excit_val = request->voltage_excit_val(); - float64 voltage_excit_freq = request->voltage_excit_freq(); - int32 ac_excit_wire_mode; - switch (request->ac_excit_wire_mode_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIPosRVDTChanRequest::AcExcitWireModeEnumCase::kAcExcitWireMode: { - ac_excit_wire_mode = static_cast(request->ac_excit_wire_mode()); - break; + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateCISemiPeriodChan(task, counter, name_to_assign_to_channel, min_val, max_val, units, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - case nidaqmx_grpc::CreateTEDSAIPosRVDTChanRequest::AcExcitWireModeEnumCase::kAcExcitWireModeRaw: { - ac_excit_wire_mode = static_cast(request->ac_excit_wire_mode_raw()); - break; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateCITwoEdgeSepChan(::grpc::ServerContext* context, const CreateCITwoEdgeSepChanRequest* request, CreateCITwoEdgeSepChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto counter_mbcs = convert_from_grpc(request->counter()); + auto counter = counter_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateCITwoEdgeSepChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateCITwoEdgeSepChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateCITwoEdgeSepChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } + } + + int32 first_edge; + switch (request->first_edge_enum_case()) { + case nidaqmx_grpc::CreateCITwoEdgeSepChanRequest::FirstEdgeEnumCase::kFirstEdge: { + first_edge = static_cast(request->first_edge()); + break; + } + case nidaqmx_grpc::CreateCITwoEdgeSepChanRequest::FirstEdgeEnumCase::kFirstEdgeRaw: { + first_edge = static_cast(request->first_edge_raw()); + break; + } + case nidaqmx_grpc::CreateCITwoEdgeSepChanRequest::FirstEdgeEnumCase::FIRST_EDGE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for first_edge was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateTEDSAIPosRVDTChanRequest::AcExcitWireModeEnumCase::AC_EXCIT_WIRE_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for ac_excit_wire_mode was not specified or out of range"); - break; + + int32 second_edge; + switch (request->second_edge_enum_case()) { + case nidaqmx_grpc::CreateCITwoEdgeSepChanRequest::SecondEdgeEnumCase::kSecondEdge: { + second_edge = static_cast(request->second_edge()); + break; + } + case nidaqmx_grpc::CreateCITwoEdgeSepChanRequest::SecondEdgeEnumCase::kSecondEdgeRaw: { + second_edge = static_cast(request->second_edge_raw()); + break; + } + case nidaqmx_grpc::CreateCITwoEdgeSepChanRequest::SecondEdgeEnumCase::SECOND_EDGE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for second_edge was not specified or out of range"); + break; + } } - } - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateTEDSAIPosRVDTChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, voltage_excit_source, voltage_excit_val, voltage_excit_freq, ac_excit_wire_mode, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateCITwoEdgeSepChan(task, counter, name_to_assign_to_channel, min_val, max_val, units, first_edge, second_edge, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateCOPulseChanFreq(::grpc::ServerContext* context, const CreateCOPulseChanFreqRequest* request, CreateCOPulseChanFreqResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto counter_mbcs = convert_from_grpc(request->counter()); + auto counter = counter_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateCOPulseChanFreqRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateCOPulseChanFreqRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateCOPulseChanFreqRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateTEDSAIPressureBridgeChan(::grpc::ServerContext* context, const CreateTEDSAIPressureBridgeChanRequest* request, CreateTEDSAIPressureBridgeChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIPressureBridgeChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateTEDSAIPressureBridgeChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateTEDSAIPressureBridgeChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; - } - } - - int32 voltage_excit_source; - switch (request->voltage_excit_source_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIPressureBridgeChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { - voltage_excit_source = static_cast(request->voltage_excit_source()); - break; - } - case nidaqmx_grpc::CreateTEDSAIPressureBridgeChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { - voltage_excit_source = static_cast(request->voltage_excit_source_raw()); - break; - } - case nidaqmx_grpc::CreateTEDSAIPressureBridgeChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); - break; - } - } - - float64 voltage_excit_val = request->voltage_excit_val(); - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateTEDSAIPressureBridgeChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, voltage_excit_source, voltage_excit_val, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + int32 idle_state; + switch (request->idle_state_enum_case()) { + case nidaqmx_grpc::CreateCOPulseChanFreqRequest::IdleStateEnumCase::kIdleState: { + idle_state = static_cast(request->idle_state()); + break; + } + case nidaqmx_grpc::CreateCOPulseChanFreqRequest::IdleStateEnumCase::kIdleStateRaw: { + idle_state = static_cast(request->idle_state_raw()); + break; + } + case nidaqmx_grpc::CreateCOPulseChanFreqRequest::IdleStateEnumCase::IDLE_STATE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for idle_state was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateTEDSAIRTDChan(::grpc::ServerContext* context, const CreateTEDSAIRTDChanRequest* request, CreateTEDSAIRTDChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIRTDChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; + float64 initial_delay = request->initial_delay(); + float64 freq = request->freq(); + float64 duty_cycle = request->duty_cycle(); + auto status = library_->CreateCOPulseChanFreq(task, counter, name_to_assign_to_channel, units, idle_state, initial_delay, freq, duty_cycle); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - case nidaqmx_grpc::CreateTEDSAIRTDChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateCOPulseChanTicks(::grpc::ServerContext* context, const CreateCOPulseChanTicksRequest* request, CreateCOPulseChanTicksResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto counter_mbcs = convert_from_grpc(request->counter()); + auto counter = counter_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + auto source_terminal_mbcs = convert_from_grpc(request->source_terminal()); + auto source_terminal = source_terminal_mbcs.c_str(); + int32 idle_state; + switch (request->idle_state_enum_case()) { + case nidaqmx_grpc::CreateCOPulseChanTicksRequest::IdleStateEnumCase::kIdleState: { + idle_state = static_cast(request->idle_state()); + break; + } + case nidaqmx_grpc::CreateCOPulseChanTicksRequest::IdleStateEnumCase::kIdleStateRaw: { + idle_state = static_cast(request->idle_state_raw()); + break; + } + case nidaqmx_grpc::CreateCOPulseChanTicksRequest::IdleStateEnumCase::IDLE_STATE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for idle_state was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateTEDSAIRTDChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + + int32 initial_delay = request->initial_delay(); + int32 low_ticks = request->low_ticks(); + int32 high_ticks = request->high_ticks(); + auto status = library_->CreateCOPulseChanTicks(task, counter, name_to_assign_to_channel, source_terminal, idle_state, initial_delay, low_ticks, high_ticks); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - int32 resistance_config; - switch (request->resistance_config_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIRTDChanRequest::ResistanceConfigEnumCase::kResistanceConfig: { - resistance_config = static_cast(request->resistance_config()); - break; + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateCOPulseChanTime(::grpc::ServerContext* context, const CreateCOPulseChanTimeRequest* request, CreateCOPulseChanTimeResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto counter_mbcs = convert_from_grpc(request->counter()); + auto counter = counter_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateCOPulseChanTimeRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateCOPulseChanTimeRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateCOPulseChanTimeRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateTEDSAIRTDChanRequest::ResistanceConfigEnumCase::kResistanceConfigRaw: { - resistance_config = static_cast(request->resistance_config_raw()); - break; + + int32 idle_state; + switch (request->idle_state_enum_case()) { + case nidaqmx_grpc::CreateCOPulseChanTimeRequest::IdleStateEnumCase::kIdleState: { + idle_state = static_cast(request->idle_state()); + break; + } + case nidaqmx_grpc::CreateCOPulseChanTimeRequest::IdleStateEnumCase::kIdleStateRaw: { + idle_state = static_cast(request->idle_state_raw()); + break; + } + case nidaqmx_grpc::CreateCOPulseChanTimeRequest::IdleStateEnumCase::IDLE_STATE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for idle_state was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateTEDSAIRTDChanRequest::ResistanceConfigEnumCase::RESISTANCE_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for resistance_config was not specified or out of range"); - break; + + float64 initial_delay = request->initial_delay(); + float64 low_time = request->low_time(); + float64 high_time = request->high_time(); + auto status = library_->CreateCOPulseChanTime(task, counter, name_to_assign_to_channel, units, idle_state, initial_delay, low_time, high_time); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateDIChan(::grpc::ServerContext* context, const CreateDIChanRequest* request, CreateDIChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto lines_mbcs = convert_from_grpc(request->lines()); + auto lines = lines_mbcs.c_str(); + auto name_to_assign_to_lines_mbcs = convert_from_grpc(request->name_to_assign_to_lines()); + auto name_to_assign_to_lines = name_to_assign_to_lines_mbcs.c_str(); + int32 line_grouping; + switch (request->line_grouping_enum_case()) { + case nidaqmx_grpc::CreateDIChanRequest::LineGroupingEnumCase::kLineGrouping: { + line_grouping = static_cast(request->line_grouping()); + break; + } + case nidaqmx_grpc::CreateDIChanRequest::LineGroupingEnumCase::kLineGroupingRaw: { + line_grouping = static_cast(request->line_grouping_raw()); + break; + } + case nidaqmx_grpc::CreateDIChanRequest::LineGroupingEnumCase::LINE_GROUPING_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for line_grouping was not specified or out of range"); + break; + } + } - int32 current_excit_source; - switch (request->current_excit_source_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIRTDChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSource: { - current_excit_source = static_cast(request->current_excit_source()); - break; + auto status = library_->CreateDIChan(task, lines, name_to_assign_to_lines, line_grouping); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - case nidaqmx_grpc::CreateTEDSAIRTDChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSourceRaw: { - current_excit_source = static_cast(request->current_excit_source_raw()); - break; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateDOChan(::grpc::ServerContext* context, const CreateDOChanRequest* request, CreateDOChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto lines_mbcs = convert_from_grpc(request->lines()); + auto lines = lines_mbcs.c_str(); + auto name_to_assign_to_lines_mbcs = convert_from_grpc(request->name_to_assign_to_lines()); + auto name_to_assign_to_lines = name_to_assign_to_lines_mbcs.c_str(); + int32 line_grouping; + switch (request->line_grouping_enum_case()) { + case nidaqmx_grpc::CreateDOChanRequest::LineGroupingEnumCase::kLineGrouping: { + line_grouping = static_cast(request->line_grouping()); + break; + } + case nidaqmx_grpc::CreateDOChanRequest::LineGroupingEnumCase::kLineGroupingRaw: { + line_grouping = static_cast(request->line_grouping_raw()); + break; + } + case nidaqmx_grpc::CreateDOChanRequest::LineGroupingEnumCase::LINE_GROUPING_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for line_grouping was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateTEDSAIRTDChanRequest::CurrentExcitSourceEnumCase::CURRENT_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for current_excit_source was not specified or out of range"); - break; + + auto status = library_->CreateDOChan(task, lines, name_to_assign_to_lines, line_grouping); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - float64 current_excit_val = request->current_excit_val(); - auto status = library_->CreateTEDSAIRTDChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, resistance_config, current_excit_source, current_excit_val); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateTEDSAIResistanceChan(::grpc::ServerContext* context, const CreateTEDSAIResistanceChanRequest* request, CreateTEDSAIResistanceChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIResistanceChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateTEDSAIResistanceChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateTEDSAIResistanceChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateLinScale(::grpc::ServerContext* context, const CreateLinScaleRequest* request, CreateLinScaleResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - - int32 resistance_config; - switch (request->resistance_config_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIResistanceChanRequest::ResistanceConfigEnumCase::kResistanceConfig: { - resistance_config = static_cast(request->resistance_config()); - break; - } - case nidaqmx_grpc::CreateTEDSAIResistanceChanRequest::ResistanceConfigEnumCase::kResistanceConfigRaw: { - resistance_config = static_cast(request->resistance_config_raw()); - break; - } - case nidaqmx_grpc::CreateTEDSAIResistanceChanRequest::ResistanceConfigEnumCase::RESISTANCE_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for resistance_config was not specified or out of range"); - break; + try { + auto name_mbcs = convert_from_grpc(request->name()); + auto name = name_mbcs.c_str(); + float64 slope = request->slope(); + float64 y_intercept = request->y_intercept(); + int32 pre_scaled_units; + switch (request->pre_scaled_units_enum_case()) { + case nidaqmx_grpc::CreateLinScaleRequest::PreScaledUnitsEnumCase::kPreScaledUnits: { + pre_scaled_units = static_cast(request->pre_scaled_units()); + break; + } + case nidaqmx_grpc::CreateLinScaleRequest::PreScaledUnitsEnumCase::kPreScaledUnitsRaw: { + pre_scaled_units = static_cast(request->pre_scaled_units_raw()); + break; + } + case nidaqmx_grpc::CreateLinScaleRequest::PreScaledUnitsEnumCase::PRE_SCALED_UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for pre_scaled_units was not specified or out of range"); + break; + } } - } - int32 current_excit_source; - switch (request->current_excit_source_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIResistanceChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSource: { - current_excit_source = static_cast(request->current_excit_source()); - break; + auto scaled_units_mbcs = convert_from_grpc(request->scaled_units()); + auto scaled_units = scaled_units_mbcs.c_str(); + auto status = library_->CreateLinScale(name, slope, y_intercept, pre_scaled_units, scaled_units); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } - case nidaqmx_grpc::CreateTEDSAIResistanceChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSourceRaw: { - current_excit_source = static_cast(request->current_excit_source_raw()); - break; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateMapScale(::grpc::ServerContext* context, const CreateMapScaleRequest* request, CreateMapScaleResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto name_mbcs = convert_from_grpc(request->name()); + auto name = name_mbcs.c_str(); + float64 prescaled_min = request->prescaled_min(); + float64 prescaled_max = request->prescaled_max(); + float64 scaled_min = request->scaled_min(); + float64 scaled_max = request->scaled_max(); + int32 pre_scaled_units; + switch (request->pre_scaled_units_enum_case()) { + case nidaqmx_grpc::CreateMapScaleRequest::PreScaledUnitsEnumCase::kPreScaledUnits: { + pre_scaled_units = static_cast(request->pre_scaled_units()); + break; + } + case nidaqmx_grpc::CreateMapScaleRequest::PreScaledUnitsEnumCase::kPreScaledUnitsRaw: { + pre_scaled_units = static_cast(request->pre_scaled_units_raw()); + break; + } + case nidaqmx_grpc::CreateMapScaleRequest::PreScaledUnitsEnumCase::PRE_SCALED_UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for pre_scaled_units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateTEDSAIResistanceChanRequest::CurrentExcitSourceEnumCase::CURRENT_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for current_excit_source was not specified or out of range"); - break; + + auto scaled_units_mbcs = convert_from_grpc(request->scaled_units()); + auto scaled_units = scaled_units_mbcs.c_str(); + auto status = library_->CreateMapScale(name, prescaled_min, prescaled_max, scaled_min, scaled_max, pre_scaled_units, scaled_units); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreatePolynomialScale(::grpc::ServerContext* context, const CreatePolynomialScaleRequest* request, CreatePolynomialScaleResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto name_mbcs = convert_from_grpc(request->name()); + auto name = name_mbcs.c_str(); + auto forward_coeffs = const_cast(request->forward_coeffs().data()); + uInt32 num_forward_coeffs_in = static_cast(request->forward_coeffs().size()); + auto reverse_coeffs = const_cast(request->reverse_coeffs().data()); + uInt32 num_reverse_coeffs_in = static_cast(request->reverse_coeffs().size()); + int32 pre_scaled_units; + switch (request->pre_scaled_units_enum_case()) { + case nidaqmx_grpc::CreatePolynomialScaleRequest::PreScaledUnitsEnumCase::kPreScaledUnits: { + pre_scaled_units = static_cast(request->pre_scaled_units()); + break; + } + case nidaqmx_grpc::CreatePolynomialScaleRequest::PreScaledUnitsEnumCase::kPreScaledUnitsRaw: { + pre_scaled_units = static_cast(request->pre_scaled_units_raw()); + break; + } + case nidaqmx_grpc::CreatePolynomialScaleRequest::PreScaledUnitsEnumCase::PRE_SCALED_UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for pre_scaled_units was not specified or out of range"); + break; + } + } - float64 current_excit_val = request->current_excit_val(); - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateTEDSAIResistanceChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, resistance_config, current_excit_source, current_excit_val, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + auto scaled_units_mbcs = convert_from_grpc(request->scaled_units()); + auto scaled_units = scaled_units_mbcs.c_str(); + auto status = library_->CreatePolynomialScale(name, forward_coeffs, num_forward_coeffs_in, reverse_coeffs, num_reverse_coeffs_in, pre_scaled_units, scaled_units); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + return ::grpc::Status::OK; } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateTEDSAIStrainGageChan(::grpc::ServerContext* context, const CreateTEDSAIStrainGageChanRequest* request, CreateTEDSAIStrainGageChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIStrainGageChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateTEDSAIStrainGageChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateTEDSAIStrainGageChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; - } - } - - int32 voltage_excit_source; - switch (request->voltage_excit_source_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIStrainGageChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { - voltage_excit_source = static_cast(request->voltage_excit_source()); - break; - } - case nidaqmx_grpc::CreateTEDSAIStrainGageChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { - voltage_excit_source = static_cast(request->voltage_excit_source_raw()); - break; - } - case nidaqmx_grpc::CreateTEDSAIStrainGageChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); - break; - } - } - - float64 voltage_excit_val = request->voltage_excit_val(); - float64 initial_bridge_voltage = request->initial_bridge_voltage(); - float64 lead_wire_resistance = request->lead_wire_resistance(); - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateTEDSAIStrainGageChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, voltage_excit_source, voltage_excit_val, initial_bridge_voltage, lead_wire_resistance, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateTEDSAIThrmcplChan(::grpc::ServerContext* context, const CreateTEDSAIThrmcplChanRequest* request, CreateTEDSAIThrmcplChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIThrmcplChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateTEDSAIThrmcplChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateTEDSAIThrmcplChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; - } - } - - int32 cjc_source; - switch (request->cjc_source_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIThrmcplChanRequest::CjcSourceEnumCase::kCjcSource: { - cjc_source = static_cast(request->cjc_source()); - break; - } - case nidaqmx_grpc::CreateTEDSAIThrmcplChanRequest::CjcSourceEnumCase::kCjcSourceRaw: { - cjc_source = static_cast(request->cjc_source_raw()); - break; - } - case nidaqmx_grpc::CreateTEDSAIThrmcplChanRequest::CjcSourceEnumCase::CJC_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for cjc_source was not specified or out of range"); - break; - } - } - - float64 cjc_val = request->cjc_val(); - auto cjc_channel_mbcs = convert_from_grpc(request->cjc_channel()); - auto cjc_channel = cjc_channel_mbcs.c_str(); - auto status = library_->CreateTEDSAIThrmcplChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, cjc_source, cjc_val, cjc_channel); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateTEDSAIAccelChan(::grpc::ServerContext* context, const CreateTEDSAIAccelChanRequest* request, CreateTEDSAIAccelChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + int32 terminal_config; + switch (request->terminal_config_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIAccelChanRequest::TerminalConfigEnumCase::kTerminalConfig: { + terminal_config = static_cast(request->terminal_config()); + break; + } + case nidaqmx_grpc::CreateTEDSAIAccelChanRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { + terminal_config = static_cast(request->terminal_config_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIAccelChanRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateTEDSAIThrmstrChanIex(::grpc::ServerContext* context, const CreateTEDSAIThrmstrChanIexRequest* request, CreateTEDSAIThrmstrChanIexResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIThrmstrChanIexRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIAccelChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateTEDSAIAccelChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIAccelChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateTEDSAIThrmstrChanIexRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; + + int32 current_excit_source; + switch (request->current_excit_source_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIAccelChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSource: { + current_excit_source = static_cast(request->current_excit_source()); + break; + } + case nidaqmx_grpc::CreateTEDSAIAccelChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSourceRaw: { + current_excit_source = static_cast(request->current_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIAccelChanRequest::CurrentExcitSourceEnumCase::CURRENT_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for current_excit_source was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateTEDSAIThrmstrChanIexRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + + float64 current_excit_val = request->current_excit_val(); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateTEDSAIAccelChan(task, physical_channel, name_to_assign_to_channel, terminal_config, min_val, max_val, units, current_excit_source, current_excit_val, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - int32 resistance_config; - switch (request->resistance_config_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIThrmstrChanIexRequest::ResistanceConfigEnumCase::kResistanceConfig: { - resistance_config = static_cast(request->resistance_config()); - break; + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateTEDSAIBridgeChan(::grpc::ServerContext* context, const CreateTEDSAIBridgeChanRequest* request, CreateTEDSAIBridgeChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIBridgeChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateTEDSAIBridgeChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIBridgeChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateTEDSAIThrmstrChanIexRequest::ResistanceConfigEnumCase::kResistanceConfigRaw: { - resistance_config = static_cast(request->resistance_config_raw()); - break; + + int32 voltage_excit_source; + switch (request->voltage_excit_source_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIBridgeChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { + voltage_excit_source = static_cast(request->voltage_excit_source()); + break; + } + case nidaqmx_grpc::CreateTEDSAIBridgeChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { + voltage_excit_source = static_cast(request->voltage_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIBridgeChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateTEDSAIThrmstrChanIexRequest::ResistanceConfigEnumCase::RESISTANCE_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for resistance_config was not specified or out of range"); - break; + + float64 voltage_excit_val = request->voltage_excit_val(); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateTEDSAIBridgeChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, voltage_excit_source, voltage_excit_val, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - int32 current_excit_source; - switch (request->current_excit_source_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIThrmstrChanIexRequest::CurrentExcitSourceEnumCase::kCurrentExcitSource: { - current_excit_source = static_cast(request->current_excit_source()); - break; + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateTEDSAICurrentChan(::grpc::ServerContext* context, const CreateTEDSAICurrentChanRequest* request, CreateTEDSAICurrentChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + int32 terminal_config; + switch (request->terminal_config_enum_case()) { + case nidaqmx_grpc::CreateTEDSAICurrentChanRequest::TerminalConfigEnumCase::kTerminalConfig: { + terminal_config = static_cast(request->terminal_config()); + break; + } + case nidaqmx_grpc::CreateTEDSAICurrentChanRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { + terminal_config = static_cast(request->terminal_config_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAICurrentChanRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateTEDSAIThrmstrChanIexRequest::CurrentExcitSourceEnumCase::kCurrentExcitSourceRaw: { - current_excit_source = static_cast(request->current_excit_source_raw()); - break; + + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateTEDSAICurrentChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateTEDSAICurrentChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAICurrentChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateTEDSAIThrmstrChanIexRequest::CurrentExcitSourceEnumCase::CURRENT_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for current_excit_source was not specified or out of range"); - break; + + int32 shunt_resistor_loc; + switch (request->shunt_resistor_loc_enum_case()) { + case nidaqmx_grpc::CreateTEDSAICurrentChanRequest::ShuntResistorLocEnumCase::kShuntResistorLoc: { + shunt_resistor_loc = static_cast(request->shunt_resistor_loc()); + break; + } + case nidaqmx_grpc::CreateTEDSAICurrentChanRequest::ShuntResistorLocEnumCase::kShuntResistorLocRaw: { + shunt_resistor_loc = static_cast(request->shunt_resistor_loc_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAICurrentChanRequest::ShuntResistorLocEnumCase::SHUNT_RESISTOR_LOC_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for shunt_resistor_loc was not specified or out of range"); + break; + } } - } - float64 current_excit_val = request->current_excit_val(); - auto status = library_->CreateTEDSAIThrmstrChanIex(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, resistance_config, current_excit_source, current_excit_val); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + float64 ext_shunt_resistor_val = request->ext_shunt_resistor_val(); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateTEDSAICurrentChan(task, physical_channel, name_to_assign_to_channel, terminal_config, min_val, max_val, units, shunt_resistor_loc, ext_shunt_resistor_val, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateTEDSAIThrmstrChanVex(::grpc::ServerContext* context, const CreateTEDSAIThrmstrChanVexRequest* request, CreateTEDSAIThrmstrChanVexResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIThrmstrChanVexRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateTEDSAIForceBridgeChan(::grpc::ServerContext* context, const CreateTEDSAIForceBridgeChanRequest* request, CreateTEDSAIForceBridgeChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIForceBridgeChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateTEDSAIForceBridgeChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIForceBridgeChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateTEDSAIThrmstrChanVexRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; + + int32 voltage_excit_source; + switch (request->voltage_excit_source_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIForceBridgeChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { + voltage_excit_source = static_cast(request->voltage_excit_source()); + break; + } + case nidaqmx_grpc::CreateTEDSAIForceBridgeChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { + voltage_excit_source = static_cast(request->voltage_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIForceBridgeChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateTEDSAIThrmstrChanVexRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + + float64 voltage_excit_val = request->voltage_excit_val(); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateTEDSAIForceBridgeChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, voltage_excit_source, voltage_excit_val, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateTEDSAIForceIEPEChan(::grpc::ServerContext* context, const CreateTEDSAIForceIEPEChanRequest* request, CreateTEDSAIForceIEPEChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + int32 terminal_config; + switch (request->terminal_config_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIForceIEPEChanRequest::TerminalConfigEnumCase::kTerminalConfig: { + terminal_config = static_cast(request->terminal_config()); + break; + } + case nidaqmx_grpc::CreateTEDSAIForceIEPEChanRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { + terminal_config = static_cast(request->terminal_config_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIForceIEPEChanRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); + break; + } + } - int32 resistance_config; - switch (request->resistance_config_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIThrmstrChanVexRequest::ResistanceConfigEnumCase::kResistanceConfig: { - resistance_config = static_cast(request->resistance_config()); - break; + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIForceIEPEChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateTEDSAIForceIEPEChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIForceIEPEChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateTEDSAIThrmstrChanVexRequest::ResistanceConfigEnumCase::kResistanceConfigRaw: { - resistance_config = static_cast(request->resistance_config_raw()); - break; + + int32 current_excit_source; + switch (request->current_excit_source_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIForceIEPEChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSource: { + current_excit_source = static_cast(request->current_excit_source()); + break; + } + case nidaqmx_grpc::CreateTEDSAIForceIEPEChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSourceRaw: { + current_excit_source = static_cast(request->current_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIForceIEPEChanRequest::CurrentExcitSourceEnumCase::CURRENT_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for current_excit_source was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateTEDSAIThrmstrChanVexRequest::ResistanceConfigEnumCase::RESISTANCE_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for resistance_config was not specified or out of range"); - break; + + float64 current_excit_val = request->current_excit_val(); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateTEDSAIForceIEPEChan(task, physical_channel, name_to_assign_to_channel, terminal_config, min_val, max_val, units, current_excit_source, current_excit_val, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateTEDSAIMicrophoneChan(::grpc::ServerContext* context, const CreateTEDSAIMicrophoneChanRequest* request, CreateTEDSAIMicrophoneChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + int32 terminal_config; + switch (request->terminal_config_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIMicrophoneChanRequest::TerminalConfigEnumCase::kTerminalConfig: { + terminal_config = static_cast(request->terminal_config()); + break; + } + case nidaqmx_grpc::CreateTEDSAIMicrophoneChanRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { + terminal_config = static_cast(request->terminal_config_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIMicrophoneChanRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); + break; + } + } - int32 voltage_excit_source; - switch (request->voltage_excit_source_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIThrmstrChanVexRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { - voltage_excit_source = static_cast(request->voltage_excit_source()); - break; + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIMicrophoneChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateTEDSAIMicrophoneChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIMicrophoneChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateTEDSAIThrmstrChanVexRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { - voltage_excit_source = static_cast(request->voltage_excit_source_raw()); - break; + + float64 max_snd_press_level = request->max_snd_press_level(); + int32 current_excit_source; + switch (request->current_excit_source_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIMicrophoneChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSource: { + current_excit_source = static_cast(request->current_excit_source()); + break; + } + case nidaqmx_grpc::CreateTEDSAIMicrophoneChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSourceRaw: { + current_excit_source = static_cast(request->current_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIMicrophoneChanRequest::CurrentExcitSourceEnumCase::CURRENT_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for current_excit_source was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateTEDSAIThrmstrChanVexRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); - break; + + float64 current_excit_val = request->current_excit_val(); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateTEDSAIMicrophoneChan(task, physical_channel, name_to_assign_to_channel, terminal_config, units, max_snd_press_level, current_excit_source, current_excit_val, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateTEDSAIPosLVDTChan(::grpc::ServerContext* context, const CreateTEDSAIPosLVDTChanRequest* request, CreateTEDSAIPosLVDTChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIPosLVDTChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateTEDSAIPosLVDTChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIPosLVDTChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } + } - float64 voltage_excit_val = request->voltage_excit_val(); - float64 r1 = request->r1(); - auto status = library_->CreateTEDSAIThrmstrChanVex(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, resistance_config, voltage_excit_source, voltage_excit_val, r1); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateTEDSAITorqueBridgeChan(::grpc::ServerContext* context, const CreateTEDSAITorqueBridgeChanRequest* request, CreateTEDSAITorqueBridgeChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateTEDSAITorqueBridgeChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; - } - case nidaqmx_grpc::CreateTEDSAITorqueBridgeChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; - } - case nidaqmx_grpc::CreateTEDSAITorqueBridgeChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; - } - } - - int32 voltage_excit_source; - switch (request->voltage_excit_source_enum_case()) { - case nidaqmx_grpc::CreateTEDSAITorqueBridgeChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { - voltage_excit_source = static_cast(request->voltage_excit_source()); - break; - } - case nidaqmx_grpc::CreateTEDSAITorqueBridgeChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { - voltage_excit_source = static_cast(request->voltage_excit_source_raw()); - break; - } - case nidaqmx_grpc::CreateTEDSAITorqueBridgeChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); - break; - } - } - - float64 voltage_excit_val = request->voltage_excit_val(); - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateTEDSAITorqueBridgeChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, voltage_excit_source, voltage_excit_val, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateTEDSAIVoltageChan(::grpc::ServerContext* context, const CreateTEDSAIVoltageChanRequest* request, CreateTEDSAIVoltageChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - int32 terminal_config; - switch (request->terminal_config_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIVoltageChanRequest::TerminalConfigEnumCase::kTerminalConfig: { - terminal_config = static_cast(request->terminal_config()); - break; + int32 voltage_excit_source; + switch (request->voltage_excit_source_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIPosLVDTChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { + voltage_excit_source = static_cast(request->voltage_excit_source()); + break; + } + case nidaqmx_grpc::CreateTEDSAIPosLVDTChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { + voltage_excit_source = static_cast(request->voltage_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIPosLVDTChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateTEDSAIVoltageChanRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { - terminal_config = static_cast(request->terminal_config_raw()); - break; + + float64 voltage_excit_val = request->voltage_excit_val(); + float64 voltage_excit_freq = request->voltage_excit_freq(); + int32 ac_excit_wire_mode; + switch (request->ac_excit_wire_mode_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIPosLVDTChanRequest::AcExcitWireModeEnumCase::kAcExcitWireMode: { + ac_excit_wire_mode = static_cast(request->ac_excit_wire_mode()); + break; + } + case nidaqmx_grpc::CreateTEDSAIPosLVDTChanRequest::AcExcitWireModeEnumCase::kAcExcitWireModeRaw: { + ac_excit_wire_mode = static_cast(request->ac_excit_wire_mode_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIPosLVDTChanRequest::AcExcitWireModeEnumCase::AC_EXCIT_WIRE_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for ac_excit_wire_mode was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateTEDSAIVoltageChanRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); - break; + + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateTEDSAIPosLVDTChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, voltage_excit_source, voltage_excit_val, voltage_excit_freq, ac_excit_wire_mode, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateTEDSAIPosRVDTChan(::grpc::ServerContext* context, const CreateTEDSAIPosRVDTChanRequest* request, CreateTEDSAIPosRVDTChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIPosRVDTChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateTEDSAIPosRVDTChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIPosRVDTChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } + } - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIVoltageChanRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; + int32 voltage_excit_source; + switch (request->voltage_excit_source_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIPosRVDTChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { + voltage_excit_source = static_cast(request->voltage_excit_source()); + break; + } + case nidaqmx_grpc::CreateTEDSAIPosRVDTChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { + voltage_excit_source = static_cast(request->voltage_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIPosRVDTChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateTEDSAIVoltageChanRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; + + float64 voltage_excit_val = request->voltage_excit_val(); + float64 voltage_excit_freq = request->voltage_excit_freq(); + int32 ac_excit_wire_mode; + switch (request->ac_excit_wire_mode_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIPosRVDTChanRequest::AcExcitWireModeEnumCase::kAcExcitWireMode: { + ac_excit_wire_mode = static_cast(request->ac_excit_wire_mode()); + break; + } + case nidaqmx_grpc::CreateTEDSAIPosRVDTChanRequest::AcExcitWireModeEnumCase::kAcExcitWireModeRaw: { + ac_excit_wire_mode = static_cast(request->ac_excit_wire_mode_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIPosRVDTChanRequest::AcExcitWireModeEnumCase::AC_EXCIT_WIRE_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for ac_excit_wire_mode was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateTEDSAIVoltageChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateTEDSAIPosRVDTChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, voltage_excit_source, voltage_excit_val, voltage_excit_freq, ac_excit_wire_mode, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateTEDSAIPressureBridgeChan(::grpc::ServerContext* context, const CreateTEDSAIPressureBridgeChanRequest* request, CreateTEDSAIPressureBridgeChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIPressureBridgeChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateTEDSAIPressureBridgeChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIPressureBridgeChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } + } + + int32 voltage_excit_source; + switch (request->voltage_excit_source_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIPressureBridgeChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { + voltage_excit_source = static_cast(request->voltage_excit_source()); + break; + } + case nidaqmx_grpc::CreateTEDSAIPressureBridgeChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { + voltage_excit_source = static_cast(request->voltage_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIPressureBridgeChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); + break; + } + } - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateTEDSAIVoltageChan(task, physical_channel, name_to_assign_to_channel, terminal_config, min_val, max_val, units, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + float64 voltage_excit_val = request->voltage_excit_val(); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateTEDSAIPressureBridgeChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, voltage_excit_source, voltage_excit_val, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateTEDSAIRTDChan(::grpc::ServerContext* context, const CreateTEDSAIRTDChanRequest* request, CreateTEDSAIRTDChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIRTDChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateTEDSAIRTDChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIRTDChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateTEDSAIVoltageChanWithExcit(::grpc::ServerContext* context, const CreateTEDSAIVoltageChanWithExcitRequest* request, CreateTEDSAIVoltageChanWithExcitResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); - auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); - int32 terminal_config; - switch (request->terminal_config_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIVoltageChanWithExcitRequest::TerminalConfigEnumCase::kTerminalConfig: { - terminal_config = static_cast(request->terminal_config()); - break; + int32 resistance_config; + switch (request->resistance_config_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIRTDChanRequest::ResistanceConfigEnumCase::kResistanceConfig: { + resistance_config = static_cast(request->resistance_config()); + break; + } + case nidaqmx_grpc::CreateTEDSAIRTDChanRequest::ResistanceConfigEnumCase::kResistanceConfigRaw: { + resistance_config = static_cast(request->resistance_config_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIRTDChanRequest::ResistanceConfigEnumCase::RESISTANCE_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for resistance_config was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateTEDSAIVoltageChanWithExcitRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { - terminal_config = static_cast(request->terminal_config_raw()); - break; + + int32 current_excit_source; + switch (request->current_excit_source_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIRTDChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSource: { + current_excit_source = static_cast(request->current_excit_source()); + break; + } + case nidaqmx_grpc::CreateTEDSAIRTDChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSourceRaw: { + current_excit_source = static_cast(request->current_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIRTDChanRequest::CurrentExcitSourceEnumCase::CURRENT_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for current_excit_source was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateTEDSAIVoltageChanWithExcitRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); - break; + + float64 current_excit_val = request->current_excit_val(); + auto status = library_->CreateTEDSAIRTDChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, resistance_config, current_excit_source, current_excit_val); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateTEDSAIResistanceChan(::grpc::ServerContext* context, const CreateTEDSAIResistanceChanRequest* request, CreateTEDSAIResistanceChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIResistanceChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateTEDSAIResistanceChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIResistanceChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } + } - float64 min_val = request->min_val(); - float64 max_val = request->max_val(); - int32 units; - switch (request->units_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIVoltageChanWithExcitRequest::UnitsEnumCase::kUnits: { - units = static_cast(request->units()); - break; + int32 resistance_config; + switch (request->resistance_config_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIResistanceChanRequest::ResistanceConfigEnumCase::kResistanceConfig: { + resistance_config = static_cast(request->resistance_config()); + break; + } + case nidaqmx_grpc::CreateTEDSAIResistanceChanRequest::ResistanceConfigEnumCase::kResistanceConfigRaw: { + resistance_config = static_cast(request->resistance_config_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIResistanceChanRequest::ResistanceConfigEnumCase::RESISTANCE_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for resistance_config was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateTEDSAIVoltageChanWithExcitRequest::UnitsEnumCase::kUnitsRaw: { - units = static_cast(request->units_raw()); - break; + + int32 current_excit_source; + switch (request->current_excit_source_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIResistanceChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSource: { + current_excit_source = static_cast(request->current_excit_source()); + break; + } + case nidaqmx_grpc::CreateTEDSAIResistanceChanRequest::CurrentExcitSourceEnumCase::kCurrentExcitSourceRaw: { + current_excit_source = static_cast(request->current_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIResistanceChanRequest::CurrentExcitSourceEnumCase::CURRENT_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for current_excit_source was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateTEDSAIVoltageChanWithExcitRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); - break; + + float64 current_excit_val = request->current_excit_val(); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateTEDSAIResistanceChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, resistance_config, current_excit_source, current_excit_val, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - int32 voltage_excit_source; - switch (request->voltage_excit_source_enum_case()) { - case nidaqmx_grpc::CreateTEDSAIVoltageChanWithExcitRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { - voltage_excit_source = static_cast(request->voltage_excit_source()); - break; + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateTEDSAIStrainGageChan(::grpc::ServerContext* context, const CreateTEDSAIStrainGageChanRequest* request, CreateTEDSAIStrainGageChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIStrainGageChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateTEDSAIStrainGageChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIStrainGageChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateTEDSAIVoltageChanWithExcitRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { - voltage_excit_source = static_cast(request->voltage_excit_source_raw()); - break; + + int32 voltage_excit_source; + switch (request->voltage_excit_source_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIStrainGageChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { + voltage_excit_source = static_cast(request->voltage_excit_source()); + break; + } + case nidaqmx_grpc::CreateTEDSAIStrainGageChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { + voltage_excit_source = static_cast(request->voltage_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIStrainGageChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); + break; + } } - case nidaqmx_grpc::CreateTEDSAIVoltageChanWithExcitRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); - break; + + float64 voltage_excit_val = request->voltage_excit_val(); + float64 initial_bridge_voltage = request->initial_bridge_voltage(); + float64 lead_wire_resistance = request->lead_wire_resistance(); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateTEDSAIStrainGageChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, voltage_excit_source, voltage_excit_val, initial_bridge_voltage, lead_wire_resistance, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateTEDSAIThrmcplChan(::grpc::ServerContext* context, const CreateTEDSAIThrmcplChanRequest* request, CreateTEDSAIThrmcplChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIThrmcplChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateTEDSAIThrmcplChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIThrmcplChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } + } + + int32 cjc_source; + switch (request->cjc_source_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIThrmcplChanRequest::CjcSourceEnumCase::kCjcSource: { + cjc_source = static_cast(request->cjc_source()); + break; + } + case nidaqmx_grpc::CreateTEDSAIThrmcplChanRequest::CjcSourceEnumCase::kCjcSourceRaw: { + cjc_source = static_cast(request->cjc_source_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIThrmcplChanRequest::CjcSourceEnumCase::CJC_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for cjc_source was not specified or out of range"); + break; + } + } - float64 voltage_excit_val = request->voltage_excit_val(); - auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); - auto custom_scale_name = custom_scale_name_mbcs.c_str(); - auto status = library_->CreateTEDSAIVoltageChanWithExcit(task, physical_channel, name_to_assign_to_channel, terminal_config, min_val, max_val, units, voltage_excit_source, voltage_excit_val, custom_scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + float64 cjc_val = request->cjc_val(); + auto cjc_channel_mbcs = convert_from_grpc(request->cjc_channel()); + auto cjc_channel = cjc_channel_mbcs.c_str(); + auto status = library_->CreateTEDSAIThrmcplChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, cjc_source, cjc_val, cjc_channel); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateTEDSAIThrmstrChanIex(::grpc::ServerContext* context, const CreateTEDSAIThrmstrChanIexRequest* request, CreateTEDSAIThrmstrChanIexResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIThrmstrChanIexRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateTEDSAIThrmstrChanIexRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIThrmstrChanIexRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateTableScale(::grpc::ServerContext* context, const CreateTableScaleRequest* request, CreateTableScaleResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto name_mbcs = convert_from_grpc(request->name()); - auto name = name_mbcs.c_str(); - auto prescaled_vals = const_cast(request->prescaled_vals().data()); - uInt32 num_prescaled_vals_in = static_cast(request->prescaled_vals().size()); - auto scaled_vals = const_cast(request->scaled_vals().data()); - uInt32 num_scaled_vals_in = static_cast(request->scaled_vals().size()); - int32 pre_scaled_units; - switch (request->pre_scaled_units_enum_case()) { - case nidaqmx_grpc::CreateTableScaleRequest::PreScaledUnitsEnumCase::kPreScaledUnits: { - pre_scaled_units = static_cast(request->pre_scaled_units()); - break; - } - case nidaqmx_grpc::CreateTableScaleRequest::PreScaledUnitsEnumCase::kPreScaledUnitsRaw: { - pre_scaled_units = static_cast(request->pre_scaled_units_raw()); - break; - } - case nidaqmx_grpc::CreateTableScaleRequest::PreScaledUnitsEnumCase::PRE_SCALED_UNITS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for pre_scaled_units was not specified or out of range"); - break; - } - } - - auto scaled_units_mbcs = convert_from_grpc(request->scaled_units()); - auto scaled_units = scaled_units_mbcs.c_str(); - auto status = library_->CreateTableScale(name, prescaled_vals, num_prescaled_vals_in, scaled_vals, num_scaled_vals_in, pre_scaled_units, scaled_units); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + int32 resistance_config; + switch (request->resistance_config_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIThrmstrChanIexRequest::ResistanceConfigEnumCase::kResistanceConfig: { + resistance_config = static_cast(request->resistance_config()); + break; + } + case nidaqmx_grpc::CreateTEDSAIThrmstrChanIexRequest::ResistanceConfigEnumCase::kResistanceConfigRaw: { + resistance_config = static_cast(request->resistance_config_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIThrmstrChanIexRequest::ResistanceConfigEnumCase::RESISTANCE_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for resistance_config was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateTask(::grpc::ServerContext* context, const CreateTaskRequest* request, CreateTaskResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_name_mbcs = convert_from_grpc(request->session_name()); - auto session_name = session_name_mbcs.c_str(); - auto initialization_behavior = request->initialization_behavior(); - - bool new_session_initialized{}; - auto init_lambda = [&]() { - TaskHandle task; - auto status = library_->CreateTask(session_name, &task); - return std::make_tuple(status, task); - }; - std::string grpc_device_session_name = request->session_name(); - // Capture the library shared_ptr by value. Do not capture `this` or any references. - LibrarySharedPtr library = library_; - auto cleanup_lambda = [library](TaskHandle id) { library->ClearTask(id); }; - int status = session_repository_->add_session(grpc_device_session_name, init_lambda, cleanup_lambda, initialization_behavior, &new_session_initialized); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - response->mutable_task()->set_name(grpc_device_session_name); - response->set_new_session_initialized(new_session_initialized); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + int32 current_excit_source; + switch (request->current_excit_source_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIThrmstrChanIexRequest::CurrentExcitSourceEnumCase::kCurrentExcitSource: { + current_excit_source = static_cast(request->current_excit_source()); + break; + } + case nidaqmx_grpc::CreateTEDSAIThrmstrChanIexRequest::CurrentExcitSourceEnumCase::kCurrentExcitSourceRaw: { + current_excit_source = static_cast(request->current_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIThrmstrChanIexRequest::CurrentExcitSourceEnumCase::CURRENT_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for current_excit_source was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateWatchdogTimerTask(::grpc::ServerContext* context, const CreateWatchdogTimerTaskRequest* request, CreateWatchdogTimerTaskResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - auto session_name_mbcs = convert_from_grpc(request->session_name()); - auto session_name = session_name_mbcs.c_str(); - float64 timeout = request->timeout(); - auto get_lines_if = [](const google::protobuf::RepeatedPtrField& vector, int n) -> const char* { - if (vector.size() > n) { - return vector[n].lines().c_str(); - } - return nullptr; - }; - auto get_expState_if = [](const google::protobuf::RepeatedPtrField& vector, int n) -> int32 { - if (vector.size() > n) { - return vector[n].exp_state(); + float64 current_excit_val = request->current_excit_val(); + auto status = library_->CreateTEDSAIThrmstrChanIex(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, resistance_config, current_excit_source, current_excit_val); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - return 0; - }; - auto exp_states = request->exp_states(); - if (exp_states.size() == 0) { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "No values for expStates were specified"); - } - if (exp_states.size() > 96) { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "More than 96 values for expStates were specified"); + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateTEDSAIThrmstrChanVex(::grpc::ServerContext* context, const CreateTEDSAIThrmstrChanVexRequest* request, CreateTEDSAIThrmstrChanVexResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIThrmstrChanVexRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateTEDSAIThrmstrChanVexRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIThrmstrChanVexRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } + } - auto initialization_behavior = request->initialization_behavior(); - - bool new_session_initialized{}; - auto init_lambda = [&]() { - TaskHandle task; - auto status = std::static_pointer_cast(library_)->CreateWatchdogTimerTask(device_name, session_name, &task, timeout, get_lines_if(exp_states, 0), get_expState_if(exp_states, 0), get_lines_if(exp_states, 1), get_expState_if(exp_states, 1), get_lines_if(exp_states, 2), get_expState_if(exp_states, 2), get_lines_if(exp_states, 3), get_expState_if(exp_states, 3), get_lines_if(exp_states, 4), get_expState_if(exp_states, 4), get_lines_if(exp_states, 5), get_expState_if(exp_states, 5), get_lines_if(exp_states, 6), get_expState_if(exp_states, 6), get_lines_if(exp_states, 7), get_expState_if(exp_states, 7), get_lines_if(exp_states, 8), get_expState_if(exp_states, 8), get_lines_if(exp_states, 9), get_expState_if(exp_states, 9), get_lines_if(exp_states, 10), get_expState_if(exp_states, 10), get_lines_if(exp_states, 11), get_expState_if(exp_states, 11), get_lines_if(exp_states, 12), get_expState_if(exp_states, 12), get_lines_if(exp_states, 13), get_expState_if(exp_states, 13), get_lines_if(exp_states, 14), get_expState_if(exp_states, 14), get_lines_if(exp_states, 15), get_expState_if(exp_states, 15), get_lines_if(exp_states, 16), get_expState_if(exp_states, 16), get_lines_if(exp_states, 17), get_expState_if(exp_states, 17), get_lines_if(exp_states, 18), get_expState_if(exp_states, 18), get_lines_if(exp_states, 19), get_expState_if(exp_states, 19), get_lines_if(exp_states, 20), get_expState_if(exp_states, 20), get_lines_if(exp_states, 21), get_expState_if(exp_states, 21), get_lines_if(exp_states, 22), get_expState_if(exp_states, 22), get_lines_if(exp_states, 23), get_expState_if(exp_states, 23), get_lines_if(exp_states, 24), get_expState_if(exp_states, 24), get_lines_if(exp_states, 25), get_expState_if(exp_states, 25), get_lines_if(exp_states, 26), get_expState_if(exp_states, 26), get_lines_if(exp_states, 27), get_expState_if(exp_states, 27), get_lines_if(exp_states, 28), get_expState_if(exp_states, 28), get_lines_if(exp_states, 29), get_expState_if(exp_states, 29), get_lines_if(exp_states, 30), get_expState_if(exp_states, 30), get_lines_if(exp_states, 31), get_expState_if(exp_states, 31), get_lines_if(exp_states, 32), get_expState_if(exp_states, 32), get_lines_if(exp_states, 33), get_expState_if(exp_states, 33), get_lines_if(exp_states, 34), get_expState_if(exp_states, 34), get_lines_if(exp_states, 35), get_expState_if(exp_states, 35), get_lines_if(exp_states, 36), get_expState_if(exp_states, 36), get_lines_if(exp_states, 37), get_expState_if(exp_states, 37), get_lines_if(exp_states, 38), get_expState_if(exp_states, 38), get_lines_if(exp_states, 39), get_expState_if(exp_states, 39), get_lines_if(exp_states, 40), get_expState_if(exp_states, 40), get_lines_if(exp_states, 41), get_expState_if(exp_states, 41), get_lines_if(exp_states, 42), get_expState_if(exp_states, 42), get_lines_if(exp_states, 43), get_expState_if(exp_states, 43), get_lines_if(exp_states, 44), get_expState_if(exp_states, 44), get_lines_if(exp_states, 45), get_expState_if(exp_states, 45), get_lines_if(exp_states, 46), get_expState_if(exp_states, 46), get_lines_if(exp_states, 47), get_expState_if(exp_states, 47), get_lines_if(exp_states, 48), get_expState_if(exp_states, 48), get_lines_if(exp_states, 49), get_expState_if(exp_states, 49), get_lines_if(exp_states, 50), get_expState_if(exp_states, 50), get_lines_if(exp_states, 51), get_expState_if(exp_states, 51), get_lines_if(exp_states, 52), get_expState_if(exp_states, 52), get_lines_if(exp_states, 53), get_expState_if(exp_states, 53), get_lines_if(exp_states, 54), get_expState_if(exp_states, 54), get_lines_if(exp_states, 55), get_expState_if(exp_states, 55), get_lines_if(exp_states, 56), get_expState_if(exp_states, 56), get_lines_if(exp_states, 57), get_expState_if(exp_states, 57), get_lines_if(exp_states, 58), get_expState_if(exp_states, 58), get_lines_if(exp_states, 59), get_expState_if(exp_states, 59), get_lines_if(exp_states, 60), get_expState_if(exp_states, 60), get_lines_if(exp_states, 61), get_expState_if(exp_states, 61), get_lines_if(exp_states, 62), get_expState_if(exp_states, 62), get_lines_if(exp_states, 63), get_expState_if(exp_states, 63), get_lines_if(exp_states, 64), get_expState_if(exp_states, 64), get_lines_if(exp_states, 65), get_expState_if(exp_states, 65), get_lines_if(exp_states, 66), get_expState_if(exp_states, 66), get_lines_if(exp_states, 67), get_expState_if(exp_states, 67), get_lines_if(exp_states, 68), get_expState_if(exp_states, 68), get_lines_if(exp_states, 69), get_expState_if(exp_states, 69), get_lines_if(exp_states, 70), get_expState_if(exp_states, 70), get_lines_if(exp_states, 71), get_expState_if(exp_states, 71), get_lines_if(exp_states, 72), get_expState_if(exp_states, 72), get_lines_if(exp_states, 73), get_expState_if(exp_states, 73), get_lines_if(exp_states, 74), get_expState_if(exp_states, 74), get_lines_if(exp_states, 75), get_expState_if(exp_states, 75), get_lines_if(exp_states, 76), get_expState_if(exp_states, 76), get_lines_if(exp_states, 77), get_expState_if(exp_states, 77), get_lines_if(exp_states, 78), get_expState_if(exp_states, 78), get_lines_if(exp_states, 79), get_expState_if(exp_states, 79), get_lines_if(exp_states, 80), get_expState_if(exp_states, 80), get_lines_if(exp_states, 81), get_expState_if(exp_states, 81), get_lines_if(exp_states, 82), get_expState_if(exp_states, 82), get_lines_if(exp_states, 83), get_expState_if(exp_states, 83), get_lines_if(exp_states, 84), get_expState_if(exp_states, 84), get_lines_if(exp_states, 85), get_expState_if(exp_states, 85), get_lines_if(exp_states, 86), get_expState_if(exp_states, 86), get_lines_if(exp_states, 87), get_expState_if(exp_states, 87), get_lines_if(exp_states, 88), get_expState_if(exp_states, 88), get_lines_if(exp_states, 89), get_expState_if(exp_states, 89), get_lines_if(exp_states, 90), get_expState_if(exp_states, 90), get_lines_if(exp_states, 91), get_expState_if(exp_states, 91), get_lines_if(exp_states, 92), get_expState_if(exp_states, 92), get_lines_if(exp_states, 93), get_expState_if(exp_states, 93), get_lines_if(exp_states, 94), get_expState_if(exp_states, 94), get_lines_if(exp_states, 95), get_expState_if(exp_states, 95), get_lines_if(exp_states, 96), get_expState_if(exp_states, 96)); - return std::make_tuple(status, task); - }; - std::string grpc_device_session_name = request->session_name(); - // Capture the library shared_ptr by value. Do not capture `this` or any references. - LibrarySharedPtr library = library_; - auto cleanup_lambda = [library](TaskHandle id) { library->ClearTask(id); }; - int status = session_repository_->add_session(grpc_device_session_name, init_lambda, cleanup_lambda, initialization_behavior, &new_session_initialized); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - response->mutable_task()->set_name(grpc_device_session_name); - response->set_new_session_initialized(new_session_initialized); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + int32 resistance_config; + switch (request->resistance_config_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIThrmstrChanVexRequest::ResistanceConfigEnumCase::kResistanceConfig: { + resistance_config = static_cast(request->resistance_config()); + break; + } + case nidaqmx_grpc::CreateTEDSAIThrmstrChanVexRequest::ResistanceConfigEnumCase::kResistanceConfigRaw: { + resistance_config = static_cast(request->resistance_config_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIThrmstrChanVexRequest::ResistanceConfigEnumCase::RESISTANCE_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for resistance_config was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::CreateWatchdogTimerTaskEx(::grpc::ServerContext* context, const CreateWatchdogTimerTaskExRequest* request, CreateWatchdogTimerTaskExResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - auto session_name_mbcs = convert_from_grpc(request->session_name()); - auto session_name = session_name_mbcs.c_str(); - float64 timeout = request->timeout(); - auto initialization_behavior = request->initialization_behavior(); - - bool new_session_initialized{}; - auto init_lambda = [&]() { - TaskHandle task; - auto status = library_->CreateWatchdogTimerTaskEx(device_name, session_name, &task, timeout); - return std::make_tuple(status, task); - }; - std::string grpc_device_session_name = request->session_name(); - // Capture the library shared_ptr by value. Do not capture `this` or any references. - LibrarySharedPtr library = library_; - auto cleanup_lambda = [library](TaskHandle id) { library->ClearTask(id); }; - int status = session_repository_->add_session(grpc_device_session_name, init_lambda, cleanup_lambda, initialization_behavior, &new_session_initialized); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - response->mutable_task()->set_name(grpc_device_session_name); - response->set_new_session_initialized(new_session_initialized); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + int32 voltage_excit_source; + switch (request->voltage_excit_source_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIThrmstrChanVexRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { + voltage_excit_source = static_cast(request->voltage_excit_source()); + break; + } + case nidaqmx_grpc::CreateTEDSAIThrmstrChanVexRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { + voltage_excit_source = static_cast(request->voltage_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIThrmstrChanVexRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::DeleteNetworkDevice(::grpc::ServerContext* context, const DeleteNetworkDeviceRequest* request, DeleteNetworkDeviceResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - auto status = library_->DeleteNetworkDevice(device_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + float64 voltage_excit_val = request->voltage_excit_val(); + float64 r1 = request->r1(); + auto status = library_->CreateTEDSAIThrmstrChanVex(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, resistance_config, voltage_excit_source, voltage_excit_val, r1); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateTEDSAITorqueBridgeChan(::grpc::ServerContext* context, const CreateTEDSAITorqueBridgeChanRequest* request, CreateTEDSAITorqueBridgeChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateTEDSAITorqueBridgeChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateTEDSAITorqueBridgeChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAITorqueBridgeChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::DeleteSavedGlobalChan(::grpc::ServerContext* context, const DeleteSavedGlobalChanRequest* request, DeleteSavedGlobalChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto channel_name_mbcs = convert_from_grpc(request->channel_name()); - auto channel_name = channel_name_mbcs.c_str(); - auto status = library_->DeleteSavedGlobalChan(channel_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + int32 voltage_excit_source; + switch (request->voltage_excit_source_enum_case()) { + case nidaqmx_grpc::CreateTEDSAITorqueBridgeChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { + voltage_excit_source = static_cast(request->voltage_excit_source()); + break; + } + case nidaqmx_grpc::CreateTEDSAITorqueBridgeChanRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { + voltage_excit_source = static_cast(request->voltage_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAITorqueBridgeChanRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::DeleteSavedScale(::grpc::ServerContext* context, const DeleteSavedScaleRequest* request, DeleteSavedScaleResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto scale_name_mbcs = convert_from_grpc(request->scale_name()); - auto scale_name = scale_name_mbcs.c_str(); - auto status = library_->DeleteSavedScale(scale_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + float64 voltage_excit_val = request->voltage_excit_val(); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateTEDSAITorqueBridgeChan(task, physical_channel, name_to_assign_to_channel, min_val, max_val, units, voltage_excit_source, voltage_excit_val, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateTEDSAIVoltageChan(::grpc::ServerContext* context, const CreateTEDSAIVoltageChanRequest* request, CreateTEDSAIVoltageChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + int32 terminal_config; + switch (request->terminal_config_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIVoltageChanRequest::TerminalConfigEnumCase::kTerminalConfig: { + terminal_config = static_cast(request->terminal_config()); + break; + } + case nidaqmx_grpc::CreateTEDSAIVoltageChanRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { + terminal_config = static_cast(request->terminal_config_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIVoltageChanRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::DeleteSavedTask(::grpc::ServerContext* context, const DeleteSavedTaskRequest* request, DeleteSavedTaskResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_name_mbcs = convert_from_grpc(request->task_name()); - auto task_name = task_name_mbcs.c_str(); - auto status = library_->DeleteSavedTask(task_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIVoltageChanRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateTEDSAIVoltageChanRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIVoltageChanRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::DeviceSupportsCal(::grpc::ServerContext* context, const DeviceSupportsCalRequest* request, DeviceSupportsCalResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - bool32 cal_supported{}; - auto status = library_->DeviceSupportsCal(device_name, &cal_supported); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - response->set_cal_supported(cal_supported); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::DisableRefTrig(::grpc::ServerContext* context, const DisableRefTrigRequest* request, DisableRefTrigResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto status = library_->DisableRefTrig(task); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateTEDSAIVoltageChan(task, physical_channel, name_to_assign_to_channel, terminal_config, min_val, max_val, units, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateTEDSAIVoltageChanWithExcit(::grpc::ServerContext* context, const CreateTEDSAIVoltageChanWithExcitRequest* request, CreateTEDSAIVoltageChanWithExcitResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto name_to_assign_to_channel_mbcs = convert_from_grpc(request->name_to_assign_to_channel()); + auto name_to_assign_to_channel = name_to_assign_to_channel_mbcs.c_str(); + int32 terminal_config; + switch (request->terminal_config_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIVoltageChanWithExcitRequest::TerminalConfigEnumCase::kTerminalConfig: { + terminal_config = static_cast(request->terminal_config()); + break; + } + case nidaqmx_grpc::CreateTEDSAIVoltageChanWithExcitRequest::TerminalConfigEnumCase::kTerminalConfigRaw: { + terminal_config = static_cast(request->terminal_config_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIVoltageChanWithExcitRequest::TerminalConfigEnumCase::TERMINAL_CONFIG_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for terminal_config was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::DisableStartTrig(::grpc::ServerContext* context, const DisableStartTrigRequest* request, DisableStartTrigResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto status = library_->DisableStartTrig(task); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + float64 min_val = request->min_val(); + float64 max_val = request->max_val(); + int32 units; + switch (request->units_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIVoltageChanWithExcitRequest::UnitsEnumCase::kUnits: { + units = static_cast(request->units()); + break; + } + case nidaqmx_grpc::CreateTEDSAIVoltageChanWithExcitRequest::UnitsEnumCase::kUnitsRaw: { + units = static_cast(request->units_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIVoltageChanWithExcitRequest::UnitsEnumCase::UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for units was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::DisconnectTerms(::grpc::ServerContext* context, const DisconnectTermsRequest* request, DisconnectTermsResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto source_terminal_mbcs = convert_from_grpc(request->source_terminal()); - auto source_terminal = source_terminal_mbcs.c_str(); - auto destination_terminal_mbcs = convert_from_grpc(request->destination_terminal()); - auto destination_terminal = destination_terminal_mbcs.c_str(); - auto status = library_->DisconnectTerms(source_terminal, destination_terminal); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + int32 voltage_excit_source; + switch (request->voltage_excit_source_enum_case()) { + case nidaqmx_grpc::CreateTEDSAIVoltageChanWithExcitRequest::VoltageExcitSourceEnumCase::kVoltageExcitSource: { + voltage_excit_source = static_cast(request->voltage_excit_source()); + break; + } + case nidaqmx_grpc::CreateTEDSAIVoltageChanWithExcitRequest::VoltageExcitSourceEnumCase::kVoltageExcitSourceRaw: { + voltage_excit_source = static_cast(request->voltage_excit_source_raw()); + break; + } + case nidaqmx_grpc::CreateTEDSAIVoltageChanWithExcitRequest::VoltageExcitSourceEnumCase::VOLTAGE_EXCIT_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for voltage_excit_source was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ExportSignal(::grpc::ServerContext* context, const ExportSignalRequest* request, ExportSignalResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 signal_id; - switch (request->signal_id_enum_case()) { - case nidaqmx_grpc::ExportSignalRequest::SignalIdEnumCase::kSignalId: { - signal_id = static_cast(request->signal_id()); - break; + float64 voltage_excit_val = request->voltage_excit_val(); + auto custom_scale_name_mbcs = convert_from_grpc(request->custom_scale_name()); + auto custom_scale_name = custom_scale_name_mbcs.c_str(); + auto status = library_->CreateTEDSAIVoltageChanWithExcit(task, physical_channel, name_to_assign_to_channel, terminal_config, min_val, max_val, units, voltage_excit_source, voltage_excit_val, custom_scale_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - case nidaqmx_grpc::ExportSignalRequest::SignalIdEnumCase::kSignalIdRaw: { - signal_id = static_cast(request->signal_id_raw()); - break; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateTableScale(::grpc::ServerContext* context, const CreateTableScaleRequest* request, CreateTableScaleResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto name_mbcs = convert_from_grpc(request->name()); + auto name = name_mbcs.c_str(); + auto prescaled_vals = const_cast(request->prescaled_vals().data()); + uInt32 num_prescaled_vals_in = static_cast(request->prescaled_vals().size()); + auto scaled_vals = const_cast(request->scaled_vals().data()); + uInt32 num_scaled_vals_in = static_cast(request->scaled_vals().size()); + int32 pre_scaled_units; + switch (request->pre_scaled_units_enum_case()) { + case nidaqmx_grpc::CreateTableScaleRequest::PreScaledUnitsEnumCase::kPreScaledUnits: { + pre_scaled_units = static_cast(request->pre_scaled_units()); + break; + } + case nidaqmx_grpc::CreateTableScaleRequest::PreScaledUnitsEnumCase::kPreScaledUnitsRaw: { + pre_scaled_units = static_cast(request->pre_scaled_units_raw()); + break; + } + case nidaqmx_grpc::CreateTableScaleRequest::PreScaledUnitsEnumCase::PRE_SCALED_UNITS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for pre_scaled_units was not specified or out of range"); + break; + } } - case nidaqmx_grpc::ExportSignalRequest::SignalIdEnumCase::SIGNAL_ID_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for signal_id was not specified or out of range"); - break; + + auto scaled_units_mbcs = convert_from_grpc(request->scaled_units()); + auto scaled_units = scaled_units_mbcs.c_str(); + auto status = library_->CreateTableScale(name, prescaled_vals, num_prescaled_vals_in, scaled_vals, num_scaled_vals_in, pre_scaled_units, scaled_units); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } + response->set_status(status); + return ::grpc::Status::OK; } - - auto output_terminal_mbcs = convert_from_grpc(request->output_terminal()); - auto output_terminal = output_terminal_mbcs.c_str(); - auto status = library_->ExportSignal(task, signal_id, output_terminal); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetAIChanCalCalDate(::grpc::ServerContext* context, const GetAIChanCalCalDateRequest* request, GetAIChanCalCalDateResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto channel_name_mbcs = convert_from_grpc(request->channel_name()); - auto channel_name = channel_name_mbcs.c_str(); - uInt32 year{}; - uInt32 month{}; - uInt32 day{}; - uInt32 hour{}; - uInt32 minute{}; - auto status = library_->GetAIChanCalCalDate(task, channel_name, &year, &month, &day, &hour, &minute); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_year(year); - response->set_month(month); - response->set_day(day); - response->set_hour(hour); - response->set_minute(minute); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetAIChanCalExpDate(::grpc::ServerContext* context, const GetAIChanCalExpDateRequest* request, GetAIChanCalExpDateResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto channel_name_mbcs = convert_from_grpc(request->channel_name()); - auto channel_name = channel_name_mbcs.c_str(); - uInt32 year{}; - uInt32 month{}; - uInt32 day{}; - uInt32 hour{}; - uInt32 minute{}; - auto status = library_->GetAIChanCalExpDate(task, channel_name, &year, &month, &day, &hour, &minute); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_year(year); - response->set_month(month); - response->set_day(day); - response->set_hour(hour); - response->set_minute(minute); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateTask(::grpc::ServerContext* context, const CreateTaskRequest* request, CreateTaskResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_name_mbcs = convert_from_grpc(request->session_name()); + auto session_name = session_name_mbcs.c_str(); + auto initialization_behavior = request->initialization_behavior(); -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetAnalogPowerUpStates(::grpc::ServerContext* context, const GetAnalogPowerUpStatesRequest* request, GetAnalogPowerUpStatesResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - auto get_channelName_if = [](const google::protobuf::RepeatedPtrField& vector, int n) -> const char* { - if (vector.size() > n) { - return vector[n].channel_name().c_str(); - } - return nullptr; - }; - auto get_channelType_if = [](const google::protobuf::RepeatedPtrField& vector, int n) -> int32 { - if (vector.size() > n) { - return vector[n].channel_type(); + bool new_session_initialized {}; + auto init_lambda = [&] () { + TaskHandle task; + auto status = library_->CreateTask(session_name, &task); + return std::make_tuple(status, task); + }; + std::string grpc_device_session_name = request->session_name(); + // Capture the library shared_ptr by value. Do not capture `this` or any references. + LibrarySharedPtr library = library_; + auto cleanup_lambda = [library] (TaskHandle id) { library->ClearTask(id); }; + int status = session_repository_->add_session(grpc_device_session_name, init_lambda, cleanup_lambda, initialization_behavior, &new_session_initialized); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } - return 0; - }; - auto channels = request->channels(); - if (channels.size() == 0) { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "No values for channels were specified"); - } - if (channels.size() > 96) { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "More than 96 values for channels were specified"); + response->set_status(status); + response->mutable_task()->set_name(grpc_device_session_name); + response->set_new_session_initialized(new_session_initialized); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateWatchdogTimerTask(::grpc::ServerContext* context, const CreateWatchdogTimerTaskRequest* request, CreateWatchdogTimerTaskResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + auto session_name_mbcs = convert_from_grpc(request->session_name()); + auto session_name = session_name_mbcs.c_str(); + float64 timeout = request->timeout(); + auto get_lines_if = [](const google::protobuf::RepeatedPtrField& vector, int n) -> const char* { + if (vector.size() > n) { + return vector[n].lines().c_str(); + } + return nullptr; + }; + auto get_expState_if = [](const google::protobuf::RepeatedPtrField& vector, int n) -> int32 { + if (vector.size() > n) { + return vector[n].exp_state(); + } + return 0; + }; + auto exp_states = request->exp_states(); + if (exp_states.size() == 0) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "No values for expStates were specified"); + } + if (exp_states.size() > 96) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "More than 96 values for expStates were specified"); + } - auto get_state_if = [](std::vector& vector, int n) -> float64* { - if (vector.size() > n) { - return &(vector[n]); + auto initialization_behavior = request->initialization_behavior(); + + bool new_session_initialized {}; + auto init_lambda = [&] () { + TaskHandle task; + auto status = std::static_pointer_cast(library_)->CreateWatchdogTimerTask(device_name, session_name, &task, timeout, get_lines_if(exp_states, 0), get_expState_if(exp_states, 0), get_lines_if(exp_states, 1), get_expState_if(exp_states, 1), get_lines_if(exp_states, 2), get_expState_if(exp_states, 2), get_lines_if(exp_states, 3), get_expState_if(exp_states, 3), get_lines_if(exp_states, 4), get_expState_if(exp_states, 4), get_lines_if(exp_states, 5), get_expState_if(exp_states, 5), get_lines_if(exp_states, 6), get_expState_if(exp_states, 6), get_lines_if(exp_states, 7), get_expState_if(exp_states, 7), get_lines_if(exp_states, 8), get_expState_if(exp_states, 8), get_lines_if(exp_states, 9), get_expState_if(exp_states, 9), get_lines_if(exp_states, 10), get_expState_if(exp_states, 10), get_lines_if(exp_states, 11), get_expState_if(exp_states, 11), get_lines_if(exp_states, 12), get_expState_if(exp_states, 12), get_lines_if(exp_states, 13), get_expState_if(exp_states, 13), get_lines_if(exp_states, 14), get_expState_if(exp_states, 14), get_lines_if(exp_states, 15), get_expState_if(exp_states, 15), get_lines_if(exp_states, 16), get_expState_if(exp_states, 16), get_lines_if(exp_states, 17), get_expState_if(exp_states, 17), get_lines_if(exp_states, 18), get_expState_if(exp_states, 18), get_lines_if(exp_states, 19), get_expState_if(exp_states, 19), get_lines_if(exp_states, 20), get_expState_if(exp_states, 20), get_lines_if(exp_states, 21), get_expState_if(exp_states, 21), get_lines_if(exp_states, 22), get_expState_if(exp_states, 22), get_lines_if(exp_states, 23), get_expState_if(exp_states, 23), get_lines_if(exp_states, 24), get_expState_if(exp_states, 24), get_lines_if(exp_states, 25), get_expState_if(exp_states, 25), get_lines_if(exp_states, 26), get_expState_if(exp_states, 26), get_lines_if(exp_states, 27), get_expState_if(exp_states, 27), get_lines_if(exp_states, 28), get_expState_if(exp_states, 28), get_lines_if(exp_states, 29), get_expState_if(exp_states, 29), get_lines_if(exp_states, 30), get_expState_if(exp_states, 30), get_lines_if(exp_states, 31), get_expState_if(exp_states, 31), get_lines_if(exp_states, 32), get_expState_if(exp_states, 32), get_lines_if(exp_states, 33), get_expState_if(exp_states, 33), get_lines_if(exp_states, 34), get_expState_if(exp_states, 34), get_lines_if(exp_states, 35), get_expState_if(exp_states, 35), get_lines_if(exp_states, 36), get_expState_if(exp_states, 36), get_lines_if(exp_states, 37), get_expState_if(exp_states, 37), get_lines_if(exp_states, 38), get_expState_if(exp_states, 38), get_lines_if(exp_states, 39), get_expState_if(exp_states, 39), get_lines_if(exp_states, 40), get_expState_if(exp_states, 40), get_lines_if(exp_states, 41), get_expState_if(exp_states, 41), get_lines_if(exp_states, 42), get_expState_if(exp_states, 42), get_lines_if(exp_states, 43), get_expState_if(exp_states, 43), get_lines_if(exp_states, 44), get_expState_if(exp_states, 44), get_lines_if(exp_states, 45), get_expState_if(exp_states, 45), get_lines_if(exp_states, 46), get_expState_if(exp_states, 46), get_lines_if(exp_states, 47), get_expState_if(exp_states, 47), get_lines_if(exp_states, 48), get_expState_if(exp_states, 48), get_lines_if(exp_states, 49), get_expState_if(exp_states, 49), get_lines_if(exp_states, 50), get_expState_if(exp_states, 50), get_lines_if(exp_states, 51), get_expState_if(exp_states, 51), get_lines_if(exp_states, 52), get_expState_if(exp_states, 52), get_lines_if(exp_states, 53), get_expState_if(exp_states, 53), get_lines_if(exp_states, 54), get_expState_if(exp_states, 54), get_lines_if(exp_states, 55), get_expState_if(exp_states, 55), get_lines_if(exp_states, 56), get_expState_if(exp_states, 56), get_lines_if(exp_states, 57), get_expState_if(exp_states, 57), get_lines_if(exp_states, 58), get_expState_if(exp_states, 58), get_lines_if(exp_states, 59), get_expState_if(exp_states, 59), get_lines_if(exp_states, 60), get_expState_if(exp_states, 60), get_lines_if(exp_states, 61), get_expState_if(exp_states, 61), get_lines_if(exp_states, 62), get_expState_if(exp_states, 62), get_lines_if(exp_states, 63), get_expState_if(exp_states, 63), get_lines_if(exp_states, 64), get_expState_if(exp_states, 64), get_lines_if(exp_states, 65), get_expState_if(exp_states, 65), get_lines_if(exp_states, 66), get_expState_if(exp_states, 66), get_lines_if(exp_states, 67), get_expState_if(exp_states, 67), get_lines_if(exp_states, 68), get_expState_if(exp_states, 68), get_lines_if(exp_states, 69), get_expState_if(exp_states, 69), get_lines_if(exp_states, 70), get_expState_if(exp_states, 70), get_lines_if(exp_states, 71), get_expState_if(exp_states, 71), get_lines_if(exp_states, 72), get_expState_if(exp_states, 72), get_lines_if(exp_states, 73), get_expState_if(exp_states, 73), get_lines_if(exp_states, 74), get_expState_if(exp_states, 74), get_lines_if(exp_states, 75), get_expState_if(exp_states, 75), get_lines_if(exp_states, 76), get_expState_if(exp_states, 76), get_lines_if(exp_states, 77), get_expState_if(exp_states, 77), get_lines_if(exp_states, 78), get_expState_if(exp_states, 78), get_lines_if(exp_states, 79), get_expState_if(exp_states, 79), get_lines_if(exp_states, 80), get_expState_if(exp_states, 80), get_lines_if(exp_states, 81), get_expState_if(exp_states, 81), get_lines_if(exp_states, 82), get_expState_if(exp_states, 82), get_lines_if(exp_states, 83), get_expState_if(exp_states, 83), get_lines_if(exp_states, 84), get_expState_if(exp_states, 84), get_lines_if(exp_states, 85), get_expState_if(exp_states, 85), get_lines_if(exp_states, 86), get_expState_if(exp_states, 86), get_lines_if(exp_states, 87), get_expState_if(exp_states, 87), get_lines_if(exp_states, 88), get_expState_if(exp_states, 88), get_lines_if(exp_states, 89), get_expState_if(exp_states, 89), get_lines_if(exp_states, 90), get_expState_if(exp_states, 90), get_lines_if(exp_states, 91), get_expState_if(exp_states, 91), get_lines_if(exp_states, 92), get_expState_if(exp_states, 92), get_lines_if(exp_states, 93), get_expState_if(exp_states, 93), get_lines_if(exp_states, 94), get_expState_if(exp_states, 94), get_lines_if(exp_states, 95), get_expState_if(exp_states, 95), get_lines_if(exp_states, 96), get_expState_if(exp_states, 96)); + return std::make_tuple(status, task); + }; + std::string grpc_device_session_name = request->session_name(); + // Capture the library shared_ptr by value. Do not capture `this` or any references. + LibrarySharedPtr library = library_; + auto cleanup_lambda = [library] (TaskHandle id) { library->ClearTask(id); }; + int status = session_repository_->add_session(grpc_device_session_name, init_lambda, cleanup_lambda, initialization_behavior, &new_session_initialized); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } - return nullptr; - }; - std::vector stateVector; - stateVector.resize(channels.size()); - auto status = std::static_pointer_cast(library_)->GetAnalogPowerUpStates(device_name, get_channelName_if(channels, 0), get_state_if(stateVector, 0), get_channelType_if(channels, 0), get_channelName_if(channels, 1), get_state_if(stateVector, 1), get_channelType_if(channels, 1), get_channelName_if(channels, 2), get_state_if(stateVector, 2), get_channelType_if(channels, 2), get_channelName_if(channels, 3), get_state_if(stateVector, 3), get_channelType_if(channels, 3), get_channelName_if(channels, 4), get_state_if(stateVector, 4), get_channelType_if(channels, 4), get_channelName_if(channels, 5), get_state_if(stateVector, 5), get_channelType_if(channels, 5), get_channelName_if(channels, 6), get_state_if(stateVector, 6), get_channelType_if(channels, 6), get_channelName_if(channels, 7), get_state_if(stateVector, 7), get_channelType_if(channels, 7), get_channelName_if(channels, 8), get_state_if(stateVector, 8), get_channelType_if(channels, 8), get_channelName_if(channels, 9), get_state_if(stateVector, 9), get_channelType_if(channels, 9), get_channelName_if(channels, 10), get_state_if(stateVector, 10), get_channelType_if(channels, 10), get_channelName_if(channels, 11), get_state_if(stateVector, 11), get_channelType_if(channels, 11), get_channelName_if(channels, 12), get_state_if(stateVector, 12), get_channelType_if(channels, 12), get_channelName_if(channels, 13), get_state_if(stateVector, 13), get_channelType_if(channels, 13), get_channelName_if(channels, 14), get_state_if(stateVector, 14), get_channelType_if(channels, 14), get_channelName_if(channels, 15), get_state_if(stateVector, 15), get_channelType_if(channels, 15), get_channelName_if(channels, 16), get_state_if(stateVector, 16), get_channelType_if(channels, 16), get_channelName_if(channels, 17), get_state_if(stateVector, 17), get_channelType_if(channels, 17), get_channelName_if(channels, 18), get_state_if(stateVector, 18), get_channelType_if(channels, 18), get_channelName_if(channels, 19), get_state_if(stateVector, 19), get_channelType_if(channels, 19), get_channelName_if(channels, 20), get_state_if(stateVector, 20), get_channelType_if(channels, 20), get_channelName_if(channels, 21), get_state_if(stateVector, 21), get_channelType_if(channels, 21), get_channelName_if(channels, 22), get_state_if(stateVector, 22), get_channelType_if(channels, 22), get_channelName_if(channels, 23), get_state_if(stateVector, 23), get_channelType_if(channels, 23), get_channelName_if(channels, 24), get_state_if(stateVector, 24), get_channelType_if(channels, 24), get_channelName_if(channels, 25), get_state_if(stateVector, 25), get_channelType_if(channels, 25), get_channelName_if(channels, 26), get_state_if(stateVector, 26), get_channelType_if(channels, 26), get_channelName_if(channels, 27), get_state_if(stateVector, 27), get_channelType_if(channels, 27), get_channelName_if(channels, 28), get_state_if(stateVector, 28), get_channelType_if(channels, 28), get_channelName_if(channels, 29), get_state_if(stateVector, 29), get_channelType_if(channels, 29), get_channelName_if(channels, 30), get_state_if(stateVector, 30), get_channelType_if(channels, 30), get_channelName_if(channels, 31), get_state_if(stateVector, 31), get_channelType_if(channels, 31), get_channelName_if(channels, 32), get_state_if(stateVector, 32), get_channelType_if(channels, 32), get_channelName_if(channels, 33), get_state_if(stateVector, 33), get_channelType_if(channels, 33), get_channelName_if(channels, 34), get_state_if(stateVector, 34), get_channelType_if(channels, 34), get_channelName_if(channels, 35), get_state_if(stateVector, 35), get_channelType_if(channels, 35), get_channelName_if(channels, 36), get_state_if(stateVector, 36), get_channelType_if(channels, 36), get_channelName_if(channels, 37), get_state_if(stateVector, 37), get_channelType_if(channels, 37), get_channelName_if(channels, 38), get_state_if(stateVector, 38), get_channelType_if(channels, 38), get_channelName_if(channels, 39), get_state_if(stateVector, 39), get_channelType_if(channels, 39), get_channelName_if(channels, 40), get_state_if(stateVector, 40), get_channelType_if(channels, 40), get_channelName_if(channels, 41), get_state_if(stateVector, 41), get_channelType_if(channels, 41), get_channelName_if(channels, 42), get_state_if(stateVector, 42), get_channelType_if(channels, 42), get_channelName_if(channels, 43), get_state_if(stateVector, 43), get_channelType_if(channels, 43), get_channelName_if(channels, 44), get_state_if(stateVector, 44), get_channelType_if(channels, 44), get_channelName_if(channels, 45), get_state_if(stateVector, 45), get_channelType_if(channels, 45), get_channelName_if(channels, 46), get_state_if(stateVector, 46), get_channelType_if(channels, 46), get_channelName_if(channels, 47), get_state_if(stateVector, 47), get_channelType_if(channels, 47), get_channelName_if(channels, 48), get_state_if(stateVector, 48), get_channelType_if(channels, 48), get_channelName_if(channels, 49), get_state_if(stateVector, 49), get_channelType_if(channels, 49), get_channelName_if(channels, 50), get_state_if(stateVector, 50), get_channelType_if(channels, 50), get_channelName_if(channels, 51), get_state_if(stateVector, 51), get_channelType_if(channels, 51), get_channelName_if(channels, 52), get_state_if(stateVector, 52), get_channelType_if(channels, 52), get_channelName_if(channels, 53), get_state_if(stateVector, 53), get_channelType_if(channels, 53), get_channelName_if(channels, 54), get_state_if(stateVector, 54), get_channelType_if(channels, 54), get_channelName_if(channels, 55), get_state_if(stateVector, 55), get_channelType_if(channels, 55), get_channelName_if(channels, 56), get_state_if(stateVector, 56), get_channelType_if(channels, 56), get_channelName_if(channels, 57), get_state_if(stateVector, 57), get_channelType_if(channels, 57), get_channelName_if(channels, 58), get_state_if(stateVector, 58), get_channelType_if(channels, 58), get_channelName_if(channels, 59), get_state_if(stateVector, 59), get_channelType_if(channels, 59), get_channelName_if(channels, 60), get_state_if(stateVector, 60), get_channelType_if(channels, 60), get_channelName_if(channels, 61), get_state_if(stateVector, 61), get_channelType_if(channels, 61), get_channelName_if(channels, 62), get_state_if(stateVector, 62), get_channelType_if(channels, 62), get_channelName_if(channels, 63), get_state_if(stateVector, 63), get_channelType_if(channels, 63), get_channelName_if(channels, 64), get_state_if(stateVector, 64), get_channelType_if(channels, 64), get_channelName_if(channels, 65), get_state_if(stateVector, 65), get_channelType_if(channels, 65), get_channelName_if(channels, 66), get_state_if(stateVector, 66), get_channelType_if(channels, 66), get_channelName_if(channels, 67), get_state_if(stateVector, 67), get_channelType_if(channels, 67), get_channelName_if(channels, 68), get_state_if(stateVector, 68), get_channelType_if(channels, 68), get_channelName_if(channels, 69), get_state_if(stateVector, 69), get_channelType_if(channels, 69), get_channelName_if(channels, 70), get_state_if(stateVector, 70), get_channelType_if(channels, 70), get_channelName_if(channels, 71), get_state_if(stateVector, 71), get_channelType_if(channels, 71), get_channelName_if(channels, 72), get_state_if(stateVector, 72), get_channelType_if(channels, 72), get_channelName_if(channels, 73), get_state_if(stateVector, 73), get_channelType_if(channels, 73), get_channelName_if(channels, 74), get_state_if(stateVector, 74), get_channelType_if(channels, 74), get_channelName_if(channels, 75), get_state_if(stateVector, 75), get_channelType_if(channels, 75), get_channelName_if(channels, 76), get_state_if(stateVector, 76), get_channelType_if(channels, 76), get_channelName_if(channels, 77), get_state_if(stateVector, 77), get_channelType_if(channels, 77), get_channelName_if(channels, 78), get_state_if(stateVector, 78), get_channelType_if(channels, 78), get_channelName_if(channels, 79), get_state_if(stateVector, 79), get_channelType_if(channels, 79), get_channelName_if(channels, 80), get_state_if(stateVector, 80), get_channelType_if(channels, 80), get_channelName_if(channels, 81), get_state_if(stateVector, 81), get_channelType_if(channels, 81), get_channelName_if(channels, 82), get_state_if(stateVector, 82), get_channelType_if(channels, 82), get_channelName_if(channels, 83), get_state_if(stateVector, 83), get_channelType_if(channels, 83), get_channelName_if(channels, 84), get_state_if(stateVector, 84), get_channelType_if(channels, 84), get_channelName_if(channels, 85), get_state_if(stateVector, 85), get_channelType_if(channels, 85), get_channelName_if(channels, 86), get_state_if(stateVector, 86), get_channelType_if(channels, 86), get_channelName_if(channels, 87), get_state_if(stateVector, 87), get_channelType_if(channels, 87), get_channelName_if(channels, 88), get_state_if(stateVector, 88), get_channelType_if(channels, 88), get_channelName_if(channels, 89), get_state_if(stateVector, 89), get_channelType_if(channels, 89), get_channelName_if(channels, 90), get_state_if(stateVector, 90), get_channelType_if(channels, 90), get_channelName_if(channels, 91), get_state_if(stateVector, 91), get_channelType_if(channels, 91), get_channelName_if(channels, 92), get_state_if(stateVector, 92), get_channelType_if(channels, 92), get_channelName_if(channels, 93), get_state_if(stateVector, 93), get_channelType_if(channels, 93), get_channelName_if(channels, 94), get_state_if(stateVector, 94), get_channelType_if(channels, 94), get_channelName_if(channels, 95), get_state_if(stateVector, 95), get_channelType_if(channels, 95), get_channelName_if(channels, 96), get_state_if(stateVector, 96), get_channelType_if(channels, 96)); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + response->set_status(status); + response->mutable_task()->set_name(grpc_device_session_name); + response->set_new_session_initialized(new_session_initialized); + return ::grpc::Status::OK; } - response->set_status(status); - for (int i = 0; i < stateVector.size(); ++i) { - response->add_power_up_states(stateVector[i]); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetAnalogPowerUpStatesWithOutputType(::grpc::ServerContext* context, const GetAnalogPowerUpStatesWithOutputTypeRequest* request, GetAnalogPowerUpStatesWithOutputTypeResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto channel_names_mbcs = convert_from_grpc(request->channel_names()); - auto channel_names = channel_names_mbcs.c_str(); - uInt32 array_size_copy = request->array_size(); - response->mutable_state_array()->Resize(array_size_copy, 0); - float64* state_array = response->mutable_state_array()->mutable_data(); - response->mutable_channel_type_array_raw()->Resize(array_size_copy, 0); - int32* channel_type_array = reinterpret_cast(response->mutable_channel_type_array_raw()->mutable_data()); - auto status = library_->GetAnalogPowerUpStatesWithOutputType(channel_names, state_array, channel_type_array, &array_size_copy); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - response->mutable_state_array()->Resize(array_size_copy, 0); - response->mutable_channel_type_array()->Clear(); - response->mutable_channel_type_array()->Reserve(array_size_copy); - std::transform( - response->channel_type_array_raw().begin(), - response->channel_type_array_raw().begin() + array_size_copy, - google::protobuf::RepeatedFieldBackInserter(response->mutable_channel_type_array()), - [&](auto x) { - return static_cast(x); - }); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetArmStartTrigTimestampVal(::grpc::ServerContext* context, const GetArmStartTrigTimestampValRequest* request, GetArmStartTrigTimestampValResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - CVIAbsoluteTime data{}; - auto status = library_->GetArmStartTrigTimestampVal(task, &data); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - convert_to_grpc(data, response->mutable_data()); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetArmStartTrigTrigWhen(::grpc::ServerContext* context, const GetArmStartTrigTrigWhenRequest* request, GetArmStartTrigTrigWhenResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - CVIAbsoluteTime data{}; - auto status = library_->GetArmStartTrigTrigWhen(task, &data); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - convert_to_grpc(data, response->mutable_data()); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::CreateWatchdogTimerTaskEx(::grpc::ServerContext* context, const CreateWatchdogTimerTaskExRequest* request, CreateWatchdogTimerTaskExResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + auto session_name_mbcs = convert_from_grpc(request->session_name()); + auto session_name = session_name_mbcs.c_str(); + float64 timeout = request->timeout(); + auto initialization_behavior = request->initialization_behavior(); -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetAutoConfiguredCDAQSyncConnections(::grpc::ServerContext* context, const GetAutoConfiguredCDAQSyncConnectionsRequest* request, GetAutoConfiguredCDAQSyncConnectionsResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - while (true) { - auto status = library_->GetAutoConfiguredCDAQSyncConnections(nullptr, 0); + bool new_session_initialized {}; + auto init_lambda = [&] () { + TaskHandle task; + auto status = library_->CreateWatchdogTimerTaskEx(device_name, session_name, &task, timeout); + return std::make_tuple(status, task); + }; + std::string grpc_device_session_name = request->session_name(); + // Capture the library shared_ptr by value. Do not capture `this` or any references. + LibrarySharedPtr library = library_; + auto cleanup_lambda = [library] (TaskHandle id) { library->ClearTask(id); }; + int status = session_repository_->add_session(grpc_device_session_name, init_lambda, cleanup_lambda, initialization_behavior, &new_session_initialized); if (!status_ok(status)) { return ConvertApiErrorStatusForTaskHandle(context, status, 0); } - uInt32 port_list_size = status; + response->set_status(status); + response->mutable_task()->set_name(grpc_device_session_name); + response->set_new_session_initialized(new_session_initialized); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } - std::string port_list; - if (port_list_size > 0) { - port_list.resize(port_list_size - 1); - } - status = library_->GetAutoConfiguredCDAQSyncConnections((char*)port_list.data(), port_list_size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(port_list_size)) { - // buffer is now too small, try again - continue; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::DeleteNetworkDevice(::grpc::ServerContext* context, const DeleteNetworkDeviceRequest* request, DeleteNetworkDeviceResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + auto status = library_->DeleteNetworkDevice(device_name); if (!status_ok(status)) { return ConvertApiErrorStatusForTaskHandle(context, status, 0); } response->set_status(status); - std::string port_list_utf8; - convert_to_grpc(port_list, &port_list_utf8); - response->set_port_list(port_list_utf8); - nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_port_list())); return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetBufferAttributeUInt32(::grpc::ServerContext* context, const GetBufferAttributeUInt32Request* request, GetBufferAttributeUInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetBufferAttributeUInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::BufferUInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetBufferAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::BufferUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetBufferAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - uInt32 value{}; - auto status = library_->GetBufferAttributeUInt32(task, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetCalInfoAttributeBool(::grpc::ServerContext* context, const GetCalInfoAttributeBoolRequest* request, GetCalInfoAttributeBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetCalInfoAttributeBoolRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::CalibrationInfoBoolAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetCalInfoAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::CalibrationInfoBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetCalInfoAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - bool32 value{}; - auto status = library_->GetCalInfoAttributeBool(device_name, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetCalInfoAttributeDouble(::grpc::ServerContext* context, const GetCalInfoAttributeDoubleRequest* request, GetCalInfoAttributeDoubleResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetCalInfoAttributeDoubleRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::CalibrationInfoDoubleAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetCalInfoAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::CalibrationInfoDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetCalInfoAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - float64 value{}; - auto status = library_->GetCalInfoAttributeDouble(device_name, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetCalInfoAttributeString(::grpc::ServerContext* context, const GetCalInfoAttributeStringRequest* request, GetCalInfoAttributeStringResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetCalInfoAttributeStringRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::CalibrationInfoStringAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetCalInfoAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::CalibrationInfoStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetCalInfoAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::DeleteSavedGlobalChan(::grpc::ServerContext* context, const DeleteSavedGlobalChanRequest* request, DeleteSavedGlobalChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - - while (true) { - auto status = library_->GetCalInfoAttributeString(device_name, attribute, nullptr, 0); + try { + auto channel_name_mbcs = convert_from_grpc(request->channel_name()); + auto channel_name = channel_name_mbcs.c_str(); + auto status = library_->DeleteSavedGlobalChan(channel_name); if (!status_ok(status)) { return ConvertApiErrorStatusForTaskHandle(context, status, 0); } - uInt32 size = status; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } - std::string value; - if (size > 0) { - value.resize(size - 1); - } - status = library_->GetCalInfoAttributeString(device_name, attribute, (char*)value.data(), size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { - // buffer is now too small, try again - continue; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::DeleteSavedScale(::grpc::ServerContext* context, const DeleteSavedScaleRequest* request, DeleteSavedScaleResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto scale_name_mbcs = convert_from_grpc(request->scale_name()); + auto scale_name = scale_name_mbcs.c_str(); + auto status = library_->DeleteSavedScale(scale_name); if (!status_ok(status)) { return ConvertApiErrorStatusForTaskHandle(context, status, 0); } response->set_status(status); - std::string value_utf8; - convert_to_grpc(value, &value_utf8); - response->set_value(value_utf8); - nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetCalInfoAttributeUInt32(::grpc::ServerContext* context, const GetCalInfoAttributeUInt32Request* request, GetCalInfoAttributeUInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetCalInfoAttributeUInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::CalibrationInfoUInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetCalInfoAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::CalibrationInfoUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetCalInfoAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - uInt32 value{}; - auto status = library_->GetCalInfoAttributeUInt32(device_name, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetChanAttributeBool(::grpc::ServerContext* context, const GetChanAttributeBoolRequest* request, GetChanAttributeBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto channel_mbcs = convert_from_grpc(request->channel()); - auto channel = channel_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetChanAttributeBoolRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ChannelBoolAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetChanAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ChannelBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetChanAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - bool32 value{}; - auto status = library_->GetChanAttributeBool(task, channel, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetChanAttributeDouble(::grpc::ServerContext* context, const GetChanAttributeDoubleRequest* request, GetChanAttributeDoubleResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto channel_mbcs = convert_from_grpc(request->channel()); - auto channel = channel_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetChanAttributeDoubleRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ChannelDoubleAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetChanAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ChannelDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetChanAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - float64 value{}; - auto status = library_->GetChanAttributeDouble(task, channel, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::DeleteSavedTask(::grpc::ServerContext* context, const DeleteSavedTaskRequest* request, DeleteSavedTaskResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_name_mbcs = convert_from_grpc(request->task_name()); + auto task_name = task_name_mbcs.c_str(); + auto status = library_->DeleteSavedTask(task_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetChanAttributeDoubleArray(::grpc::ServerContext* context, const GetChanAttributeDoubleArrayRequest* request, GetChanAttributeDoubleArrayResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto channel_mbcs = convert_from_grpc(request->channel()); - auto channel = channel_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetChanAttributeDoubleArrayRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ChannelDoubleArrayAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetChanAttributeDoubleArrayRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ChannelDoubleArrayAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetChanAttributeDoubleArrayRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::DeviceSupportsCal(::grpc::ServerContext* context, const DeviceSupportsCalRequest* request, DeviceSupportsCalResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + bool32 cal_supported {}; + auto status = library_->DeviceSupportsCal(device_name, &cal_supported); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } + response->set_status(status); + response->set_cal_supported(cal_supported); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } + } - while (true) { - auto status = library_->GetChanAttributeDoubleArray(task, channel, attribute, nullptr, 0); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::DisableRefTrig(::grpc::ServerContext* context, const DisableRefTrigRequest* request, DisableRefTrigResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto status = library_->DisableRefTrig(task); if (!status_ok(status)) { return ConvertApiErrorStatusForTaskHandle(context, status, task); } - uInt32 size = status; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } - response->mutable_value()->Resize(size, 0); - float64* value = response->mutable_value()->mutable_data(); - status = library_->GetChanAttributeDoubleArray(task, channel, attribute, value, size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { - // buffer is now too small, try again - continue; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::DisableStartTrig(::grpc::ServerContext* context, const DisableStartTrigRequest* request, DisableStartTrigResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto status = library_->DisableStartTrig(task); if (!status_ok(status)) { return ConvertApiErrorStatusForTaskHandle(context, status, task); } response->set_status(status); return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::DisconnectTerms(::grpc::ServerContext* context, const DisconnectTermsRequest* request, DisconnectTermsResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto source_terminal_mbcs = convert_from_grpc(request->source_terminal()); + auto source_terminal = source_terminal_mbcs.c_str(); + auto destination_terminal_mbcs = convert_from_grpc(request->destination_terminal()); + auto destination_terminal = destination_terminal_mbcs.c_str(); + auto status = library_->DisconnectTerms(source_terminal, destination_terminal); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetChanAttributeInt32(::grpc::ServerContext* context, const GetChanAttributeInt32Request* request, GetChanAttributeInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto channel_mbcs = convert_from_grpc(request->channel()); - auto channel = channel_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetChanAttributeInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ChannelInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetChanAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ChannelInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetChanAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - int32 value{}; - auto status = library_->GetChanAttributeInt32(task, channel, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - auto checked_convert_value = [](auto raw_value) { - bool raw_value_is_valid = nidaqmx_grpc::ChannelInt32AttributeValues_IsValid(raw_value); - auto valid_enum_value = raw_value_is_valid ? raw_value : 0; - return static_cast(valid_enum_value); - }; - response->set_value(checked_convert_value(value)); - response->set_value_raw(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetChanAttributeString(::grpc::ServerContext* context, const GetChanAttributeStringRequest* request, GetChanAttributeStringResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto channel_mbcs = convert_from_grpc(request->channel()); - auto channel = channel_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetChanAttributeStringRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ChannelStringAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetChanAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ChannelStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetChanAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ExportSignal(::grpc::ServerContext* context, const ExportSignalRequest* request, ExportSignalResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 signal_id; + switch (request->signal_id_enum_case()) { + case nidaqmx_grpc::ExportSignalRequest::SignalIdEnumCase::kSignalId: { + signal_id = static_cast(request->signal_id()); + break; + } + case nidaqmx_grpc::ExportSignalRequest::SignalIdEnumCase::kSignalIdRaw: { + signal_id = static_cast(request->signal_id_raw()); + break; + } + case nidaqmx_grpc::ExportSignalRequest::SignalIdEnumCase::SIGNAL_ID_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for signal_id was not specified or out of range"); + break; + } + } - while (true) { - auto status = library_->GetChanAttributeString(task, channel, attribute, nullptr, 0); + auto output_terminal_mbcs = convert_from_grpc(request->output_terminal()); + auto output_terminal = output_terminal_mbcs.c_str(); + auto status = library_->ExportSignal(task, signal_id, output_terminal); if (!status_ok(status)) { return ConvertApiErrorStatusForTaskHandle(context, status, task); } - uInt32 size = status; - - std::string value; - if (size > 0) { - value.resize(size - 1); - } - status = library_->GetChanAttributeString(task, channel, attribute, (char*)value.data(), size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { - // buffer is now too small, try again - continue; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetAIChanCalCalDate(::grpc::ServerContext* context, const GetAIChanCalCalDateRequest* request, GetAIChanCalCalDateResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto channel_name_mbcs = convert_from_grpc(request->channel_name()); + auto channel_name = channel_name_mbcs.c_str(); + uInt32 year {}; + uInt32 month {}; + uInt32 day {}; + uInt32 hour {}; + uInt32 minute {}; + auto status = library_->GetAIChanCalCalDate(task, channel_name, &year, &month, &day, &hour, &minute); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + response->set_year(year); + response->set_month(month); + response->set_day(day); + response->set_hour(hour); + response->set_minute(minute); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetAIChanCalExpDate(::grpc::ServerContext* context, const GetAIChanCalExpDateRequest* request, GetAIChanCalExpDateResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto channel_name_mbcs = convert_from_grpc(request->channel_name()); + auto channel_name = channel_name_mbcs.c_str(); + uInt32 year {}; + uInt32 month {}; + uInt32 day {}; + uInt32 hour {}; + uInt32 minute {}; + auto status = library_->GetAIChanCalExpDate(task, channel_name, &year, &month, &day, &hour, &minute); if (!status_ok(status)) { return ConvertApiErrorStatusForTaskHandle(context, status, task); } response->set_status(status); - std::string value_utf8; - convert_to_grpc(value, &value_utf8); - response->set_value(value_utf8); - nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); + response->set_year(year); + response->set_month(month); + response->set_day(day); + response->set_hour(hour); + response->set_minute(minute); return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetChanAttributeUInt32(::grpc::ServerContext* context, const GetChanAttributeUInt32Request* request, GetChanAttributeUInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto channel_mbcs = convert_from_grpc(request->channel()); - auto channel = channel_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetChanAttributeUInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ChannelUInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetChanAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ChannelUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetChanAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - uInt32 value{}; - auto status = library_->GetChanAttributeUInt32(task, channel, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetDeviceAttributeBool(::grpc::ServerContext* context, const GetDeviceAttributeBoolRequest* request, GetDeviceAttributeBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetDeviceAttributeBoolRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::DeviceBoolAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetDeviceAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::DeviceBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetDeviceAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - bool32 value{}; - auto status = library_->GetDeviceAttributeBool(device_name, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetDeviceAttributeDouble(::grpc::ServerContext* context, const GetDeviceAttributeDoubleRequest* request, GetDeviceAttributeDoubleResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetDeviceAttributeDoubleRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::DeviceDoubleAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetDeviceAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::DeviceDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetDeviceAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - float64 value{}; - auto status = library_->GetDeviceAttributeDouble(device_name, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetDeviceAttributeDoubleArray(::grpc::ServerContext* context, const GetDeviceAttributeDoubleArrayRequest* request, GetDeviceAttributeDoubleArrayResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetDeviceAttributeDoubleArrayRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::DeviceDoubleArrayAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetDeviceAttributeDoubleArrayRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::DeviceDoubleArrayAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetDeviceAttributeDoubleArrayRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetAnalogPowerUpStates(::grpc::ServerContext* context, const GetAnalogPowerUpStatesRequest* request, GetAnalogPowerUpStatesResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - - while (true) { - auto status = library_->GetDeviceAttributeDoubleArray(device_name, attribute, nullptr, 0); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + auto get_channelName_if = [](const google::protobuf::RepeatedPtrField& vector, int n) -> const char* { + if (vector.size() > n) { + return vector[n].channel_name().c_str(); + } + return nullptr; + }; + auto get_channelType_if = [](const google::protobuf::RepeatedPtrField& vector, int n) -> int32 { + if (vector.size() > n) { + return vector[n].channel_type(); + } + return 0; + }; + auto channels = request->channels(); + if (channels.size() == 0) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "No values for channels were specified"); } - uInt32 size = status; - - response->mutable_value()->Resize(size, 0); - float64* value = response->mutable_value()->mutable_data(); - status = library_->GetDeviceAttributeDoubleArray(device_name, attribute, value, size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { - // buffer is now too small, try again - continue; + if (channels.size() > 96) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "More than 96 values for channels were specified"); } + + auto get_state_if = [](std::vector& vector, int n) -> float64* { + if (vector.size() > n) { + return &(vector[n]); + } + return nullptr; + }; + std::vector stateVector; + stateVector.resize(channels.size()); + auto status = std::static_pointer_cast(library_)->GetAnalogPowerUpStates(device_name, get_channelName_if(channels, 0), get_state_if(stateVector, 0), get_channelType_if(channels, 0), get_channelName_if(channels, 1), get_state_if(stateVector, 1), get_channelType_if(channels, 1), get_channelName_if(channels, 2), get_state_if(stateVector, 2), get_channelType_if(channels, 2), get_channelName_if(channels, 3), get_state_if(stateVector, 3), get_channelType_if(channels, 3), get_channelName_if(channels, 4), get_state_if(stateVector, 4), get_channelType_if(channels, 4), get_channelName_if(channels, 5), get_state_if(stateVector, 5), get_channelType_if(channels, 5), get_channelName_if(channels, 6), get_state_if(stateVector, 6), get_channelType_if(channels, 6), get_channelName_if(channels, 7), get_state_if(stateVector, 7), get_channelType_if(channels, 7), get_channelName_if(channels, 8), get_state_if(stateVector, 8), get_channelType_if(channels, 8), get_channelName_if(channels, 9), get_state_if(stateVector, 9), get_channelType_if(channels, 9), get_channelName_if(channels, 10), get_state_if(stateVector, 10), get_channelType_if(channels, 10), get_channelName_if(channels, 11), get_state_if(stateVector, 11), get_channelType_if(channels, 11), get_channelName_if(channels, 12), get_state_if(stateVector, 12), get_channelType_if(channels, 12), get_channelName_if(channels, 13), get_state_if(stateVector, 13), get_channelType_if(channels, 13), get_channelName_if(channels, 14), get_state_if(stateVector, 14), get_channelType_if(channels, 14), get_channelName_if(channels, 15), get_state_if(stateVector, 15), get_channelType_if(channels, 15), get_channelName_if(channels, 16), get_state_if(stateVector, 16), get_channelType_if(channels, 16), get_channelName_if(channels, 17), get_state_if(stateVector, 17), get_channelType_if(channels, 17), get_channelName_if(channels, 18), get_state_if(stateVector, 18), get_channelType_if(channels, 18), get_channelName_if(channels, 19), get_state_if(stateVector, 19), get_channelType_if(channels, 19), get_channelName_if(channels, 20), get_state_if(stateVector, 20), get_channelType_if(channels, 20), get_channelName_if(channels, 21), get_state_if(stateVector, 21), get_channelType_if(channels, 21), get_channelName_if(channels, 22), get_state_if(stateVector, 22), get_channelType_if(channels, 22), get_channelName_if(channels, 23), get_state_if(stateVector, 23), get_channelType_if(channels, 23), get_channelName_if(channels, 24), get_state_if(stateVector, 24), get_channelType_if(channels, 24), get_channelName_if(channels, 25), get_state_if(stateVector, 25), get_channelType_if(channels, 25), get_channelName_if(channels, 26), get_state_if(stateVector, 26), get_channelType_if(channels, 26), get_channelName_if(channels, 27), get_state_if(stateVector, 27), get_channelType_if(channels, 27), get_channelName_if(channels, 28), get_state_if(stateVector, 28), get_channelType_if(channels, 28), get_channelName_if(channels, 29), get_state_if(stateVector, 29), get_channelType_if(channels, 29), get_channelName_if(channels, 30), get_state_if(stateVector, 30), get_channelType_if(channels, 30), get_channelName_if(channels, 31), get_state_if(stateVector, 31), get_channelType_if(channels, 31), get_channelName_if(channels, 32), get_state_if(stateVector, 32), get_channelType_if(channels, 32), get_channelName_if(channels, 33), get_state_if(stateVector, 33), get_channelType_if(channels, 33), get_channelName_if(channels, 34), get_state_if(stateVector, 34), get_channelType_if(channels, 34), get_channelName_if(channels, 35), get_state_if(stateVector, 35), get_channelType_if(channels, 35), get_channelName_if(channels, 36), get_state_if(stateVector, 36), get_channelType_if(channels, 36), get_channelName_if(channels, 37), get_state_if(stateVector, 37), get_channelType_if(channels, 37), get_channelName_if(channels, 38), get_state_if(stateVector, 38), get_channelType_if(channels, 38), get_channelName_if(channels, 39), get_state_if(stateVector, 39), get_channelType_if(channels, 39), get_channelName_if(channels, 40), get_state_if(stateVector, 40), get_channelType_if(channels, 40), get_channelName_if(channels, 41), get_state_if(stateVector, 41), get_channelType_if(channels, 41), get_channelName_if(channels, 42), get_state_if(stateVector, 42), get_channelType_if(channels, 42), get_channelName_if(channels, 43), get_state_if(stateVector, 43), get_channelType_if(channels, 43), get_channelName_if(channels, 44), get_state_if(stateVector, 44), get_channelType_if(channels, 44), get_channelName_if(channels, 45), get_state_if(stateVector, 45), get_channelType_if(channels, 45), get_channelName_if(channels, 46), get_state_if(stateVector, 46), get_channelType_if(channels, 46), get_channelName_if(channels, 47), get_state_if(stateVector, 47), get_channelType_if(channels, 47), get_channelName_if(channels, 48), get_state_if(stateVector, 48), get_channelType_if(channels, 48), get_channelName_if(channels, 49), get_state_if(stateVector, 49), get_channelType_if(channels, 49), get_channelName_if(channels, 50), get_state_if(stateVector, 50), get_channelType_if(channels, 50), get_channelName_if(channels, 51), get_state_if(stateVector, 51), get_channelType_if(channels, 51), get_channelName_if(channels, 52), get_state_if(stateVector, 52), get_channelType_if(channels, 52), get_channelName_if(channels, 53), get_state_if(stateVector, 53), get_channelType_if(channels, 53), get_channelName_if(channels, 54), get_state_if(stateVector, 54), get_channelType_if(channels, 54), get_channelName_if(channels, 55), get_state_if(stateVector, 55), get_channelType_if(channels, 55), get_channelName_if(channels, 56), get_state_if(stateVector, 56), get_channelType_if(channels, 56), get_channelName_if(channels, 57), get_state_if(stateVector, 57), get_channelType_if(channels, 57), get_channelName_if(channels, 58), get_state_if(stateVector, 58), get_channelType_if(channels, 58), get_channelName_if(channels, 59), get_state_if(stateVector, 59), get_channelType_if(channels, 59), get_channelName_if(channels, 60), get_state_if(stateVector, 60), get_channelType_if(channels, 60), get_channelName_if(channels, 61), get_state_if(stateVector, 61), get_channelType_if(channels, 61), get_channelName_if(channels, 62), get_state_if(stateVector, 62), get_channelType_if(channels, 62), get_channelName_if(channels, 63), get_state_if(stateVector, 63), get_channelType_if(channels, 63), get_channelName_if(channels, 64), get_state_if(stateVector, 64), get_channelType_if(channels, 64), get_channelName_if(channels, 65), get_state_if(stateVector, 65), get_channelType_if(channels, 65), get_channelName_if(channels, 66), get_state_if(stateVector, 66), get_channelType_if(channels, 66), get_channelName_if(channels, 67), get_state_if(stateVector, 67), get_channelType_if(channels, 67), get_channelName_if(channels, 68), get_state_if(stateVector, 68), get_channelType_if(channels, 68), get_channelName_if(channels, 69), get_state_if(stateVector, 69), get_channelType_if(channels, 69), get_channelName_if(channels, 70), get_state_if(stateVector, 70), get_channelType_if(channels, 70), get_channelName_if(channels, 71), get_state_if(stateVector, 71), get_channelType_if(channels, 71), get_channelName_if(channels, 72), get_state_if(stateVector, 72), get_channelType_if(channels, 72), get_channelName_if(channels, 73), get_state_if(stateVector, 73), get_channelType_if(channels, 73), get_channelName_if(channels, 74), get_state_if(stateVector, 74), get_channelType_if(channels, 74), get_channelName_if(channels, 75), get_state_if(stateVector, 75), get_channelType_if(channels, 75), get_channelName_if(channels, 76), get_state_if(stateVector, 76), get_channelType_if(channels, 76), get_channelName_if(channels, 77), get_state_if(stateVector, 77), get_channelType_if(channels, 77), get_channelName_if(channels, 78), get_state_if(stateVector, 78), get_channelType_if(channels, 78), get_channelName_if(channels, 79), get_state_if(stateVector, 79), get_channelType_if(channels, 79), get_channelName_if(channels, 80), get_state_if(stateVector, 80), get_channelType_if(channels, 80), get_channelName_if(channels, 81), get_state_if(stateVector, 81), get_channelType_if(channels, 81), get_channelName_if(channels, 82), get_state_if(stateVector, 82), get_channelType_if(channels, 82), get_channelName_if(channels, 83), get_state_if(stateVector, 83), get_channelType_if(channels, 83), get_channelName_if(channels, 84), get_state_if(stateVector, 84), get_channelType_if(channels, 84), get_channelName_if(channels, 85), get_state_if(stateVector, 85), get_channelType_if(channels, 85), get_channelName_if(channels, 86), get_state_if(stateVector, 86), get_channelType_if(channels, 86), get_channelName_if(channels, 87), get_state_if(stateVector, 87), get_channelType_if(channels, 87), get_channelName_if(channels, 88), get_state_if(stateVector, 88), get_channelType_if(channels, 88), get_channelName_if(channels, 89), get_state_if(stateVector, 89), get_channelType_if(channels, 89), get_channelName_if(channels, 90), get_state_if(stateVector, 90), get_channelType_if(channels, 90), get_channelName_if(channels, 91), get_state_if(stateVector, 91), get_channelType_if(channels, 91), get_channelName_if(channels, 92), get_state_if(stateVector, 92), get_channelType_if(channels, 92), get_channelName_if(channels, 93), get_state_if(stateVector, 93), get_channelType_if(channels, 93), get_channelName_if(channels, 94), get_state_if(stateVector, 94), get_channelType_if(channels, 94), get_channelName_if(channels, 95), get_state_if(stateVector, 95), get_channelType_if(channels, 95), get_channelName_if(channels, 96), get_state_if(stateVector, 96), get_channelType_if(channels, 96)); if (!status_ok(status)) { return ConvertApiErrorStatusForTaskHandle(context, status, 0); } response->set_status(status); + for (int i = 0; i < stateVector.size(); ++i) { + response->add_power_up_states(stateVector[i]); + } return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetDeviceAttributeInt32(::grpc::ServerContext* context, const GetDeviceAttributeInt32Request* request, GetDeviceAttributeInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetDeviceAttributeInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::DeviceInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetDeviceAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::DeviceInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetDeviceAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - int32 value{}; - auto status = library_->GetDeviceAttributeInt32(device_name, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - auto checked_convert_value = [](auto raw_value) { - bool raw_value_is_valid = nidaqmx_grpc::DeviceInt32AttributeValues_IsValid(raw_value); - auto valid_enum_value = raw_value_is_valid ? raw_value : 0; - return static_cast(valid_enum_value); - }; - response->set_value(checked_convert_value(value)); - response->set_value_raw(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetDeviceAttributeInt32Array(::grpc::ServerContext* context, const GetDeviceAttributeInt32ArrayRequest* request, GetDeviceAttributeInt32ArrayResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetDeviceAttributeInt32ArrayRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::DeviceInt32ArrayAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetDeviceAttributeInt32ArrayRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::DeviceInt32ArrayAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetDeviceAttributeInt32ArrayRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetAnalogPowerUpStatesWithOutputType(::grpc::ServerContext* context, const GetAnalogPowerUpStatesWithOutputTypeRequest* request, GetAnalogPowerUpStatesWithOutputTypeResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - - while (true) { - auto status = library_->GetDeviceAttributeInt32Array(device_name, attribute, nullptr, 0); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - uInt32 size = status; - - response->mutable_value_raw()->Resize(size, 0); - int32* value = reinterpret_cast(response->mutable_value_raw()->mutable_data()); - status = library_->GetDeviceAttributeInt32Array(device_name, attribute, value, size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { - // buffer is now too small, try again - continue; - } + try { + auto channel_names_mbcs = convert_from_grpc(request->channel_names()); + auto channel_names = channel_names_mbcs.c_str(); + uInt32 array_size_copy = request->array_size(); + response->mutable_state_array()->Resize(array_size_copy, 0); + float64* state_array = response->mutable_state_array()->mutable_data(); + response->mutable_channel_type_array_raw()->Resize(array_size_copy, 0); + int32* channel_type_array = reinterpret_cast(response->mutable_channel_type_array_raw()->mutable_data()); + auto status = library_->GetAnalogPowerUpStatesWithOutputType(channel_names, state_array, channel_type_array, &array_size_copy); if (!status_ok(status)) { return ConvertApiErrorStatusForTaskHandle(context, status, 0); } response->set_status(status); - auto checked_convert_value = [](auto raw_value) { - bool raw_value_is_valid = nidaqmx_grpc::DeviceInt32AttributeValues_IsValid(raw_value); - auto valid_enum_value = raw_value_is_valid ? raw_value : 0; - return static_cast(valid_enum_value); - }; - response->mutable_value()->Clear(); - response->mutable_value()->Reserve(size); - std::transform( - response->value_raw().begin(), - response->value_raw().begin() + size, - google::protobuf::RepeatedFieldBackInserter(response->mutable_value()), + response->mutable_state_array()->Resize(array_size_copy, 0); + response->mutable_channel_type_array()->Clear(); + response->mutable_channel_type_array()->Reserve(array_size_copy); + std::transform( + response->channel_type_array_raw().begin(), + response->channel_type_array_raw().begin() + array_size_copy, + google::protobuf::RepeatedFieldBackInserter(response->mutable_channel_type_array()), [&](auto x) { - return checked_convert_value(x); + return static_cast(x); }); return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetDeviceAttributeString(::grpc::ServerContext* context, const GetDeviceAttributeStringRequest* request, GetDeviceAttributeStringResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetDeviceAttributeStringRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::DeviceStringAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetDeviceAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::DeviceStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetDeviceAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetArmStartTrigTimestampVal(::grpc::ServerContext* context, const GetArmStartTrigTimestampValRequest* request, GetArmStartTrigTimestampValResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - - while (true) { - auto status = library_->GetDeviceAttributeString(device_name, attribute, nullptr, 0); + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + CVIAbsoluteTime data {}; + auto status = library_->GetArmStartTrigTimestampVal(task, &data); if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - uInt32 size = status; + response->set_status(status); + convert_to_grpc(data, response->mutable_data()); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } - std::string value; - if (size > 0) { - value.resize(size - 1); - } - status = library_->GetDeviceAttributeString(device_name, attribute, (char*)value.data(), size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { - // buffer is now too small, try again - continue; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetArmStartTrigTrigWhen(::grpc::ServerContext* context, const GetArmStartTrigTrigWhenRequest* request, GetArmStartTrigTrigWhenResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + CVIAbsoluteTime data {}; + auto status = library_->GetArmStartTrigTrigWhen(task, &data); if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + return ConvertApiErrorStatusForTaskHandle(context, status, task); } response->set_status(status); - std::string value_utf8; - convert_to_grpc(value, &value_utf8); - response->set_value(value_utf8); - nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); + convert_to_grpc(data, response->mutable_data()); return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetDeviceAttributeUInt32(::grpc::ServerContext* context, const GetDeviceAttributeUInt32Request* request, GetDeviceAttributeUInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetDeviceAttributeUInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::DeviceUInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetDeviceAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::DeviceUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetDeviceAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - uInt32 value{}; - auto status = library_->GetDeviceAttributeUInt32(device_name, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetDeviceAttributeUInt32Array(::grpc::ServerContext* context, const GetDeviceAttributeUInt32ArrayRequest* request, GetDeviceAttributeUInt32ArrayResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetDeviceAttributeUInt32ArrayRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::DeviceUInt32ArrayAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetDeviceAttributeUInt32ArrayRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::DeviceUInt32ArrayAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetDeviceAttributeUInt32ArrayRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetAutoConfiguredCDAQSyncConnections(::grpc::ServerContext* context, const GetAutoConfiguredCDAQSyncConnectionsRequest* request, GetAutoConfiguredCDAQSyncConnectionsResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } + try { - while (true) { - auto status = library_->GetDeviceAttributeUInt32Array(device_name, attribute, nullptr, 0); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - uInt32 size = status; + while (true) { + auto status = library_->GetAutoConfiguredCDAQSyncConnections(nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + uInt32 port_list_size = status; - response->mutable_value()->Resize(size, 0); - uInt32* value = reinterpret_cast(response->mutable_value()->mutable_data()); - status = library_->GetDeviceAttributeUInt32Array(device_name, attribute, value, size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { - // buffer is now too small, try again - continue; + std::string port_list; + if (port_list_size > 0) { + port_list.resize(port_list_size - 1); + } + status = library_->GetAutoConfiguredCDAQSyncConnections((char*)port_list.data(), port_list_size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(port_list_size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + std::string port_list_utf8; + convert_to_grpc(port_list, &port_list_utf8); + response->set_port_list(port_list_utf8); + nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_port_list())); + return ::grpc::Status::OK; + } + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetBufferAttributeUInt32(::grpc::ServerContext* context, const GetBufferAttributeUInt32Request* request, GetBufferAttributeUInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetBufferAttributeUInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::BufferUInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetBufferAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::BufferUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetBufferAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } + + uInt32 value {}; + auto status = library_->GetBufferAttributeUInt32(task, attribute, &value); if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + return ConvertApiErrorStatusForTaskHandle(context, status, task); } response->set_status(status); + response->set_value(value); return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetDigitalLogicFamilyPowerUpState(::grpc::ServerContext* context, const GetDigitalLogicFamilyPowerUpStateRequest* request, GetDigitalLogicFamilyPowerUpStateResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - int32 logic_family{}; - auto status = library_->GetDigitalLogicFamilyPowerUpState(device_name, &logic_family); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - response->set_logic_family(logic_family); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetDigitalPowerUpStates(::grpc::ServerContext* context, const GetDigitalPowerUpStatesRequest* request, GetDigitalPowerUpStatesResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - auto get_channelName_if = [](const google::protobuf::RepeatedPtrField& vector, int n) -> const char* { - if (vector.size() > n) { - return vector[n].c_str(); - } - return nullptr; - }; - auto channel_name = request->channel_name(); - if (channel_name.size() == 0) { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "No values for channelName were specified"); - } - if (channel_name.size() > 96) { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "More than 96 values for channelName were specified"); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetCalInfoAttributeBool(::grpc::ServerContext* context, const GetCalInfoAttributeBoolRequest* request, GetCalInfoAttributeBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetCalInfoAttributeBoolRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::CalibrationInfoBoolAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetCalInfoAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::CalibrationInfoBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetCalInfoAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } - auto get_state_if = [](std::vector& vector, int n) -> int32* { - if (vector.size() > n) { - return &(vector[n]); + bool32 value {}; + auto status = library_->GetCalInfoAttributeBool(device_name, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } - return nullptr; - }; - std::vector stateVector; - stateVector.resize(channel_name.size()); - auto status = std::static_pointer_cast(library_)->GetDigitalPowerUpStates(device_name, get_channelName_if(channel_name, 0), get_state_if(stateVector, 0), get_channelName_if(channel_name, 1), get_state_if(stateVector, 1), get_channelName_if(channel_name, 2), get_state_if(stateVector, 2), get_channelName_if(channel_name, 3), get_state_if(stateVector, 3), get_channelName_if(channel_name, 4), get_state_if(stateVector, 4), get_channelName_if(channel_name, 5), get_state_if(stateVector, 5), get_channelName_if(channel_name, 6), get_state_if(stateVector, 6), get_channelName_if(channel_name, 7), get_state_if(stateVector, 7), get_channelName_if(channel_name, 8), get_state_if(stateVector, 8), get_channelName_if(channel_name, 9), get_state_if(stateVector, 9), get_channelName_if(channel_name, 10), get_state_if(stateVector, 10), get_channelName_if(channel_name, 11), get_state_if(stateVector, 11), get_channelName_if(channel_name, 12), get_state_if(stateVector, 12), get_channelName_if(channel_name, 13), get_state_if(stateVector, 13), get_channelName_if(channel_name, 14), get_state_if(stateVector, 14), get_channelName_if(channel_name, 15), get_state_if(stateVector, 15), get_channelName_if(channel_name, 16), get_state_if(stateVector, 16), get_channelName_if(channel_name, 17), get_state_if(stateVector, 17), get_channelName_if(channel_name, 18), get_state_if(stateVector, 18), get_channelName_if(channel_name, 19), get_state_if(stateVector, 19), get_channelName_if(channel_name, 20), get_state_if(stateVector, 20), get_channelName_if(channel_name, 21), get_state_if(stateVector, 21), get_channelName_if(channel_name, 22), get_state_if(stateVector, 22), get_channelName_if(channel_name, 23), get_state_if(stateVector, 23), get_channelName_if(channel_name, 24), get_state_if(stateVector, 24), get_channelName_if(channel_name, 25), get_state_if(stateVector, 25), get_channelName_if(channel_name, 26), get_state_if(stateVector, 26), get_channelName_if(channel_name, 27), get_state_if(stateVector, 27), get_channelName_if(channel_name, 28), get_state_if(stateVector, 28), get_channelName_if(channel_name, 29), get_state_if(stateVector, 29), get_channelName_if(channel_name, 30), get_state_if(stateVector, 30), get_channelName_if(channel_name, 31), get_state_if(stateVector, 31), get_channelName_if(channel_name, 32), get_state_if(stateVector, 32), get_channelName_if(channel_name, 33), get_state_if(stateVector, 33), get_channelName_if(channel_name, 34), get_state_if(stateVector, 34), get_channelName_if(channel_name, 35), get_state_if(stateVector, 35), get_channelName_if(channel_name, 36), get_state_if(stateVector, 36), get_channelName_if(channel_name, 37), get_state_if(stateVector, 37), get_channelName_if(channel_name, 38), get_state_if(stateVector, 38), get_channelName_if(channel_name, 39), get_state_if(stateVector, 39), get_channelName_if(channel_name, 40), get_state_if(stateVector, 40), get_channelName_if(channel_name, 41), get_state_if(stateVector, 41), get_channelName_if(channel_name, 42), get_state_if(stateVector, 42), get_channelName_if(channel_name, 43), get_state_if(stateVector, 43), get_channelName_if(channel_name, 44), get_state_if(stateVector, 44), get_channelName_if(channel_name, 45), get_state_if(stateVector, 45), get_channelName_if(channel_name, 46), get_state_if(stateVector, 46), get_channelName_if(channel_name, 47), get_state_if(stateVector, 47), get_channelName_if(channel_name, 48), get_state_if(stateVector, 48), get_channelName_if(channel_name, 49), get_state_if(stateVector, 49), get_channelName_if(channel_name, 50), get_state_if(stateVector, 50), get_channelName_if(channel_name, 51), get_state_if(stateVector, 51), get_channelName_if(channel_name, 52), get_state_if(stateVector, 52), get_channelName_if(channel_name, 53), get_state_if(stateVector, 53), get_channelName_if(channel_name, 54), get_state_if(stateVector, 54), get_channelName_if(channel_name, 55), get_state_if(stateVector, 55), get_channelName_if(channel_name, 56), get_state_if(stateVector, 56), get_channelName_if(channel_name, 57), get_state_if(stateVector, 57), get_channelName_if(channel_name, 58), get_state_if(stateVector, 58), get_channelName_if(channel_name, 59), get_state_if(stateVector, 59), get_channelName_if(channel_name, 60), get_state_if(stateVector, 60), get_channelName_if(channel_name, 61), get_state_if(stateVector, 61), get_channelName_if(channel_name, 62), get_state_if(stateVector, 62), get_channelName_if(channel_name, 63), get_state_if(stateVector, 63), get_channelName_if(channel_name, 64), get_state_if(stateVector, 64), get_channelName_if(channel_name, 65), get_state_if(stateVector, 65), get_channelName_if(channel_name, 66), get_state_if(stateVector, 66), get_channelName_if(channel_name, 67), get_state_if(stateVector, 67), get_channelName_if(channel_name, 68), get_state_if(stateVector, 68), get_channelName_if(channel_name, 69), get_state_if(stateVector, 69), get_channelName_if(channel_name, 70), get_state_if(stateVector, 70), get_channelName_if(channel_name, 71), get_state_if(stateVector, 71), get_channelName_if(channel_name, 72), get_state_if(stateVector, 72), get_channelName_if(channel_name, 73), get_state_if(stateVector, 73), get_channelName_if(channel_name, 74), get_state_if(stateVector, 74), get_channelName_if(channel_name, 75), get_state_if(stateVector, 75), get_channelName_if(channel_name, 76), get_state_if(stateVector, 76), get_channelName_if(channel_name, 77), get_state_if(stateVector, 77), get_channelName_if(channel_name, 78), get_state_if(stateVector, 78), get_channelName_if(channel_name, 79), get_state_if(stateVector, 79), get_channelName_if(channel_name, 80), get_state_if(stateVector, 80), get_channelName_if(channel_name, 81), get_state_if(stateVector, 81), get_channelName_if(channel_name, 82), get_state_if(stateVector, 82), get_channelName_if(channel_name, 83), get_state_if(stateVector, 83), get_channelName_if(channel_name, 84), get_state_if(stateVector, 84), get_channelName_if(channel_name, 85), get_state_if(stateVector, 85), get_channelName_if(channel_name, 86), get_state_if(stateVector, 86), get_channelName_if(channel_name, 87), get_state_if(stateVector, 87), get_channelName_if(channel_name, 88), get_state_if(stateVector, 88), get_channelName_if(channel_name, 89), get_state_if(stateVector, 89), get_channelName_if(channel_name, 90), get_state_if(stateVector, 90), get_channelName_if(channel_name, 91), get_state_if(stateVector, 91), get_channelName_if(channel_name, 92), get_state_if(stateVector, 92), get_channelName_if(channel_name, 93), get_state_if(stateVector, 93), get_channelName_if(channel_name, 94), get_state_if(stateVector, 94), get_channelName_if(channel_name, 95), get_state_if(stateVector, 95), get_channelName_if(channel_name, 96), get_state_if(stateVector, 96)); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; } - response->set_status(status); - for (int i = 0; i < stateVector.size(); ++i) { - response->add_power_up_states(static_cast(stateVector[i])); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetDigitalPullUpPullDownStates(::grpc::ServerContext* context, const GetDigitalPullUpPullDownStatesRequest* request, GetDigitalPullUpPullDownStatesResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - auto get_channelName_if = [](const google::protobuf::RepeatedPtrField& vector, int n) -> const char* { - if (vector.size() > n) { - return vector[n].c_str(); - } - return nullptr; - }; - auto channel_name = request->channel_name(); - if (channel_name.size() == 0) { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "No values for channelName were specified"); - } - if (channel_name.size() > 96) { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "More than 96 values for channelName were specified"); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetCalInfoAttributeDouble(::grpc::ServerContext* context, const GetCalInfoAttributeDoubleRequest* request, GetCalInfoAttributeDoubleResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetCalInfoAttributeDoubleRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::CalibrationInfoDoubleAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetCalInfoAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::CalibrationInfoDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetCalInfoAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } - auto get_state_if = [](std::vector& vector, int n) -> int32* { - if (vector.size() > n) { - return &(vector[n]); + float64 value {}; + auto status = library_->GetCalInfoAttributeDouble(device_name, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } - return nullptr; - }; - std::vector stateVector; - stateVector.resize(channel_name.size()); - auto status = std::static_pointer_cast(library_)->GetDigitalPullUpPullDownStates(device_name, get_channelName_if(channel_name, 0), get_state_if(stateVector, 0), get_channelName_if(channel_name, 1), get_state_if(stateVector, 1), get_channelName_if(channel_name, 2), get_state_if(stateVector, 2), get_channelName_if(channel_name, 3), get_state_if(stateVector, 3), get_channelName_if(channel_name, 4), get_state_if(stateVector, 4), get_channelName_if(channel_name, 5), get_state_if(stateVector, 5), get_channelName_if(channel_name, 6), get_state_if(stateVector, 6), get_channelName_if(channel_name, 7), get_state_if(stateVector, 7), get_channelName_if(channel_name, 8), get_state_if(stateVector, 8), get_channelName_if(channel_name, 9), get_state_if(stateVector, 9), get_channelName_if(channel_name, 10), get_state_if(stateVector, 10), get_channelName_if(channel_name, 11), get_state_if(stateVector, 11), get_channelName_if(channel_name, 12), get_state_if(stateVector, 12), get_channelName_if(channel_name, 13), get_state_if(stateVector, 13), get_channelName_if(channel_name, 14), get_state_if(stateVector, 14), get_channelName_if(channel_name, 15), get_state_if(stateVector, 15), get_channelName_if(channel_name, 16), get_state_if(stateVector, 16), get_channelName_if(channel_name, 17), get_state_if(stateVector, 17), get_channelName_if(channel_name, 18), get_state_if(stateVector, 18), get_channelName_if(channel_name, 19), get_state_if(stateVector, 19), get_channelName_if(channel_name, 20), get_state_if(stateVector, 20), get_channelName_if(channel_name, 21), get_state_if(stateVector, 21), get_channelName_if(channel_name, 22), get_state_if(stateVector, 22), get_channelName_if(channel_name, 23), get_state_if(stateVector, 23), get_channelName_if(channel_name, 24), get_state_if(stateVector, 24), get_channelName_if(channel_name, 25), get_state_if(stateVector, 25), get_channelName_if(channel_name, 26), get_state_if(stateVector, 26), get_channelName_if(channel_name, 27), get_state_if(stateVector, 27), get_channelName_if(channel_name, 28), get_state_if(stateVector, 28), get_channelName_if(channel_name, 29), get_state_if(stateVector, 29), get_channelName_if(channel_name, 30), get_state_if(stateVector, 30), get_channelName_if(channel_name, 31), get_state_if(stateVector, 31), get_channelName_if(channel_name, 32), get_state_if(stateVector, 32), get_channelName_if(channel_name, 33), get_state_if(stateVector, 33), get_channelName_if(channel_name, 34), get_state_if(stateVector, 34), get_channelName_if(channel_name, 35), get_state_if(stateVector, 35), get_channelName_if(channel_name, 36), get_state_if(stateVector, 36), get_channelName_if(channel_name, 37), get_state_if(stateVector, 37), get_channelName_if(channel_name, 38), get_state_if(stateVector, 38), get_channelName_if(channel_name, 39), get_state_if(stateVector, 39), get_channelName_if(channel_name, 40), get_state_if(stateVector, 40), get_channelName_if(channel_name, 41), get_state_if(stateVector, 41), get_channelName_if(channel_name, 42), get_state_if(stateVector, 42), get_channelName_if(channel_name, 43), get_state_if(stateVector, 43), get_channelName_if(channel_name, 44), get_state_if(stateVector, 44), get_channelName_if(channel_name, 45), get_state_if(stateVector, 45), get_channelName_if(channel_name, 46), get_state_if(stateVector, 46), get_channelName_if(channel_name, 47), get_state_if(stateVector, 47), get_channelName_if(channel_name, 48), get_state_if(stateVector, 48), get_channelName_if(channel_name, 49), get_state_if(stateVector, 49), get_channelName_if(channel_name, 50), get_state_if(stateVector, 50), get_channelName_if(channel_name, 51), get_state_if(stateVector, 51), get_channelName_if(channel_name, 52), get_state_if(stateVector, 52), get_channelName_if(channel_name, 53), get_state_if(stateVector, 53), get_channelName_if(channel_name, 54), get_state_if(stateVector, 54), get_channelName_if(channel_name, 55), get_state_if(stateVector, 55), get_channelName_if(channel_name, 56), get_state_if(stateVector, 56), get_channelName_if(channel_name, 57), get_state_if(stateVector, 57), get_channelName_if(channel_name, 58), get_state_if(stateVector, 58), get_channelName_if(channel_name, 59), get_state_if(stateVector, 59), get_channelName_if(channel_name, 60), get_state_if(stateVector, 60), get_channelName_if(channel_name, 61), get_state_if(stateVector, 61), get_channelName_if(channel_name, 62), get_state_if(stateVector, 62), get_channelName_if(channel_name, 63), get_state_if(stateVector, 63), get_channelName_if(channel_name, 64), get_state_if(stateVector, 64), get_channelName_if(channel_name, 65), get_state_if(stateVector, 65), get_channelName_if(channel_name, 66), get_state_if(stateVector, 66), get_channelName_if(channel_name, 67), get_state_if(stateVector, 67), get_channelName_if(channel_name, 68), get_state_if(stateVector, 68), get_channelName_if(channel_name, 69), get_state_if(stateVector, 69), get_channelName_if(channel_name, 70), get_state_if(stateVector, 70), get_channelName_if(channel_name, 71), get_state_if(stateVector, 71), get_channelName_if(channel_name, 72), get_state_if(stateVector, 72), get_channelName_if(channel_name, 73), get_state_if(stateVector, 73), get_channelName_if(channel_name, 74), get_state_if(stateVector, 74), get_channelName_if(channel_name, 75), get_state_if(stateVector, 75), get_channelName_if(channel_name, 76), get_state_if(stateVector, 76), get_channelName_if(channel_name, 77), get_state_if(stateVector, 77), get_channelName_if(channel_name, 78), get_state_if(stateVector, 78), get_channelName_if(channel_name, 79), get_state_if(stateVector, 79), get_channelName_if(channel_name, 80), get_state_if(stateVector, 80), get_channelName_if(channel_name, 81), get_state_if(stateVector, 81), get_channelName_if(channel_name, 82), get_state_if(stateVector, 82), get_channelName_if(channel_name, 83), get_state_if(stateVector, 83), get_channelName_if(channel_name, 84), get_state_if(stateVector, 84), get_channelName_if(channel_name, 85), get_state_if(stateVector, 85), get_channelName_if(channel_name, 86), get_state_if(stateVector, 86), get_channelName_if(channel_name, 87), get_state_if(stateVector, 87), get_channelName_if(channel_name, 88), get_state_if(stateVector, 88), get_channelName_if(channel_name, 89), get_state_if(stateVector, 89), get_channelName_if(channel_name, 90), get_state_if(stateVector, 90), get_channelName_if(channel_name, 91), get_state_if(stateVector, 91), get_channelName_if(channel_name, 92), get_state_if(stateVector, 92), get_channelName_if(channel_name, 93), get_state_if(stateVector, 93), get_channelName_if(channel_name, 94), get_state_if(stateVector, 94), get_channelName_if(channel_name, 95), get_state_if(stateVector, 95), get_channelName_if(channel_name, 96), get_state_if(stateVector, 96)); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; } - response->set_status(status); - for (int i = 0; i < stateVector.size(); ++i) { - response->add_pull_up_pull_down_states(static_cast(stateVector[i])); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetDisconnectedCDAQSyncPorts(::grpc::ServerContext* context, const GetDisconnectedCDAQSyncPortsRequest* request, GetDisconnectedCDAQSyncPortsResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - while (true) { - auto status = library_->GetDisconnectedCDAQSyncPorts(nullptr, 0); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetCalInfoAttributeString(::grpc::ServerContext* context, const GetCalInfoAttributeStringRequest* request, GetCalInfoAttributeStringResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetCalInfoAttributeStringRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::CalibrationInfoStringAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetCalInfoAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::CalibrationInfoStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetCalInfoAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - uInt32 port_list_size = status; - std::string port_list; - if (port_list_size > 0) { - port_list.resize(port_list_size - 1); - } - status = library_->GetDisconnectedCDAQSyncPorts((char*)port_list.data(), port_list_size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(port_list_size)) { - // buffer is now too small, try again - continue; + + while (true) { + auto status = library_->GetCalInfoAttributeString(device_name, attribute, nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + uInt32 size = status; + + std::string value; + if (size > 0) { + value.resize(size - 1); + } + status = library_->GetCalInfoAttributeString(device_name, attribute, (char*)value.data(), size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + std::string value_utf8; + convert_to_grpc(value, &value_utf8); + response->set_value(value_utf8); + nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); + return ::grpc::Status::OK; + } + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetCalInfoAttributeUInt32(::grpc::ServerContext* context, const GetCalInfoAttributeUInt32Request* request, GetCalInfoAttributeUInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetCalInfoAttributeUInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::CalibrationInfoUInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetCalInfoAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::CalibrationInfoUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetCalInfoAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } + + uInt32 value {}; + auto status = library_->GetCalInfoAttributeUInt32(device_name, attribute, &value); if (!status_ok(status)) { return ConvertApiErrorStatusForTaskHandle(context, status, 0); } response->set_status(status); - std::string port_list_utf8; - convert_to_grpc(port_list, &port_list_utf8); - response->set_port_list(port_list_utf8); - nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_port_list())); + response->set_value(value); return ::grpc::Status::OK; } - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetErrorString(::grpc::ServerContext* context, const GetErrorStringRequest* request, GetErrorStringResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - int32 error_code = request->error_code(); - - while (true) { - auto status = library_->GetErrorString(error_code, nullptr, 0); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetChanAttributeBool(::grpc::ServerContext* context, const GetChanAttributeBoolRequest* request, GetChanAttributeBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto channel_mbcs = convert_from_grpc(request->channel()); + auto channel = channel_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetChanAttributeBoolRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ChannelBoolAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetChanAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ChannelBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetChanAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - uInt32 buffer_size = status; - std::string error_string; - if (buffer_size > 0) { - error_string.resize(buffer_size - 1); - } - status = library_->GetErrorString(error_code, (char*)error_string.data(), buffer_size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(buffer_size)) { - // buffer is now too small, try again - continue; - } + bool32 value {}; + auto status = library_->GetChanAttributeBool(task, channel, attribute, &value); if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + return ConvertApiErrorStatusForTaskHandle(context, status, task); } response->set_status(status); - std::string error_string_utf8; - convert_to_grpc(error_string, &error_string_utf8); - response->set_error_string(error_string_utf8); - nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_error_string())); + response->set_value(value); return ::grpc::Status::OK; } - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetExportedSignalAttributeBool(::grpc::ServerContext* context, const GetExportedSignalAttributeBoolRequest* request, GetExportedSignalAttributeBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetExportedSignalAttributeBoolRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ExportSignalBoolAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetExportedSignalAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ExportSignalBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetExportedSignalAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - bool32 value{}; - auto status = library_->GetExportedSignalAttributeBool(task, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetExportedSignalAttributeDouble(::grpc::ServerContext* context, const GetExportedSignalAttributeDoubleRequest* request, GetExportedSignalAttributeDoubleResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetExportedSignalAttributeDoubleRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ExportSignalDoubleAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetExportedSignalAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ExportSignalDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetExportedSignalAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - float64 value{}; - auto status = library_->GetExportedSignalAttributeDouble(task, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetExportedSignalAttributeInt32(::grpc::ServerContext* context, const GetExportedSignalAttributeInt32Request* request, GetExportedSignalAttributeInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetExportedSignalAttributeInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ExportSignalInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetExportedSignalAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ExportSignalInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetExportedSignalAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - int32 value{}; - auto status = library_->GetExportedSignalAttributeInt32(task, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - auto checked_convert_value = [](auto raw_value) { - bool raw_value_is_valid = nidaqmx_grpc::ExportSignalInt32AttributeValues_IsValid(raw_value); - auto valid_enum_value = raw_value_is_valid ? raw_value : 0; - return static_cast(valid_enum_value); - }; - response->set_value(checked_convert_value(value)); - response->set_value_raw(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetExportedSignalAttributeString(::grpc::ServerContext* context, const GetExportedSignalAttributeStringRequest* request, GetExportedSignalAttributeStringResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetExportedSignalAttributeStringRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ExportSignalStringAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetExportedSignalAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ExportSignalStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetExportedSignalAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetChanAttributeDouble(::grpc::ServerContext* context, const GetChanAttributeDoubleRequest* request, GetChanAttributeDoubleResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto channel_mbcs = convert_from_grpc(request->channel()); + auto channel = channel_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetChanAttributeDoubleRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ChannelDoubleAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetChanAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ChannelDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetChanAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - } - while (true) { - auto status = library_->GetExportedSignalAttributeString(task, attribute, nullptr, 0); + float64 value {}; + auto status = library_->GetChanAttributeDouble(task, channel, attribute, &value); if (!status_ok(status)) { return ConvertApiErrorStatusForTaskHandle(context, status, task); } - uInt32 size = status; + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetChanAttributeDoubleArray(::grpc::ServerContext* context, const GetChanAttributeDoubleArrayRequest* request, GetChanAttributeDoubleArrayResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto channel_mbcs = convert_from_grpc(request->channel()); + auto channel = channel_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetChanAttributeDoubleArrayRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ChannelDoubleArrayAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetChanAttributeDoubleArrayRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ChannelDoubleArrayAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetChanAttributeDoubleArrayRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } - std::string value; - if (size > 0) { - value.resize(size - 1); + + while (true) { + auto status = library_->GetChanAttributeDoubleArray(task, channel, attribute, nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + uInt32 size = status; + + response->mutable_value()->Resize(size, 0); + float64* value = response->mutable_value()->mutable_data(); + status = library_->GetChanAttributeDoubleArray(task, channel, attribute, value, size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; } - status = library_->GetExportedSignalAttributeString(task, attribute, (char*)value.data(), size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { - // buffer is now too small, try again - continue; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetChanAttributeInt32(::grpc::ServerContext* context, const GetChanAttributeInt32Request* request, GetChanAttributeInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto channel_mbcs = convert_from_grpc(request->channel()); + auto channel = channel_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetChanAttributeInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ChannelInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetChanAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ChannelInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetChanAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } + + int32 value {}; + auto status = library_->GetChanAttributeInt32(task, channel, attribute, &value); if (!status_ok(status)) { return ConvertApiErrorStatusForTaskHandle(context, status, task); } response->set_status(status); - std::string value_utf8; - convert_to_grpc(value, &value_utf8); - response->set_value(value_utf8); - nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); + auto checked_convert_value = [](auto raw_value) { + bool raw_value_is_valid = nidaqmx_grpc::ChannelInt32AttributeValues_IsValid(raw_value); + auto valid_enum_value = raw_value_is_valid ? raw_value : 0; + return static_cast(valid_enum_value); + }; + response->set_value(checked_convert_value(value)); + response->set_value_raw(value); return ::grpc::Status::OK; } - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetExportedSignalAttributeUInt32(::grpc::ServerContext* context, const GetExportedSignalAttributeUInt32Request* request, GetExportedSignalAttributeUInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetExportedSignalAttributeUInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ExportSignalUInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetExportedSignalAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ExportSignalUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetExportedSignalAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - uInt32 value{}; - auto status = library_->GetExportedSignalAttributeUInt32(task, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetExtCalLastDateAndTime(::grpc::ServerContext* context, const GetExtCalLastDateAndTimeRequest* request, GetExtCalLastDateAndTimeResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - uInt32 year{}; - uInt32 month{}; - uInt32 day{}; - uInt32 hour{}; - uInt32 minute{}; - auto status = library_->GetExtCalLastDateAndTime(device_name, &year, &month, &day, &hour, &minute); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - response->set_year(year); - response->set_month(month); - response->set_day(day); - response->set_hour(hour); - response->set_minute(minute); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetFirstSampClkWhen(::grpc::ServerContext* context, const GetFirstSampClkWhenRequest* request, GetFirstSampClkWhenResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - CVIAbsoluteTime data{}; - auto status = library_->GetFirstSampClkWhen(task, &data); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - convert_to_grpc(data, response->mutable_data()); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetChanAttributeString(::grpc::ServerContext* context, const GetChanAttributeStringRequest* request, GetChanAttributeStringResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto channel_mbcs = convert_from_grpc(request->channel()); + auto channel = channel_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetChanAttributeStringRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ChannelStringAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetChanAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ChannelStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetChanAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetFirstSampTimestampVal(::grpc::ServerContext* context, const GetFirstSampTimestampValRequest* request, GetFirstSampTimestampValResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - CVIAbsoluteTime data{}; - auto status = library_->GetFirstSampTimestampVal(task, &data); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - convert_to_grpc(data, response->mutable_data()); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetNthTaskChannel(::grpc::ServerContext* context, const GetNthTaskChannelRequest* request, GetNthTaskChannelResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - uInt32 index = request->index(); + while (true) { + auto status = library_->GetChanAttributeString(task, channel, attribute, nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + uInt32 size = status; - while (true) { - auto status = library_->GetNthTaskChannel(task, index, nullptr, 0); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + std::string value; + if (size > 0) { + value.resize(size - 1); + } + status = library_->GetChanAttributeString(task, channel, attribute, (char*)value.data(), size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + std::string value_utf8; + convert_to_grpc(value, &value_utf8); + response->set_value(value_utf8); + nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); + return ::grpc::Status::OK; + } + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetChanAttributeUInt32(::grpc::ServerContext* context, const GetChanAttributeUInt32Request* request, GetChanAttributeUInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto channel_mbcs = convert_from_grpc(request->channel()); + auto channel = channel_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetChanAttributeUInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ChannelUInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetChanAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ChannelUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetChanAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - int32 buffer_size = status; - std::string buffer; - if (buffer_size > 0) { - buffer.resize(buffer_size - 1); - } - status = library_->GetNthTaskChannel(task, index, (char*)buffer.data(), buffer_size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(buffer_size)) { - // buffer is now too small, try again - continue; - } + uInt32 value {}; + auto status = library_->GetChanAttributeUInt32(task, channel, attribute, &value); if (!status_ok(status)) { return ConvertApiErrorStatusForTaskHandle(context, status, task); } response->set_status(status); - std::string buffer_utf8; - convert_to_grpc(buffer, &buffer_utf8); - response->set_buffer(buffer_utf8); - nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_buffer())); + response->set_value(value); return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetNthTaskDevice(::grpc::ServerContext* context, const GetNthTaskDeviceRequest* request, GetNthTaskDeviceResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - uInt32 index = request->index(); - while (true) { - auto status = library_->GetNthTaskDevice(task, index, nullptr, 0); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetDeviceAttributeBool(::grpc::ServerContext* context, const GetDeviceAttributeBoolRequest* request, GetDeviceAttributeBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetDeviceAttributeBoolRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::DeviceBoolAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetDeviceAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::DeviceBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetDeviceAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - int32 buffer_size = status; - std::string buffer; - if (buffer_size > 0) { - buffer.resize(buffer_size - 1); - } - status = library_->GetNthTaskDevice(task, index, (char*)buffer.data(), buffer_size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(buffer_size)) { - // buffer is now too small, try again - continue; - } + bool32 value {}; + auto status = library_->GetDeviceAttributeBool(device_name, attribute, &value); if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } response->set_status(status); - std::string buffer_utf8; - convert_to_grpc(buffer, &buffer_utf8); - response->set_buffer(buffer_utf8); - nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_buffer())); + response->set_value(value); return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetNthTaskReadChannel(::grpc::ServerContext* context, const GetNthTaskReadChannelRequest* request, GetNthTaskReadChannelResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - uInt32 index = request->index(); - while (true) { - auto status = library_->GetNthTaskReadChannel(task, index, nullptr, 0); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetDeviceAttributeDouble(::grpc::ServerContext* context, const GetDeviceAttributeDoubleRequest* request, GetDeviceAttributeDoubleResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetDeviceAttributeDoubleRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::DeviceDoubleAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetDeviceAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::DeviceDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetDeviceAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - int32 buffer_size = status; - std::string buffer; - if (buffer_size > 0) { - buffer.resize(buffer_size - 1); - } - status = library_->GetNthTaskReadChannel(task, index, (char*)buffer.data(), buffer_size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(buffer_size)) { - // buffer is now too small, try again - continue; - } + float64 value {}; + auto status = library_->GetDeviceAttributeDouble(device_name, attribute, &value); if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } response->set_status(status); - std::string buffer_utf8; - convert_to_grpc(buffer, &buffer_utf8); - response->set_buffer(buffer_utf8); - nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_buffer())); + response->set_value(value); return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetPersistedChanAttributeBool(::grpc::ServerContext* context, const GetPersistedChanAttributeBoolRequest* request, GetPersistedChanAttributeBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto channel_mbcs = convert_from_grpc(request->channel()); - auto channel = channel_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetPersistedChanAttributeBoolRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::PersistedChannelBoolAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetPersistedChanAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::PersistedChannelBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetPersistedChanAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - bool32 value{}; - auto status = library_->GetPersistedChanAttributeBool(channel, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetPersistedChanAttributeString(::grpc::ServerContext* context, const GetPersistedChanAttributeStringRequest* request, GetPersistedChanAttributeStringResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto channel_mbcs = convert_from_grpc(request->channel()); - auto channel = channel_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetPersistedChanAttributeStringRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::PersistedChannelStringAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetPersistedChanAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::PersistedChannelStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetDeviceAttributeDoubleArray(::grpc::ServerContext* context, const GetDeviceAttributeDoubleArrayRequest* request, GetDeviceAttributeDoubleArrayResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetDeviceAttributeDoubleArrayRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::DeviceDoubleArrayAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetDeviceAttributeDoubleArrayRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::DeviceDoubleArrayAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetDeviceAttributeDoubleArrayRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::GetPersistedChanAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + + while (true) { + auto status = library_->GetDeviceAttributeDoubleArray(device_name, attribute, nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + uInt32 size = status; + + response->mutable_value()->Resize(size, 0); + float64* value = response->mutable_value()->mutable_data(); + status = library_->GetDeviceAttributeDoubleArray(device_name, attribute, value, size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + return ::grpc::Status::OK; } } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } - while (true) { - auto status = library_->GetPersistedChanAttributeString(channel, attribute, nullptr, 0); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetDeviceAttributeInt32(::grpc::ServerContext* context, const GetDeviceAttributeInt32Request* request, GetDeviceAttributeInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetDeviceAttributeInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::DeviceInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetDeviceAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::DeviceInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetDeviceAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - uInt32 size = status; - std::string value; - if (size > 0) { - value.resize(size - 1); - } - status = library_->GetPersistedChanAttributeString(channel, attribute, (char*)value.data(), size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { - // buffer is now too small, try again - continue; - } + int32 value {}; + auto status = library_->GetDeviceAttributeInt32(device_name, attribute, &value); if (!status_ok(status)) { return ConvertApiErrorStatusForTaskHandle(context, status, 0); } response->set_status(status); - std::string value_utf8; - convert_to_grpc(value, &value_utf8); - response->set_value(value_utf8); - nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); + auto checked_convert_value = [](auto raw_value) { + bool raw_value_is_valid = nidaqmx_grpc::DeviceInt32AttributeValues_IsValid(raw_value); + auto valid_enum_value = raw_value_is_valid ? raw_value : 0; + return static_cast(valid_enum_value); + }; + response->set_value(checked_convert_value(value)); + response->set_value_raw(value); return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetPersistedScaleAttributeBool(::grpc::ServerContext* context, const GetPersistedScaleAttributeBoolRequest* request, GetPersistedScaleAttributeBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto scale_name_mbcs = convert_from_grpc(request->scale_name()); - auto scale_name = scale_name_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetPersistedScaleAttributeBoolRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::PersistedScaleBoolAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetPersistedScaleAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::PersistedScaleBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetPersistedScaleAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - bool32 value{}; - auto status = library_->GetPersistedScaleAttributeBool(scale_name, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetPersistedScaleAttributeString(::grpc::ServerContext* context, const GetPersistedScaleAttributeStringRequest* request, GetPersistedScaleAttributeStringResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto scale_name_mbcs = convert_from_grpc(request->scale_name()); - auto scale_name = scale_name_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetPersistedScaleAttributeStringRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::PersistedScaleStringAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetPersistedScaleAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::PersistedScaleStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetDeviceAttributeInt32Array(::grpc::ServerContext* context, const GetDeviceAttributeInt32ArrayRequest* request, GetDeviceAttributeInt32ArrayResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetDeviceAttributeInt32ArrayRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::DeviceInt32ArrayAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetDeviceAttributeInt32ArrayRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::DeviceInt32ArrayAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetDeviceAttributeInt32ArrayRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::GetPersistedScaleAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + + while (true) { + auto status = library_->GetDeviceAttributeInt32Array(device_name, attribute, nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + uInt32 size = status; + + response->mutable_value_raw()->Resize(size, 0); + int32* value = reinterpret_cast(response->mutable_value_raw()->mutable_data()); + status = library_->GetDeviceAttributeInt32Array(device_name, attribute, value, size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + auto checked_convert_value = [](auto raw_value) { + bool raw_value_is_valid = nidaqmx_grpc::DeviceInt32AttributeValues_IsValid(raw_value); + auto valid_enum_value = raw_value_is_valid ? raw_value : 0; + return static_cast(valid_enum_value); + }; + response->mutable_value()->Clear(); + response->mutable_value()->Reserve(size); + std::transform( + response->value_raw().begin(), + response->value_raw().begin() + size, + google::protobuf::RepeatedFieldBackInserter(response->mutable_value()), + [&](auto x) { + return checked_convert_value(x); + }); + return ::grpc::Status::OK; } } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } - while (true) { - auto status = library_->GetPersistedScaleAttributeString(scale_name, attribute, nullptr, 0); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetDeviceAttributeString(::grpc::ServerContext* context, const GetDeviceAttributeStringRequest* request, GetDeviceAttributeStringResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetDeviceAttributeStringRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::DeviceStringAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetDeviceAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::DeviceStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetDeviceAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - uInt32 size = status; - std::string value; - if (size > 0) { - value.resize(size - 1); - } - status = library_->GetPersistedScaleAttributeString(scale_name, attribute, (char*)value.data(), size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { - // buffer is now too small, try again - continue; + + while (true) { + auto status = library_->GetDeviceAttributeString(device_name, attribute, nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + uInt32 size = status; + + std::string value; + if (size > 0) { + value.resize(size - 1); + } + status = library_->GetDeviceAttributeString(device_name, attribute, (char*)value.data(), size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + std::string value_utf8; + convert_to_grpc(value, &value_utf8); + response->set_value(value_utf8); + nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); + return ::grpc::Status::OK; + } + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetDeviceAttributeUInt32(::grpc::ServerContext* context, const GetDeviceAttributeUInt32Request* request, GetDeviceAttributeUInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetDeviceAttributeUInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::DeviceUInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetDeviceAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::DeviceUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetDeviceAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } + + uInt32 value {}; + auto status = library_->GetDeviceAttributeUInt32(device_name, attribute, &value); if (!status_ok(status)) { return ConvertApiErrorStatusForTaskHandle(context, status, 0); } response->set_status(status); - std::string value_utf8; - convert_to_grpc(value, &value_utf8); - response->set_value(value_utf8); - nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); + response->set_value(value); return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetPersistedTaskAttributeBool(::grpc::ServerContext* context, const GetPersistedTaskAttributeBoolRequest* request, GetPersistedTaskAttributeBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_name_mbcs = convert_from_grpc(request->task_name()); - auto task_name = task_name_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetPersistedTaskAttributeBoolRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::PersistedTaskBoolAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetPersistedTaskAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::PersistedTaskBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetPersistedTaskAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - bool32 value{}; - auto status = library_->GetPersistedTaskAttributeBool(task_name, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetPersistedTaskAttributeString(::grpc::ServerContext* context, const GetPersistedTaskAttributeStringRequest* request, GetPersistedTaskAttributeStringResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_name_mbcs = convert_from_grpc(request->task_name()); - auto task_name = task_name_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetPersistedTaskAttributeStringRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::PersistedTaskStringAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetPersistedTaskAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::PersistedTaskStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetDeviceAttributeUInt32Array(::grpc::ServerContext* context, const GetDeviceAttributeUInt32ArrayRequest* request, GetDeviceAttributeUInt32ArrayResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetDeviceAttributeUInt32ArrayRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::DeviceUInt32ArrayAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetDeviceAttributeUInt32ArrayRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::DeviceUInt32ArrayAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetDeviceAttributeUInt32ArrayRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::GetPersistedTaskAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + + while (true) { + auto status = library_->GetDeviceAttributeUInt32Array(device_name, attribute, nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + uInt32 size = status; + + response->mutable_value()->Resize(size, 0); + uInt32* value = reinterpret_cast(response->mutable_value()->mutable_data()); + status = library_->GetDeviceAttributeUInt32Array(device_name, attribute, value, size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + return ::grpc::Status::OK; } } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } - while (true) { - auto status = library_->GetPersistedTaskAttributeString(task_name, attribute, nullptr, 0); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetDigitalLogicFamilyPowerUpState(::grpc::ServerContext* context, const GetDigitalLogicFamilyPowerUpStateRequest* request, GetDigitalLogicFamilyPowerUpStateResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + int32 logic_family {}; + auto status = library_->GetDigitalLogicFamilyPowerUpState(device_name, &logic_family); if (!status_ok(status)) { return ConvertApiErrorStatusForTaskHandle(context, status, 0); } - uInt32 size = status; + response->set_status(status); + response->set_logic_family(logic_family); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } - std::string value; - if (size > 0) { - value.resize(size - 1); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetDigitalPowerUpStates(::grpc::ServerContext* context, const GetDigitalPowerUpStatesRequest* request, GetDigitalPowerUpStatesResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + auto get_channelName_if = [](const google::protobuf::RepeatedPtrField& vector, int n) -> const char* { + if (vector.size() > n) { + return vector[n].c_str(); + } + return nullptr; + }; + auto channel_name = request->channel_name(); + if (channel_name.size() == 0) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "No values for channelName were specified"); } - status = library_->GetPersistedTaskAttributeString(task_name, attribute, (char*)value.data(), size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { - // buffer is now too small, try again - continue; + if (channel_name.size() > 96) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "More than 96 values for channelName were specified"); } + + auto get_state_if = [](std::vector& vector, int n) -> int32* { + if (vector.size() > n) { + return &(vector[n]); + } + return nullptr; + }; + std::vector stateVector; + stateVector.resize(channel_name.size()); + auto status = std::static_pointer_cast(library_)->GetDigitalPowerUpStates(device_name, get_channelName_if(channel_name, 0), get_state_if(stateVector, 0), get_channelName_if(channel_name, 1), get_state_if(stateVector, 1), get_channelName_if(channel_name, 2), get_state_if(stateVector, 2), get_channelName_if(channel_name, 3), get_state_if(stateVector, 3), get_channelName_if(channel_name, 4), get_state_if(stateVector, 4), get_channelName_if(channel_name, 5), get_state_if(stateVector, 5), get_channelName_if(channel_name, 6), get_state_if(stateVector, 6), get_channelName_if(channel_name, 7), get_state_if(stateVector, 7), get_channelName_if(channel_name, 8), get_state_if(stateVector, 8), get_channelName_if(channel_name, 9), get_state_if(stateVector, 9), get_channelName_if(channel_name, 10), get_state_if(stateVector, 10), get_channelName_if(channel_name, 11), get_state_if(stateVector, 11), get_channelName_if(channel_name, 12), get_state_if(stateVector, 12), get_channelName_if(channel_name, 13), get_state_if(stateVector, 13), get_channelName_if(channel_name, 14), get_state_if(stateVector, 14), get_channelName_if(channel_name, 15), get_state_if(stateVector, 15), get_channelName_if(channel_name, 16), get_state_if(stateVector, 16), get_channelName_if(channel_name, 17), get_state_if(stateVector, 17), get_channelName_if(channel_name, 18), get_state_if(stateVector, 18), get_channelName_if(channel_name, 19), get_state_if(stateVector, 19), get_channelName_if(channel_name, 20), get_state_if(stateVector, 20), get_channelName_if(channel_name, 21), get_state_if(stateVector, 21), get_channelName_if(channel_name, 22), get_state_if(stateVector, 22), get_channelName_if(channel_name, 23), get_state_if(stateVector, 23), get_channelName_if(channel_name, 24), get_state_if(stateVector, 24), get_channelName_if(channel_name, 25), get_state_if(stateVector, 25), get_channelName_if(channel_name, 26), get_state_if(stateVector, 26), get_channelName_if(channel_name, 27), get_state_if(stateVector, 27), get_channelName_if(channel_name, 28), get_state_if(stateVector, 28), get_channelName_if(channel_name, 29), get_state_if(stateVector, 29), get_channelName_if(channel_name, 30), get_state_if(stateVector, 30), get_channelName_if(channel_name, 31), get_state_if(stateVector, 31), get_channelName_if(channel_name, 32), get_state_if(stateVector, 32), get_channelName_if(channel_name, 33), get_state_if(stateVector, 33), get_channelName_if(channel_name, 34), get_state_if(stateVector, 34), get_channelName_if(channel_name, 35), get_state_if(stateVector, 35), get_channelName_if(channel_name, 36), get_state_if(stateVector, 36), get_channelName_if(channel_name, 37), get_state_if(stateVector, 37), get_channelName_if(channel_name, 38), get_state_if(stateVector, 38), get_channelName_if(channel_name, 39), get_state_if(stateVector, 39), get_channelName_if(channel_name, 40), get_state_if(stateVector, 40), get_channelName_if(channel_name, 41), get_state_if(stateVector, 41), get_channelName_if(channel_name, 42), get_state_if(stateVector, 42), get_channelName_if(channel_name, 43), get_state_if(stateVector, 43), get_channelName_if(channel_name, 44), get_state_if(stateVector, 44), get_channelName_if(channel_name, 45), get_state_if(stateVector, 45), get_channelName_if(channel_name, 46), get_state_if(stateVector, 46), get_channelName_if(channel_name, 47), get_state_if(stateVector, 47), get_channelName_if(channel_name, 48), get_state_if(stateVector, 48), get_channelName_if(channel_name, 49), get_state_if(stateVector, 49), get_channelName_if(channel_name, 50), get_state_if(stateVector, 50), get_channelName_if(channel_name, 51), get_state_if(stateVector, 51), get_channelName_if(channel_name, 52), get_state_if(stateVector, 52), get_channelName_if(channel_name, 53), get_state_if(stateVector, 53), get_channelName_if(channel_name, 54), get_state_if(stateVector, 54), get_channelName_if(channel_name, 55), get_state_if(stateVector, 55), get_channelName_if(channel_name, 56), get_state_if(stateVector, 56), get_channelName_if(channel_name, 57), get_state_if(stateVector, 57), get_channelName_if(channel_name, 58), get_state_if(stateVector, 58), get_channelName_if(channel_name, 59), get_state_if(stateVector, 59), get_channelName_if(channel_name, 60), get_state_if(stateVector, 60), get_channelName_if(channel_name, 61), get_state_if(stateVector, 61), get_channelName_if(channel_name, 62), get_state_if(stateVector, 62), get_channelName_if(channel_name, 63), get_state_if(stateVector, 63), get_channelName_if(channel_name, 64), get_state_if(stateVector, 64), get_channelName_if(channel_name, 65), get_state_if(stateVector, 65), get_channelName_if(channel_name, 66), get_state_if(stateVector, 66), get_channelName_if(channel_name, 67), get_state_if(stateVector, 67), get_channelName_if(channel_name, 68), get_state_if(stateVector, 68), get_channelName_if(channel_name, 69), get_state_if(stateVector, 69), get_channelName_if(channel_name, 70), get_state_if(stateVector, 70), get_channelName_if(channel_name, 71), get_state_if(stateVector, 71), get_channelName_if(channel_name, 72), get_state_if(stateVector, 72), get_channelName_if(channel_name, 73), get_state_if(stateVector, 73), get_channelName_if(channel_name, 74), get_state_if(stateVector, 74), get_channelName_if(channel_name, 75), get_state_if(stateVector, 75), get_channelName_if(channel_name, 76), get_state_if(stateVector, 76), get_channelName_if(channel_name, 77), get_state_if(stateVector, 77), get_channelName_if(channel_name, 78), get_state_if(stateVector, 78), get_channelName_if(channel_name, 79), get_state_if(stateVector, 79), get_channelName_if(channel_name, 80), get_state_if(stateVector, 80), get_channelName_if(channel_name, 81), get_state_if(stateVector, 81), get_channelName_if(channel_name, 82), get_state_if(stateVector, 82), get_channelName_if(channel_name, 83), get_state_if(stateVector, 83), get_channelName_if(channel_name, 84), get_state_if(stateVector, 84), get_channelName_if(channel_name, 85), get_state_if(stateVector, 85), get_channelName_if(channel_name, 86), get_state_if(stateVector, 86), get_channelName_if(channel_name, 87), get_state_if(stateVector, 87), get_channelName_if(channel_name, 88), get_state_if(stateVector, 88), get_channelName_if(channel_name, 89), get_state_if(stateVector, 89), get_channelName_if(channel_name, 90), get_state_if(stateVector, 90), get_channelName_if(channel_name, 91), get_state_if(stateVector, 91), get_channelName_if(channel_name, 92), get_state_if(stateVector, 92), get_channelName_if(channel_name, 93), get_state_if(stateVector, 93), get_channelName_if(channel_name, 94), get_state_if(stateVector, 94), get_channelName_if(channel_name, 95), get_state_if(stateVector, 95), get_channelName_if(channel_name, 96), get_state_if(stateVector, 96)); if (!status_ok(status)) { return ConvertApiErrorStatusForTaskHandle(context, status, 0); } response->set_status(status); - std::string value_utf8; - convert_to_grpc(value, &value_utf8); - response->set_value(value_utf8); - nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); + for (int i = 0; i < stateVector.size(); ++i) { + response->add_power_up_states(static_cast(stateVector[i])); + } return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetPhysicalChanAttributeBool(::grpc::ServerContext* context, const GetPhysicalChanAttributeBoolRequest* request, GetPhysicalChanAttributeBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetPhysicalChanAttributeBoolRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::PhysicalChannelBoolAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetPhysicalChanAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::PhysicalChannelBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetPhysicalChanAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - bool32 value{}; - auto status = library_->GetPhysicalChanAttributeBool(physical_channel, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetPhysicalChanAttributeBytes(::grpc::ServerContext* context, const GetPhysicalChanAttributeBytesRequest* request, GetPhysicalChanAttributeBytesResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetPhysicalChanAttributeBytesRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::PhysicalChannelBytesAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetPhysicalChanAttributeBytesRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::PhysicalChannelBytesAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetPhysicalChanAttributeBytesRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetDigitalPullUpPullDownStates(::grpc::ServerContext* context, const GetDigitalPullUpPullDownStatesRequest* request, GetDigitalPullUpPullDownStatesResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - - while (true) { - auto status = library_->GetPhysicalChanAttributeBytes(physical_channel, attribute, nullptr, 0); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + auto get_channelName_if = [](const google::protobuf::RepeatedPtrField& vector, int n) -> const char* { + if (vector.size() > n) { + return vector[n].c_str(); + } + return nullptr; + }; + auto channel_name = request->channel_name(); + if (channel_name.size() == 0) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "No values for channelName were specified"); } - uInt32 size = status; - - std::string value(size, '\0'); - status = library_->GetPhysicalChanAttributeBytes(physical_channel, attribute, (uInt8*)value.data(), size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { - // buffer is now too small, try again - continue; + if (channel_name.size() > 96) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "More than 96 values for channelName were specified"); } + + auto get_state_if = [](std::vector& vector, int n) -> int32* { + if (vector.size() > n) { + return &(vector[n]); + } + return nullptr; + }; + std::vector stateVector; + stateVector.resize(channel_name.size()); + auto status = std::static_pointer_cast(library_)->GetDigitalPullUpPullDownStates(device_name, get_channelName_if(channel_name, 0), get_state_if(stateVector, 0), get_channelName_if(channel_name, 1), get_state_if(stateVector, 1), get_channelName_if(channel_name, 2), get_state_if(stateVector, 2), get_channelName_if(channel_name, 3), get_state_if(stateVector, 3), get_channelName_if(channel_name, 4), get_state_if(stateVector, 4), get_channelName_if(channel_name, 5), get_state_if(stateVector, 5), get_channelName_if(channel_name, 6), get_state_if(stateVector, 6), get_channelName_if(channel_name, 7), get_state_if(stateVector, 7), get_channelName_if(channel_name, 8), get_state_if(stateVector, 8), get_channelName_if(channel_name, 9), get_state_if(stateVector, 9), get_channelName_if(channel_name, 10), get_state_if(stateVector, 10), get_channelName_if(channel_name, 11), get_state_if(stateVector, 11), get_channelName_if(channel_name, 12), get_state_if(stateVector, 12), get_channelName_if(channel_name, 13), get_state_if(stateVector, 13), get_channelName_if(channel_name, 14), get_state_if(stateVector, 14), get_channelName_if(channel_name, 15), get_state_if(stateVector, 15), get_channelName_if(channel_name, 16), get_state_if(stateVector, 16), get_channelName_if(channel_name, 17), get_state_if(stateVector, 17), get_channelName_if(channel_name, 18), get_state_if(stateVector, 18), get_channelName_if(channel_name, 19), get_state_if(stateVector, 19), get_channelName_if(channel_name, 20), get_state_if(stateVector, 20), get_channelName_if(channel_name, 21), get_state_if(stateVector, 21), get_channelName_if(channel_name, 22), get_state_if(stateVector, 22), get_channelName_if(channel_name, 23), get_state_if(stateVector, 23), get_channelName_if(channel_name, 24), get_state_if(stateVector, 24), get_channelName_if(channel_name, 25), get_state_if(stateVector, 25), get_channelName_if(channel_name, 26), get_state_if(stateVector, 26), get_channelName_if(channel_name, 27), get_state_if(stateVector, 27), get_channelName_if(channel_name, 28), get_state_if(stateVector, 28), get_channelName_if(channel_name, 29), get_state_if(stateVector, 29), get_channelName_if(channel_name, 30), get_state_if(stateVector, 30), get_channelName_if(channel_name, 31), get_state_if(stateVector, 31), get_channelName_if(channel_name, 32), get_state_if(stateVector, 32), get_channelName_if(channel_name, 33), get_state_if(stateVector, 33), get_channelName_if(channel_name, 34), get_state_if(stateVector, 34), get_channelName_if(channel_name, 35), get_state_if(stateVector, 35), get_channelName_if(channel_name, 36), get_state_if(stateVector, 36), get_channelName_if(channel_name, 37), get_state_if(stateVector, 37), get_channelName_if(channel_name, 38), get_state_if(stateVector, 38), get_channelName_if(channel_name, 39), get_state_if(stateVector, 39), get_channelName_if(channel_name, 40), get_state_if(stateVector, 40), get_channelName_if(channel_name, 41), get_state_if(stateVector, 41), get_channelName_if(channel_name, 42), get_state_if(stateVector, 42), get_channelName_if(channel_name, 43), get_state_if(stateVector, 43), get_channelName_if(channel_name, 44), get_state_if(stateVector, 44), get_channelName_if(channel_name, 45), get_state_if(stateVector, 45), get_channelName_if(channel_name, 46), get_state_if(stateVector, 46), get_channelName_if(channel_name, 47), get_state_if(stateVector, 47), get_channelName_if(channel_name, 48), get_state_if(stateVector, 48), get_channelName_if(channel_name, 49), get_state_if(stateVector, 49), get_channelName_if(channel_name, 50), get_state_if(stateVector, 50), get_channelName_if(channel_name, 51), get_state_if(stateVector, 51), get_channelName_if(channel_name, 52), get_state_if(stateVector, 52), get_channelName_if(channel_name, 53), get_state_if(stateVector, 53), get_channelName_if(channel_name, 54), get_state_if(stateVector, 54), get_channelName_if(channel_name, 55), get_state_if(stateVector, 55), get_channelName_if(channel_name, 56), get_state_if(stateVector, 56), get_channelName_if(channel_name, 57), get_state_if(stateVector, 57), get_channelName_if(channel_name, 58), get_state_if(stateVector, 58), get_channelName_if(channel_name, 59), get_state_if(stateVector, 59), get_channelName_if(channel_name, 60), get_state_if(stateVector, 60), get_channelName_if(channel_name, 61), get_state_if(stateVector, 61), get_channelName_if(channel_name, 62), get_state_if(stateVector, 62), get_channelName_if(channel_name, 63), get_state_if(stateVector, 63), get_channelName_if(channel_name, 64), get_state_if(stateVector, 64), get_channelName_if(channel_name, 65), get_state_if(stateVector, 65), get_channelName_if(channel_name, 66), get_state_if(stateVector, 66), get_channelName_if(channel_name, 67), get_state_if(stateVector, 67), get_channelName_if(channel_name, 68), get_state_if(stateVector, 68), get_channelName_if(channel_name, 69), get_state_if(stateVector, 69), get_channelName_if(channel_name, 70), get_state_if(stateVector, 70), get_channelName_if(channel_name, 71), get_state_if(stateVector, 71), get_channelName_if(channel_name, 72), get_state_if(stateVector, 72), get_channelName_if(channel_name, 73), get_state_if(stateVector, 73), get_channelName_if(channel_name, 74), get_state_if(stateVector, 74), get_channelName_if(channel_name, 75), get_state_if(stateVector, 75), get_channelName_if(channel_name, 76), get_state_if(stateVector, 76), get_channelName_if(channel_name, 77), get_state_if(stateVector, 77), get_channelName_if(channel_name, 78), get_state_if(stateVector, 78), get_channelName_if(channel_name, 79), get_state_if(stateVector, 79), get_channelName_if(channel_name, 80), get_state_if(stateVector, 80), get_channelName_if(channel_name, 81), get_state_if(stateVector, 81), get_channelName_if(channel_name, 82), get_state_if(stateVector, 82), get_channelName_if(channel_name, 83), get_state_if(stateVector, 83), get_channelName_if(channel_name, 84), get_state_if(stateVector, 84), get_channelName_if(channel_name, 85), get_state_if(stateVector, 85), get_channelName_if(channel_name, 86), get_state_if(stateVector, 86), get_channelName_if(channel_name, 87), get_state_if(stateVector, 87), get_channelName_if(channel_name, 88), get_state_if(stateVector, 88), get_channelName_if(channel_name, 89), get_state_if(stateVector, 89), get_channelName_if(channel_name, 90), get_state_if(stateVector, 90), get_channelName_if(channel_name, 91), get_state_if(stateVector, 91), get_channelName_if(channel_name, 92), get_state_if(stateVector, 92), get_channelName_if(channel_name, 93), get_state_if(stateVector, 93), get_channelName_if(channel_name, 94), get_state_if(stateVector, 94), get_channelName_if(channel_name, 95), get_state_if(stateVector, 95), get_channelName_if(channel_name, 96), get_state_if(stateVector, 96)); if (!status_ok(status)) { return ConvertApiErrorStatusForTaskHandle(context, status, 0); } response->set_status(status); - response->set_value(value); + for (int i = 0; i < stateVector.size(); ++i) { + response->add_pull_up_pull_down_states(static_cast(stateVector[i])); + } return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetPhysicalChanAttributeDouble(::grpc::ServerContext* context, const GetPhysicalChanAttributeDoubleRequest* request, GetPhysicalChanAttributeDoubleResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetPhysicalChanAttributeDoubleRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::PhysicalChannelDoubleAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetPhysicalChanAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::PhysicalChannelDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetPhysicalChanAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - float64 value{}; - auto status = library_->GetPhysicalChanAttributeDouble(physical_channel, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetDisconnectedCDAQSyncPorts(::grpc::ServerContext* context, const GetDisconnectedCDAQSyncPortsRequest* request, GetDisconnectedCDAQSyncPortsResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetPhysicalChanAttributeDoubleArray(::grpc::ServerContext* context, const GetPhysicalChanAttributeDoubleArrayRequest* request, GetPhysicalChanAttributeDoubleArrayResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetPhysicalChanAttributeDoubleArrayRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::PhysicalChannelDoubleArrayAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetPhysicalChanAttributeDoubleArrayRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::PhysicalChannelDoubleArrayAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetPhysicalChanAttributeDoubleArrayRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + while (true) { + auto status = library_->GetDisconnectedCDAQSyncPorts(nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + uInt32 port_list_size = status; + + std::string port_list; + if (port_list_size > 0) { + port_list.resize(port_list_size - 1); + } + status = library_->GetDisconnectedCDAQSyncPorts((char*)port_list.data(), port_list_size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(port_list_size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + std::string port_list_utf8; + convert_to_grpc(port_list, &port_list_utf8); + response->set_port_list(port_list_utf8); + nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_port_list())); + return ::grpc::Status::OK; } } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } - while (true) { - auto status = library_->GetPhysicalChanAttributeDoubleArray(physical_channel, attribute, nullptr, 0); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - uInt32 size = status; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetErrorString(::grpc::ServerContext* context, const GetErrorStringRequest* request, GetErrorStringResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + int32 error_code = request->error_code(); + + while (true) { + auto status = library_->GetErrorString(error_code, nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + uInt32 buffer_size = status; - response->mutable_value()->Resize(size, 0); - float64* value = response->mutable_value()->mutable_data(); - status = library_->GetPhysicalChanAttributeDoubleArray(physical_channel, attribute, value, size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { - // buffer is now too small, try again - continue; + std::string error_string; + if (buffer_size > 0) { + error_string.resize(buffer_size - 1); + } + status = library_->GetErrorString(error_code, (char*)error_string.data(), buffer_size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(buffer_size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + std::string error_string_utf8; + convert_to_grpc(error_string, &error_string_utf8); + response->set_error_string(error_string_utf8); + nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_error_string())); + return ::grpc::Status::OK; + } + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetExportedSignalAttributeBool(::grpc::ServerContext* context, const GetExportedSignalAttributeBoolRequest* request, GetExportedSignalAttributeBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetExportedSignalAttributeBoolRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ExportSignalBoolAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetExportedSignalAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ExportSignalBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetExportedSignalAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } + + bool32 value {}; + auto status = library_->GetExportedSignalAttributeBool(task, attribute, &value); if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + return ConvertApiErrorStatusForTaskHandle(context, status, task); } response->set_status(status); + response->set_value(value); return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetPhysicalChanAttributeInt32(::grpc::ServerContext* context, const GetPhysicalChanAttributeInt32Request* request, GetPhysicalChanAttributeInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetPhysicalChanAttributeInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::PhysicalChannelInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetPhysicalChanAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::PhysicalChannelInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetPhysicalChanAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - int32 value{}; - auto status = library_->GetPhysicalChanAttributeInt32(physical_channel, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - auto checked_convert_value = [](auto raw_value) { - bool raw_value_is_valid = nidaqmx_grpc::PhysicalChannelInt32AttributeValues_IsValid(raw_value); - auto valid_enum_value = raw_value_is_valid ? raw_value : 0; - return static_cast(valid_enum_value); - }; - response->set_value(checked_convert_value(value)); - response->set_value_raw(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetPhysicalChanAttributeInt32Array(::grpc::ServerContext* context, const GetPhysicalChanAttributeInt32ArrayRequest* request, GetPhysicalChanAttributeInt32ArrayResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetPhysicalChanAttributeInt32ArrayRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::PhysicalChannelInt32ArrayAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetPhysicalChanAttributeInt32ArrayRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::PhysicalChannelInt32ArrayAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetPhysicalChanAttributeInt32ArrayRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetExportedSignalAttributeDouble(::grpc::ServerContext* context, const GetExportedSignalAttributeDoubleRequest* request, GetExportedSignalAttributeDoubleResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetExportedSignalAttributeDoubleRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ExportSignalDoubleAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetExportedSignalAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ExportSignalDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetExportedSignalAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } - while (true) { - auto status = library_->GetPhysicalChanAttributeInt32Array(physical_channel, attribute, nullptr, 0); + float64 value {}; + auto status = library_->GetExportedSignalAttributeDouble(task, attribute, &value); if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - uInt32 size = status; + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } - response->mutable_value_raw()->Resize(size, 0); - int32* value = reinterpret_cast(response->mutable_value_raw()->mutable_data()); - status = library_->GetPhysicalChanAttributeInt32Array(physical_channel, attribute, value, size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { - // buffer is now too small, try again - continue; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetExportedSignalAttributeInt32(::grpc::ServerContext* context, const GetExportedSignalAttributeInt32Request* request, GetExportedSignalAttributeInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetExportedSignalAttributeInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ExportSignalInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetExportedSignalAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ExportSignalInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetExportedSignalAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } + + int32 value {}; + auto status = library_->GetExportedSignalAttributeInt32(task, attribute, &value); if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + return ConvertApiErrorStatusForTaskHandle(context, status, task); } response->set_status(status); auto checked_convert_value = [](auto raw_value) { - bool raw_value_is_valid = nidaqmx_grpc::PhysicalChannelInt32AttributeValues_IsValid(raw_value); + bool raw_value_is_valid = nidaqmx_grpc::ExportSignalInt32AttributeValues_IsValid(raw_value); auto valid_enum_value = raw_value_is_valid ? raw_value : 0; - return static_cast(valid_enum_value); + return static_cast(valid_enum_value); }; - response->mutable_value()->Clear(); - response->mutable_value()->Reserve(size); - std::transform( - response->value_raw().begin(), - response->value_raw().begin() + size, - google::protobuf::RepeatedFieldBackInserter(response->mutable_value()), - [&](auto x) { - return checked_convert_value(x); - }); + response->set_value(checked_convert_value(value)); + response->set_value_raw(value); return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetPhysicalChanAttributeString(::grpc::ServerContext* context, const GetPhysicalChanAttributeStringRequest* request, GetPhysicalChanAttributeStringResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetPhysicalChanAttributeStringRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::PhysicalChannelStringAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetPhysicalChanAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::PhysicalChannelStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetPhysicalChanAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetExportedSignalAttributeString(::grpc::ServerContext* context, const GetExportedSignalAttributeStringRequest* request, GetExportedSignalAttributeStringResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - - while (true) { - auto status = library_->GetPhysicalChanAttributeString(physical_channel, attribute, nullptr, 0); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetExportedSignalAttributeStringRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ExportSignalStringAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetExportedSignalAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ExportSignalStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetExportedSignalAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - uInt32 size = status; - std::string value; - if (size > 0) { - value.resize(size - 1); - } - status = library_->GetPhysicalChanAttributeString(physical_channel, attribute, (char*)value.data(), size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { - // buffer is now too small, try again - continue; + + while (true) { + auto status = library_->GetExportedSignalAttributeString(task, attribute, nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + uInt32 size = status; + + std::string value; + if (size > 0) { + value.resize(size - 1); + } + status = library_->GetExportedSignalAttributeString(task, attribute, (char*)value.data(), size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + std::string value_utf8; + convert_to_grpc(value, &value_utf8); + response->set_value(value_utf8); + nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); + return ::grpc::Status::OK; + } + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetExportedSignalAttributeUInt32(::grpc::ServerContext* context, const GetExportedSignalAttributeUInt32Request* request, GetExportedSignalAttributeUInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetExportedSignalAttributeUInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ExportSignalUInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetExportedSignalAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ExportSignalUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetExportedSignalAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } + + uInt32 value {}; + auto status = library_->GetExportedSignalAttributeUInt32(task, attribute, &value); if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + return ConvertApiErrorStatusForTaskHandle(context, status, task); } response->set_status(status); - std::string value_utf8; - convert_to_grpc(value, &value_utf8); - response->set_value(value_utf8); - nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); + response->set_value(value); return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetPhysicalChanAttributeUInt32(::grpc::ServerContext* context, const GetPhysicalChanAttributeUInt32Request* request, GetPhysicalChanAttributeUInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetPhysicalChanAttributeUInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::PhysicalChannelUInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetPhysicalChanAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::PhysicalChannelUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetPhysicalChanAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - uInt32 value{}; - auto status = library_->GetPhysicalChanAttributeUInt32(physical_channel, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetPhysicalChanAttributeUInt32Array(::grpc::ServerContext* context, const GetPhysicalChanAttributeUInt32ArrayRequest* request, GetPhysicalChanAttributeUInt32ArrayResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetPhysicalChanAttributeUInt32ArrayRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::PhysicalChannelUInt32ArrayAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetPhysicalChanAttributeUInt32ArrayRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::PhysicalChannelUInt32ArrayAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetPhysicalChanAttributeUInt32ArrayRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetExtCalLastDateAndTime(::grpc::ServerContext* context, const GetExtCalLastDateAndTimeRequest* request, GetExtCalLastDateAndTimeResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - - while (true) { - auto status = library_->GetPhysicalChanAttributeUInt32Array(physical_channel, attribute, nullptr, 0); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - uInt32 size = status; - - response->mutable_value()->Resize(size, 0); - uInt32* value = reinterpret_cast(response->mutable_value()->mutable_data()); - status = library_->GetPhysicalChanAttributeUInt32Array(physical_channel, attribute, value, size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { - // buffer is now too small, try again - continue; - } + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + uInt32 year {}; + uInt32 month {}; + uInt32 day {}; + uInt32 hour {}; + uInt32 minute {}; + auto status = library_->GetExtCalLastDateAndTime(device_name, &year, &month, &day, &hour, &minute); if (!status_ok(status)) { return ConvertApiErrorStatusForTaskHandle(context, status, 0); } response->set_status(status); + response->set_year(year); + response->set_month(month); + response->set_day(day); + response->set_hour(hour); + response->set_minute(minute); return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetReadAttributeBool(::grpc::ServerContext* context, const GetReadAttributeBoolRequest* request, GetReadAttributeBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetReadAttributeBoolRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ReadBoolAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetReadAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ReadBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetReadAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - bool32 value{}; - auto status = library_->GetReadAttributeBool(task, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetReadAttributeDouble(::grpc::ServerContext* context, const GetReadAttributeDoubleRequest* request, GetReadAttributeDoubleResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetReadAttributeDoubleRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ReadDoubleAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetReadAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ReadDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetReadAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - float64 value{}; - auto status = library_->GetReadAttributeDouble(task, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetReadAttributeInt32(::grpc::ServerContext* context, const GetReadAttributeInt32Request* request, GetReadAttributeInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetReadAttributeInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ReadInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetReadAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ReadInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetReadAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - int32 value{}; - auto status = library_->GetReadAttributeInt32(task, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - auto checked_convert_value = [](auto raw_value) { - bool raw_value_is_valid = nidaqmx_grpc::ReadInt32AttributeValues_IsValid(raw_value); - auto valid_enum_value = raw_value_is_valid ? raw_value : 0; - return static_cast(valid_enum_value); - }; - response->set_value(checked_convert_value(value)); - response->set_value_raw(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetReadAttributeString(::grpc::ServerContext* context, const GetReadAttributeStringRequest* request, GetReadAttributeStringResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetReadAttributeStringRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ReadStringAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetReadAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ReadStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetReadAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetFirstSampClkWhen(::grpc::ServerContext* context, const GetFirstSampClkWhenRequest* request, GetFirstSampClkWhenResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - - while (true) { - auto status = library_->GetReadAttributeString(task, attribute, nullptr, 0); + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + CVIAbsoluteTime data {}; + auto status = library_->GetFirstSampClkWhen(task, &data); if (!status_ok(status)) { return ConvertApiErrorStatusForTaskHandle(context, status, task); } - uInt32 size = status; + response->set_status(status); + convert_to_grpc(data, response->mutable_data()); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } - std::string value; - if (size > 0) { - value.resize(size - 1); - } - status = library_->GetReadAttributeString(task, attribute, (char*)value.data(), size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { - // buffer is now too small, try again - continue; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetFirstSampTimestampVal(::grpc::ServerContext* context, const GetFirstSampTimestampValRequest* request, GetFirstSampTimestampValResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + CVIAbsoluteTime data {}; + auto status = library_->GetFirstSampTimestampVal(task, &data); if (!status_ok(status)) { return ConvertApiErrorStatusForTaskHandle(context, status, task); } response->set_status(status); - std::string value_utf8; - convert_to_grpc(value, &value_utf8); - response->set_value(value_utf8); - nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); + convert_to_grpc(data, response->mutable_data()); return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetReadAttributeUInt32(::grpc::ServerContext* context, const GetReadAttributeUInt32Request* request, GetReadAttributeUInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetReadAttributeUInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ReadUInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetReadAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ReadUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetReadAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - uInt32 value{}; - auto status = library_->GetReadAttributeUInt32(task, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetReadAttributeUInt64(::grpc::ServerContext* context, const GetReadAttributeUInt64Request* request, GetReadAttributeUInt64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetReadAttributeUInt64Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ReadUInt64Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetReadAttributeUInt64Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ReadUInt64Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetReadAttributeUInt64Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - uInt64 value{}; - auto status = library_->GetReadAttributeUInt64(task, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetNthTaskChannel(::grpc::ServerContext* context, const GetNthTaskChannelRequest* request, GetNthTaskChannelResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + uInt32 index = request->index(); -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetRealTimeAttributeBool(::grpc::ServerContext* context, const GetRealTimeAttributeBoolRequest* request, GetRealTimeAttributeBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetRealTimeAttributeBoolRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::RealTimeBoolAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetRealTimeAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::RealTimeBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetRealTimeAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - bool32 value{}; - auto status = library_->GetRealTimeAttributeBool(task, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + while (true) { + auto status = library_->GetNthTaskChannel(task, index, nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + int32 buffer_size = status; -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetRealTimeAttributeInt32(::grpc::ServerContext* context, const GetRealTimeAttributeInt32Request* request, GetRealTimeAttributeInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetRealTimeAttributeInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::RealTimeInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetRealTimeAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::RealTimeInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetRealTimeAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - int32 value{}; - auto status = library_->GetRealTimeAttributeInt32(task, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - auto checked_convert_value = [](auto raw_value) { - bool raw_value_is_valid = nidaqmx_grpc::RealTimeInt32AttributeValues_IsValid(raw_value); - auto valid_enum_value = raw_value_is_valid ? raw_value : 0; - return static_cast(valid_enum_value); - }; - response->set_value(checked_convert_value(value)); - response->set_value_raw(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + std::string buffer; + if (buffer_size > 0) { + buffer.resize(buffer_size - 1); + } + status = library_->GetNthTaskChannel(task, index, (char*)buffer.data(), buffer_size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(buffer_size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + std::string buffer_utf8; + convert_to_grpc(buffer, &buffer_utf8); + response->set_buffer(buffer_utf8); + nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_buffer())); + return ::grpc::Status::OK; + } + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetRealTimeAttributeUInt32(::grpc::ServerContext* context, const GetRealTimeAttributeUInt32Request* request, GetRealTimeAttributeUInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetRealTimeAttributeUInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::RealTimeUInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetRealTimeAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::RealTimeUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetRealTimeAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - uInt32 value{}; - auto status = library_->GetRealTimeAttributeUInt32(task, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetNthTaskDevice(::grpc::ServerContext* context, const GetNthTaskDeviceRequest* request, GetNthTaskDeviceResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + uInt32 index = request->index(); -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetRefTrigTimestampVal(::grpc::ServerContext* context, const GetRefTrigTimestampValRequest* request, GetRefTrigTimestampValResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - CVIAbsoluteTime data{}; - auto status = library_->GetRefTrigTimestampVal(task, &data); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - convert_to_grpc(data, response->mutable_data()); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + while (true) { + auto status = library_->GetNthTaskDevice(task, index, nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + int32 buffer_size = status; -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetScaleAttributeDouble(::grpc::ServerContext* context, const GetScaleAttributeDoubleRequest* request, GetScaleAttributeDoubleResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto scale_name_mbcs = convert_from_grpc(request->scale_name()); - auto scale_name = scale_name_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetScaleAttributeDoubleRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ScaleDoubleAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetScaleAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ScaleDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetScaleAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - float64 value{}; - auto status = library_->GetScaleAttributeDouble(scale_name, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + std::string buffer; + if (buffer_size > 0) { + buffer.resize(buffer_size - 1); + } + status = library_->GetNthTaskDevice(task, index, (char*)buffer.data(), buffer_size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(buffer_size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + std::string buffer_utf8; + convert_to_grpc(buffer, &buffer_utf8); + response->set_buffer(buffer_utf8); + nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_buffer())); + return ::grpc::Status::OK; + } + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetScaleAttributeDoubleArray(::grpc::ServerContext* context, const GetScaleAttributeDoubleArrayRequest* request, GetScaleAttributeDoubleArrayResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto scale_name_mbcs = convert_from_grpc(request->scale_name()); - auto scale_name = scale_name_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetScaleAttributeDoubleArrayRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ScaleDoubleArrayAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetScaleAttributeDoubleArrayRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ScaleDoubleArrayAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetScaleAttributeDoubleArrayRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetNthTaskReadChannel(::grpc::ServerContext* context, const GetNthTaskReadChannelRequest* request, GetNthTaskReadChannelResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + uInt32 index = request->index(); - while (true) { - auto status = library_->GetScaleAttributeDoubleArray(scale_name, attribute, nullptr, 0); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - uInt32 size = status; + while (true) { + auto status = library_->GetNthTaskReadChannel(task, index, nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + int32 buffer_size = status; - response->mutable_value()->Resize(size, 0); - float64* value = response->mutable_value()->mutable_data(); - status = library_->GetScaleAttributeDoubleArray(scale_name, attribute, value, size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { - // buffer is now too small, try again - continue; + std::string buffer; + if (buffer_size > 0) { + buffer.resize(buffer_size - 1); + } + status = library_->GetNthTaskReadChannel(task, index, (char*)buffer.data(), buffer_size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(buffer_size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + std::string buffer_utf8; + convert_to_grpc(buffer, &buffer_utf8); + response->set_buffer(buffer_utf8); + nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_buffer())); + return ::grpc::Status::OK; + } + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetPersistedChanAttributeBool(::grpc::ServerContext* context, const GetPersistedChanAttributeBoolRequest* request, GetPersistedChanAttributeBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto channel_mbcs = convert_from_grpc(request->channel()); + auto channel = channel_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetPersistedChanAttributeBoolRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::PersistedChannelBoolAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetPersistedChanAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::PersistedChannelBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetPersistedChanAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } + + bool32 value {}; + auto status = library_->GetPersistedChanAttributeBool(channel, attribute, &value); if (!status_ok(status)) { return ConvertApiErrorStatusForTaskHandle(context, status, 0); } response->set_status(status); + response->set_value(value); return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetScaleAttributeInt32(::grpc::ServerContext* context, const GetScaleAttributeInt32Request* request, GetScaleAttributeInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto scale_name_mbcs = convert_from_grpc(request->scale_name()); - auto scale_name = scale_name_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetScaleAttributeInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ScaleInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetScaleAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ScaleInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetScaleAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - int32 value{}; - auto status = library_->GetScaleAttributeInt32(scale_name, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - auto checked_convert_value = [](auto raw_value) { - bool raw_value_is_valid = nidaqmx_grpc::ScaleInt32AttributeValues_IsValid(raw_value); - auto valid_enum_value = raw_value_is_valid ? raw_value : 0; - return static_cast(valid_enum_value); - }; - response->set_value(checked_convert_value(value)); - response->set_value_raw(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetScaleAttributeString(::grpc::ServerContext* context, const GetScaleAttributeStringRequest* request, GetScaleAttributeStringResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto scale_name_mbcs = convert_from_grpc(request->scale_name()); - auto scale_name = scale_name_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetScaleAttributeStringRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ScaleStringAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetScaleAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ScaleStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetScaleAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetPersistedChanAttributeString(::grpc::ServerContext* context, const GetPersistedChanAttributeStringRequest* request, GetPersistedChanAttributeStringResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - - while (true) { - auto status = library_->GetScaleAttributeString(scale_name, attribute, nullptr, 0); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + try { + auto channel_mbcs = convert_from_grpc(request->channel()); + auto channel = channel_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetPersistedChanAttributeStringRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::PersistedChannelStringAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetPersistedChanAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::PersistedChannelStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetPersistedChanAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - uInt32 size = status; - std::string value; - if (size > 0) { - value.resize(size - 1); - } - status = library_->GetScaleAttributeString(scale_name, attribute, (char*)value.data(), size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { - // buffer is now too small, try again - continue; + + while (true) { + auto status = library_->GetPersistedChanAttributeString(channel, attribute, nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + uInt32 size = status; + + std::string value; + if (size > 0) { + value.resize(size - 1); + } + status = library_->GetPersistedChanAttributeString(channel, attribute, (char*)value.data(), size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + std::string value_utf8; + convert_to_grpc(value, &value_utf8); + response->set_value(value_utf8); + nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); + return ::grpc::Status::OK; + } + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetPersistedScaleAttributeBool(::grpc::ServerContext* context, const GetPersistedScaleAttributeBoolRequest* request, GetPersistedScaleAttributeBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto scale_name_mbcs = convert_from_grpc(request->scale_name()); + auto scale_name = scale_name_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetPersistedScaleAttributeBoolRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::PersistedScaleBoolAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetPersistedScaleAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::PersistedScaleBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetPersistedScaleAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } + + bool32 value {}; + auto status = library_->GetPersistedScaleAttributeBool(scale_name, attribute, &value); if (!status_ok(status)) { return ConvertApiErrorStatusForTaskHandle(context, status, 0); } response->set_status(status); - std::string value_utf8; - convert_to_grpc(value, &value_utf8); - response->set_value(value_utf8); - nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); + response->set_value(value); return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetSelfCalLastDateAndTime(::grpc::ServerContext* context, const GetSelfCalLastDateAndTimeRequest* request, GetSelfCalLastDateAndTimeResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - uInt32 year{}; - uInt32 month{}; - uInt32 day{}; - uInt32 hour{}; - uInt32 minute{}; - auto status = library_->GetSelfCalLastDateAndTime(device_name, &year, &month, &day, &hour, &minute); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - response->set_year(year); - response->set_month(month); - response->set_day(day); - response->set_hour(hour); - response->set_minute(minute); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetStartTrigTimestampVal(::grpc::ServerContext* context, const GetStartTrigTimestampValRequest* request, GetStartTrigTimestampValResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - CVIAbsoluteTime data{}; - auto status = library_->GetStartTrigTimestampVal(task, &data); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - convert_to_grpc(data, response->mutable_data()); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetPersistedScaleAttributeString(::grpc::ServerContext* context, const GetPersistedScaleAttributeStringRequest* request, GetPersistedScaleAttributeStringResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto scale_name_mbcs = convert_from_grpc(request->scale_name()); + auto scale_name = scale_name_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetPersistedScaleAttributeStringRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::PersistedScaleStringAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetPersistedScaleAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::PersistedScaleStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetPersistedScaleAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetStartTrigTrigWhen(::grpc::ServerContext* context, const GetStartTrigTrigWhenRequest* request, GetStartTrigTrigWhenResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - CVIAbsoluteTime data{}; - auto status = library_->GetStartTrigTrigWhen(task, &data); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - convert_to_grpc(data, response->mutable_data()); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetSyncPulseTimeWhen(::grpc::ServerContext* context, const GetSyncPulseTimeWhenRequest* request, GetSyncPulseTimeWhenResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - CVIAbsoluteTime data{}; - auto status = library_->GetSyncPulseTimeWhen(task, &data); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - convert_to_grpc(data, response->mutable_data()); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + while (true) { + auto status = library_->GetPersistedScaleAttributeString(scale_name, attribute, nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + uInt32 size = status; -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetSystemInfoAttributeString(::grpc::ServerContext* context, const GetSystemInfoAttributeStringRequest* request, GetSystemInfoAttributeStringResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetSystemInfoAttributeStringRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::SystemStringAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetSystemInfoAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::SystemStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetSystemInfoAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + std::string value; + if (size > 0) { + value.resize(size - 1); + } + status = library_->GetPersistedScaleAttributeString(scale_name, attribute, (char*)value.data(), size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + std::string value_utf8; + convert_to_grpc(value, &value_utf8); + response->set_value(value_utf8); + nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); + return ::grpc::Status::OK; + } + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetPersistedTaskAttributeBool(::grpc::ServerContext* context, const GetPersistedTaskAttributeBoolRequest* request, GetPersistedTaskAttributeBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_name_mbcs = convert_from_grpc(request->task_name()); + auto task_name = task_name_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetPersistedTaskAttributeBoolRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::PersistedTaskBoolAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetPersistedTaskAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::PersistedTaskBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetPersistedTaskAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - } - while (true) { - auto status = library_->GetSystemInfoAttributeString(attribute, nullptr, 0); + bool32 value {}; + auto status = library_->GetPersistedTaskAttributeBool(task_name, attribute, &value); if (!status_ok(status)) { return ConvertApiErrorStatusForTaskHandle(context, status, 0); } - uInt32 size = status; + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } - std::string value; - if (size > 0) { - value.resize(size - 1); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetPersistedTaskAttributeString(::grpc::ServerContext* context, const GetPersistedTaskAttributeStringRequest* request, GetPersistedTaskAttributeStringResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_name_mbcs = convert_from_grpc(request->task_name()); + auto task_name = task_name_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetPersistedTaskAttributeStringRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::PersistedTaskStringAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetPersistedTaskAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::PersistedTaskStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetPersistedTaskAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - status = library_->GetSystemInfoAttributeString(attribute, (char*)value.data(), size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { - // buffer is now too small, try again - continue; + + + while (true) { + auto status = library_->GetPersistedTaskAttributeString(task_name, attribute, nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + uInt32 size = status; + + std::string value; + if (size > 0) { + value.resize(size - 1); + } + status = library_->GetPersistedTaskAttributeString(task_name, attribute, (char*)value.data(), size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + std::string value_utf8; + convert_to_grpc(value, &value_utf8); + response->set_value(value_utf8); + nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); + return ::grpc::Status::OK; + } + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetPhysicalChanAttributeBool(::grpc::ServerContext* context, const GetPhysicalChanAttributeBoolRequest* request, GetPhysicalChanAttributeBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetPhysicalChanAttributeBoolRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::PhysicalChannelBoolAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetPhysicalChanAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::PhysicalChannelBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetPhysicalChanAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } + + bool32 value {}; + auto status = library_->GetPhysicalChanAttributeBool(physical_channel, attribute, &value); if (!status_ok(status)) { return ConvertApiErrorStatusForTaskHandle(context, status, 0); } response->set_status(status); - std::string value_utf8; - convert_to_grpc(value, &value_utf8); - response->set_value(value_utf8); - nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); + response->set_value(value); return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetSystemInfoAttributeUInt32(::grpc::ServerContext* context, const GetSystemInfoAttributeUInt32Request* request, GetSystemInfoAttributeUInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetSystemInfoAttributeUInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::SystemUInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetSystemInfoAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::SystemUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetSystemInfoAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetPhysicalChanAttributeBytes(::grpc::ServerContext* context, const GetPhysicalChanAttributeBytesRequest* request, GetPhysicalChanAttributeBytesResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } + try { + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetPhysicalChanAttributeBytesRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::PhysicalChannelBytesAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetPhysicalChanAttributeBytesRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::PhysicalChannelBytesAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetPhysicalChanAttributeBytesRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } - uInt32 value{}; - auto status = library_->GetSystemInfoAttributeUInt32(attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetTaskAttributeBool(::grpc::ServerContext* context, const GetTaskAttributeBoolRequest* request, GetTaskAttributeBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetTaskAttributeBoolRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TaskBoolAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTaskAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TaskBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTaskAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - bool32 value{}; - auto status = library_->GetTaskAttributeBool(task, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + while (true) { + auto status = library_->GetPhysicalChanAttributeBytes(physical_channel, attribute, nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + uInt32 size = status; -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetTaskAttributeString(::grpc::ServerContext* context, const GetTaskAttributeStringRequest* request, GetTaskAttributeStringResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetTaskAttributeStringRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TaskStringAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTaskAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TaskStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTaskAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + std::string value(size, '\0'); + status = library_->GetPhysicalChanAttributeBytes(physical_channel, attribute, (uInt8*)value.data(), size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; } } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } - while (true) { - auto status = library_->GetTaskAttributeString(task, attribute, nullptr, 0); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetPhysicalChanAttributeDouble(::grpc::ServerContext* context, const GetPhysicalChanAttributeDoubleRequest* request, GetPhysicalChanAttributeDoubleResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetPhysicalChanAttributeDoubleRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::PhysicalChannelDoubleAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetPhysicalChanAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::PhysicalChannelDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetPhysicalChanAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - uInt32 size = status; - std::string value; - if (size > 0) { - value.resize(size - 1); - } - status = library_->GetTaskAttributeString(task, attribute, (char*)value.data(), size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { - // buffer is now too small, try again - continue; - } + float64 value {}; + auto status = library_->GetPhysicalChanAttributeDouble(physical_channel, attribute, &value); if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } response->set_status(status); - std::string value_utf8; - convert_to_grpc(value, &value_utf8); - response->set_value(value_utf8); - nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); + response->set_value(value); return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetTaskAttributeUInt32(::grpc::ServerContext* context, const GetTaskAttributeUInt32Request* request, GetTaskAttributeUInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetTaskAttributeUInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TaskUInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTaskAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TaskUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTaskAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - uInt32 value{}; - auto status = library_->GetTaskAttributeUInt32(task, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetTimingAttributeBool(::grpc::ServerContext* context, const GetTimingAttributeBoolRequest* request, GetTimingAttributeBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetTimingAttributeBoolRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TimingBoolAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTimingAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TimingBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTimingAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - bool32 value{}; - auto status = library_->GetTimingAttributeBool(task, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetTimingAttributeDouble(::grpc::ServerContext* context, const GetTimingAttributeDoubleRequest* request, GetTimingAttributeDoubleResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetTimingAttributeDoubleRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TimingDoubleAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTimingAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TimingDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTimingAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - float64 value{}; - auto status = library_->GetTimingAttributeDouble(task, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetTimingAttributeExBool(::grpc::ServerContext* context, const GetTimingAttributeExBoolRequest* request, GetTimingAttributeExBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto device_names_mbcs = convert_from_grpc(request->device_names()); - auto device_names = device_names_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetTimingAttributeExBoolRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TimingBoolAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTimingAttributeExBoolRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TimingBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTimingAttributeExBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - bool32 value{}; - auto status = library_->GetTimingAttributeExBool(task, device_names, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetTimingAttributeExDouble(::grpc::ServerContext* context, const GetTimingAttributeExDoubleRequest* request, GetTimingAttributeExDoubleResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto device_names_mbcs = convert_from_grpc(request->device_names()); - auto device_names = device_names_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetTimingAttributeExDoubleRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TimingDoubleAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTimingAttributeExDoubleRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TimingDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTimingAttributeExDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - float64 value{}; - auto status = library_->GetTimingAttributeExDouble(task, device_names, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetPhysicalChanAttributeDoubleArray(::grpc::ServerContext* context, const GetPhysicalChanAttributeDoubleArrayRequest* request, GetPhysicalChanAttributeDoubleArrayResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetPhysicalChanAttributeDoubleArrayRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::PhysicalChannelDoubleArrayAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetPhysicalChanAttributeDoubleArrayRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::PhysicalChannelDoubleArrayAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetPhysicalChanAttributeDoubleArrayRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetTimingAttributeExInt32(::grpc::ServerContext* context, const GetTimingAttributeExInt32Request* request, GetTimingAttributeExInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto device_names_mbcs = convert_from_grpc(request->device_names()); - auto device_names = device_names_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetTimingAttributeExInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TimingInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTimingAttributeExInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TimingInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTimingAttributeExInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - int32 value{}; - auto status = library_->GetTimingAttributeExInt32(task, device_names, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - auto checked_convert_value = [](auto raw_value) { - bool raw_value_is_valid = nidaqmx_grpc::TimingInt32AttributeValues_IsValid(raw_value); - auto valid_enum_value = raw_value_is_valid ? raw_value : 0; - return static_cast(valid_enum_value); - }; - response->set_value(checked_convert_value(value)); - response->set_value_raw(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetTimingAttributeExString(::grpc::ServerContext* context, const GetTimingAttributeExStringRequest* request, GetTimingAttributeExStringResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto device_names_mbcs = convert_from_grpc(request->device_names()); - auto device_names = device_names_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetTimingAttributeExStringRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TimingStringAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTimingAttributeExStringRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TimingStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTimingAttributeExStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + while (true) { + auto status = library_->GetPhysicalChanAttributeDoubleArray(physical_channel, attribute, nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + uInt32 size = status; + + response->mutable_value()->Resize(size, 0); + float64* value = response->mutable_value()->mutable_data(); + status = library_->GetPhysicalChanAttributeDoubleArray(physical_channel, attribute, value, size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + return ::grpc::Status::OK; } } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } - while (true) { - auto status = library_->GetTimingAttributeExString(task, device_names, attribute, nullptr, 0); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetPhysicalChanAttributeInt32(::grpc::ServerContext* context, const GetPhysicalChanAttributeInt32Request* request, GetPhysicalChanAttributeInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetPhysicalChanAttributeInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::PhysicalChannelInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetPhysicalChanAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::PhysicalChannelInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetPhysicalChanAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - uInt32 size = status; - std::string value; - if (size > 0) { - value.resize(size - 1); - } - status = library_->GetTimingAttributeExString(task, device_names, attribute, (char*)value.data(), size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { - // buffer is now too small, try again - continue; - } + int32 value {}; + auto status = library_->GetPhysicalChanAttributeInt32(physical_channel, attribute, &value); if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } response->set_status(status); - std::string value_utf8; - convert_to_grpc(value, &value_utf8); - response->set_value(value_utf8); - nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); + auto checked_convert_value = [](auto raw_value) { + bool raw_value_is_valid = nidaqmx_grpc::PhysicalChannelInt32AttributeValues_IsValid(raw_value); + auto valid_enum_value = raw_value_is_valid ? raw_value : 0; + return static_cast(valid_enum_value); + }; + response->set_value(checked_convert_value(value)); + response->set_value_raw(value); return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetTimingAttributeExTimestamp(::grpc::ServerContext* context, const GetTimingAttributeExTimestampRequest* request, GetTimingAttributeExTimestampResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto device_names_mbcs = convert_from_grpc(request->device_names()); - auto device_names = device_names_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetTimingAttributeExTimestampRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TimingTimestampAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTimingAttributeExTimestampRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TimingTimestampAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTimingAttributeExTimestampRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - CVIAbsoluteTime value{}; - auto status = library_->GetTimingAttributeExTimestamp(task, device_names, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - convert_to_grpc(value, response->mutable_value()); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetTimingAttributeExUInt32(::grpc::ServerContext* context, const GetTimingAttributeExUInt32Request* request, GetTimingAttributeExUInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto device_names_mbcs = convert_from_grpc(request->device_names()); - auto device_names = device_names_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetTimingAttributeExUInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TimingUInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTimingAttributeExUInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TimingUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTimingAttributeExUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - uInt32 value{}; - auto status = library_->GetTimingAttributeExUInt32(task, device_names, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetTimingAttributeExUInt64(::grpc::ServerContext* context, const GetTimingAttributeExUInt64Request* request, GetTimingAttributeExUInt64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto device_names_mbcs = convert_from_grpc(request->device_names()); - auto device_names = device_names_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetTimingAttributeExUInt64Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TimingUInt64Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTimingAttributeExUInt64Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TimingUInt64Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTimingAttributeExUInt64Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - uInt64 value{}; - auto status = library_->GetTimingAttributeExUInt64(task, device_names, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetPhysicalChanAttributeInt32Array(::grpc::ServerContext* context, const GetPhysicalChanAttributeInt32ArrayRequest* request, GetPhysicalChanAttributeInt32ArrayResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetPhysicalChanAttributeInt32ArrayRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::PhysicalChannelInt32ArrayAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetPhysicalChanAttributeInt32ArrayRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::PhysicalChannelInt32ArrayAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetPhysicalChanAttributeInt32ArrayRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetTimingAttributeInt32(::grpc::ServerContext* context, const GetTimingAttributeInt32Request* request, GetTimingAttributeInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetTimingAttributeInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TimingInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTimingAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TimingInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTimingAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - int32 value{}; - auto status = library_->GetTimingAttributeInt32(task, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - auto checked_convert_value = [](auto raw_value) { - bool raw_value_is_valid = nidaqmx_grpc::TimingInt32AttributeValues_IsValid(raw_value); - auto valid_enum_value = raw_value_is_valid ? raw_value : 0; - return static_cast(valid_enum_value); - }; - response->set_value(checked_convert_value(value)); - response->set_value_raw(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetTimingAttributeString(::grpc::ServerContext* context, const GetTimingAttributeStringRequest* request, GetTimingAttributeStringResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetTimingAttributeStringRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TimingStringAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTimingAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TimingStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTimingAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + while (true) { + auto status = library_->GetPhysicalChanAttributeInt32Array(physical_channel, attribute, nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + uInt32 size = status; + + response->mutable_value_raw()->Resize(size, 0); + int32* value = reinterpret_cast(response->mutable_value_raw()->mutable_data()); + status = library_->GetPhysicalChanAttributeInt32Array(physical_channel, attribute, value, size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + auto checked_convert_value = [](auto raw_value) { + bool raw_value_is_valid = nidaqmx_grpc::PhysicalChannelInt32AttributeValues_IsValid(raw_value); + auto valid_enum_value = raw_value_is_valid ? raw_value : 0; + return static_cast(valid_enum_value); + }; + response->mutable_value()->Clear(); + response->mutable_value()->Reserve(size); + std::transform( + response->value_raw().begin(), + response->value_raw().begin() + size, + google::protobuf::RepeatedFieldBackInserter(response->mutable_value()), + [&](auto x) { + return checked_convert_value(x); + }); + return ::grpc::Status::OK; } } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } - while (true) { - auto status = library_->GetTimingAttributeString(task, attribute, nullptr, 0); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetPhysicalChanAttributeString(::grpc::ServerContext* context, const GetPhysicalChanAttributeStringRequest* request, GetPhysicalChanAttributeStringResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetPhysicalChanAttributeStringRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::PhysicalChannelStringAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetPhysicalChanAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::PhysicalChannelStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetPhysicalChanAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - uInt32 size = status; - std::string value; - if (size > 0) { - value.resize(size - 1); - } - status = library_->GetTimingAttributeString(task, attribute, (char*)value.data(), size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { - // buffer is now too small, try again - continue; + + while (true) { + auto status = library_->GetPhysicalChanAttributeString(physical_channel, attribute, nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + uInt32 size = status; + + std::string value; + if (size > 0) { + value.resize(size - 1); + } + status = library_->GetPhysicalChanAttributeString(physical_channel, attribute, (char*)value.data(), size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + std::string value_utf8; + convert_to_grpc(value, &value_utf8); + response->set_value(value_utf8); + nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); + return ::grpc::Status::OK; + } + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetPhysicalChanAttributeUInt32(::grpc::ServerContext* context, const GetPhysicalChanAttributeUInt32Request* request, GetPhysicalChanAttributeUInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetPhysicalChanAttributeUInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::PhysicalChannelUInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetPhysicalChanAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::PhysicalChannelUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetPhysicalChanAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } + + uInt32 value {}; + auto status = library_->GetPhysicalChanAttributeUInt32(physical_channel, attribute, &value); if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } response->set_status(status); - std::string value_utf8; - convert_to_grpc(value, &value_utf8); - response->set_value(value_utf8); - nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); + response->set_value(value); return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetTimingAttributeTimestamp(::grpc::ServerContext* context, const GetTimingAttributeTimestampRequest* request, GetTimingAttributeTimestampResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetTimingAttributeTimestampRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TimingTimestampAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTimingAttributeTimestampRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TimingTimestampAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTimingAttributeTimestampRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - CVIAbsoluteTime value{}; - auto status = library_->GetTimingAttributeTimestamp(task, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - convert_to_grpc(value, response->mutable_value()); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetTimingAttributeUInt32(::grpc::ServerContext* context, const GetTimingAttributeUInt32Request* request, GetTimingAttributeUInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetTimingAttributeUInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TimingUInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTimingAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TimingUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTimingAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - uInt32 value{}; - auto status = library_->GetTimingAttributeUInt32(task, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetTimingAttributeUInt64(::grpc::ServerContext* context, const GetTimingAttributeUInt64Request* request, GetTimingAttributeUInt64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetTimingAttributeUInt64Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TimingUInt64Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTimingAttributeUInt64Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TimingUInt64Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTimingAttributeUInt64Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - uInt64 value{}; - auto status = library_->GetTimingAttributeUInt64(task, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetTrigAttributeBool(::grpc::ServerContext* context, const GetTrigAttributeBoolRequest* request, GetTrigAttributeBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetTrigAttributeBoolRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TriggerBoolAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTrigAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TriggerBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTrigAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - bool32 value{}; - auto status = library_->GetTrigAttributeBool(task, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetPhysicalChanAttributeUInt32Array(::grpc::ServerContext* context, const GetPhysicalChanAttributeUInt32ArrayRequest* request, GetPhysicalChanAttributeUInt32ArrayResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetPhysicalChanAttributeUInt32ArrayRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::PhysicalChannelUInt32ArrayAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetPhysicalChanAttributeUInt32ArrayRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::PhysicalChannelUInt32ArrayAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetPhysicalChanAttributeUInt32ArrayRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetTrigAttributeDouble(::grpc::ServerContext* context, const GetTrigAttributeDoubleRequest* request, GetTrigAttributeDoubleResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetTrigAttributeDoubleRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TriggerDoubleAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTrigAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TriggerDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTrigAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - float64 value{}; - auto status = library_->GetTrigAttributeDouble(task, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetTrigAttributeDoubleArray(::grpc::ServerContext* context, const GetTrigAttributeDoubleArrayRequest* request, GetTrigAttributeDoubleArrayResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetTrigAttributeDoubleArrayRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TriggerDoubleArrayAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTrigAttributeDoubleArrayRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TriggerDoubleArrayAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTrigAttributeDoubleArrayRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + while (true) { + auto status = library_->GetPhysicalChanAttributeUInt32Array(physical_channel, attribute, nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + uInt32 size = status; + + response->mutable_value()->Resize(size, 0); + uInt32* value = reinterpret_cast(response->mutable_value()->mutable_data()); + status = library_->GetPhysicalChanAttributeUInt32Array(physical_channel, attribute, value, size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + return ::grpc::Status::OK; } } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } - while (true) { - auto status = library_->GetTrigAttributeDoubleArray(task, attribute, nullptr, 0); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetReadAttributeBool(::grpc::ServerContext* context, const GetReadAttributeBoolRequest* request, GetReadAttributeBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetReadAttributeBoolRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ReadBoolAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetReadAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ReadBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetReadAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - uInt32 size = status; - response->mutable_value()->Resize(size, 0); - float64* value = response->mutable_value()->mutable_data(); - status = library_->GetTrigAttributeDoubleArray(task, attribute, value, size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { - // buffer is now too small, try again - continue; - } + bool32 value {}; + auto status = library_->GetReadAttributeBool(task, attribute, &value); if (!status_ok(status)) { return ConvertApiErrorStatusForTaskHandle(context, status, task); } response->set_status(status); + response->set_value(value); return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetTrigAttributeInt32(::grpc::ServerContext* context, const GetTrigAttributeInt32Request* request, GetTrigAttributeInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetTrigAttributeInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TriggerInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTrigAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TriggerInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTrigAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - int32 value{}; - auto status = library_->GetTrigAttributeInt32(task, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - auto checked_convert_value = [](auto raw_value) { - bool raw_value_is_valid = nidaqmx_grpc::TriggerInt32AttributeValues_IsValid(raw_value); - auto valid_enum_value = raw_value_is_valid ? raw_value : 0; - return static_cast(valid_enum_value); - }; - response->set_value(checked_convert_value(value)); - response->set_value_raw(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetTrigAttributeInt32Array(::grpc::ServerContext* context, const GetTrigAttributeInt32ArrayRequest* request, GetTrigAttributeInt32ArrayResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetTrigAttributeInt32ArrayRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TriggerInt32ArrayAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTrigAttributeInt32ArrayRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TriggerInt32ArrayAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTrigAttributeInt32ArrayRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetReadAttributeDouble(::grpc::ServerContext* context, const GetReadAttributeDoubleRequest* request, GetReadAttributeDoubleResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetReadAttributeDoubleRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ReadDoubleAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetReadAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ReadDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetReadAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } - while (true) { - auto status = library_->GetTrigAttributeInt32Array(task, attribute, nullptr, 0); + float64 value {}; + auto status = library_->GetReadAttributeDouble(task, attribute, &value); if (!status_ok(status)) { return ConvertApiErrorStatusForTaskHandle(context, status, task); } - uInt32 size = status; + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } - response->mutable_value_raw()->Resize(size, 0); - int32* value = reinterpret_cast(response->mutable_value_raw()->mutable_data()); - status = library_->GetTrigAttributeInt32Array(task, attribute, value, size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { - // buffer is now too small, try again - continue; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetReadAttributeInt32(::grpc::ServerContext* context, const GetReadAttributeInt32Request* request, GetReadAttributeInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetReadAttributeInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ReadInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetReadAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ReadInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetReadAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } + + int32 value {}; + auto status = library_->GetReadAttributeInt32(task, attribute, &value); if (!status_ok(status)) { return ConvertApiErrorStatusForTaskHandle(context, status, task); } response->set_status(status); auto checked_convert_value = [](auto raw_value) { - bool raw_value_is_valid = nidaqmx_grpc::TriggerInt32AttributeValues_IsValid(raw_value); + bool raw_value_is_valid = nidaqmx_grpc::ReadInt32AttributeValues_IsValid(raw_value); auto valid_enum_value = raw_value_is_valid ? raw_value : 0; - return static_cast(valid_enum_value); + return static_cast(valid_enum_value); }; - response->mutable_value()->Clear(); - response->mutable_value()->Reserve(size); - std::transform( - response->value_raw().begin(), - response->value_raw().begin() + size, - google::protobuf::RepeatedFieldBackInserter(response->mutable_value()), - [&](auto x) { - return checked_convert_value(x); - }); + response->set_value(checked_convert_value(value)); + response->set_value_raw(value); return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetTrigAttributeString(::grpc::ServerContext* context, const GetTrigAttributeStringRequest* request, GetTrigAttributeStringResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetTrigAttributeStringRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TriggerStringAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTrigAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TriggerStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetReadAttributeString(::grpc::ServerContext* context, const GetReadAttributeStringRequest* request, GetReadAttributeStringResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetReadAttributeStringRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ReadStringAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetReadAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ReadStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetReadAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::GetTrigAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + + while (true) { + auto status = library_->GetReadAttributeString(task, attribute, nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + uInt32 size = status; + + std::string value; + if (size > 0) { + value.resize(size - 1); + } + status = library_->GetReadAttributeString(task, attribute, (char*)value.data(), size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + std::string value_utf8; + convert_to_grpc(value, &value_utf8); + response->set_value(value_utf8); + nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); + return ::grpc::Status::OK; + } + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetReadAttributeUInt32(::grpc::ServerContext* context, const GetReadAttributeUInt32Request* request, GetReadAttributeUInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetReadAttributeUInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ReadUInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetReadAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ReadUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetReadAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - } - while (true) { - auto status = library_->GetTrigAttributeString(task, attribute, nullptr, 0); + uInt32 value {}; + auto status = library_->GetReadAttributeUInt32(task, attribute, &value); if (!status_ok(status)) { return ConvertApiErrorStatusForTaskHandle(context, status, task); } - uInt32 size = status; + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } - std::string value; - if (size > 0) { - value.resize(size - 1); - } - status = library_->GetTrigAttributeString(task, attribute, (char*)value.data(), size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { - // buffer is now too small, try again - continue; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetReadAttributeUInt64(::grpc::ServerContext* context, const GetReadAttributeUInt64Request* request, GetReadAttributeUInt64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetReadAttributeUInt64Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ReadUInt64Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetReadAttributeUInt64Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ReadUInt64Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetReadAttributeUInt64Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } + + uInt64 value {}; + auto status = library_->GetReadAttributeUInt64(task, attribute, &value); if (!status_ok(status)) { return ConvertApiErrorStatusForTaskHandle(context, status, task); } response->set_status(status); - std::string value_utf8; - convert_to_grpc(value, &value_utf8); - response->set_value(value_utf8); - nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); + response->set_value(value); return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetTrigAttributeTimestamp(::grpc::ServerContext* context, const GetTrigAttributeTimestampRequest* request, GetTrigAttributeTimestampResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetTrigAttributeTimestampRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TriggerTimestampAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTrigAttributeTimestampRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TriggerTimestampAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTrigAttributeTimestampRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - CVIAbsoluteTime value{}; - auto status = library_->GetTrigAttributeTimestamp(task, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - convert_to_grpc(value, response->mutable_value()); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetTrigAttributeUInt32(::grpc::ServerContext* context, const GetTrigAttributeUInt32Request* request, GetTrigAttributeUInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetTrigAttributeUInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TriggerUInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTrigAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TriggerUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetTrigAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - uInt32 value{}; - auto status = library_->GetTrigAttributeUInt32(task, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetRealTimeAttributeBool(::grpc::ServerContext* context, const GetRealTimeAttributeBoolRequest* request, GetRealTimeAttributeBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetRealTimeAttributeBoolRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::RealTimeBoolAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetRealTimeAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::RealTimeBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetRealTimeAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetWatchdogAttributeBool(::grpc::ServerContext* context, const GetWatchdogAttributeBoolRequest* request, GetWatchdogAttributeBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto lines_mbcs = convert_from_grpc(request->lines()); - auto lines = lines_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetWatchdogAttributeBoolRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::WatchdogBoolAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetWatchdogAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::WatchdogBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetWatchdogAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - bool32 value{}; - auto status = library_->GetWatchdogAttributeBool(task, lines, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + bool32 value {}; + auto status = library_->GetRealTimeAttributeBool(task, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetWatchdogAttributeDouble(::grpc::ServerContext* context, const GetWatchdogAttributeDoubleRequest* request, GetWatchdogAttributeDoubleResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto lines_mbcs = convert_from_grpc(request->lines()); - auto lines = lines_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetWatchdogAttributeDoubleRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::WatchdogDoubleAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetWatchdogAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::WatchdogDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetWatchdogAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - float64 value{}; - auto status = library_->GetWatchdogAttributeDouble(task, lines, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetRealTimeAttributeInt32(::grpc::ServerContext* context, const GetRealTimeAttributeInt32Request* request, GetRealTimeAttributeInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetRealTimeAttributeInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::RealTimeInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetRealTimeAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::RealTimeInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetRealTimeAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetWatchdogAttributeInt32(::grpc::ServerContext* context, const GetWatchdogAttributeInt32Request* request, GetWatchdogAttributeInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto lines_mbcs = convert_from_grpc(request->lines()); - auto lines = lines_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetWatchdogAttributeInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::WatchdogInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetWatchdogAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::WatchdogInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetWatchdogAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - int32 value{}; - auto status = library_->GetWatchdogAttributeInt32(task, lines, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - auto checked_convert_value = [](auto raw_value) { - bool raw_value_is_valid = nidaqmx_grpc::WatchdogInt32AttributeValues_IsValid(raw_value); - auto valid_enum_value = raw_value_is_valid ? raw_value : 0; - return static_cast(valid_enum_value); - }; - response->set_value(checked_convert_value(value)); - response->set_value_raw(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + int32 value {}; + auto status = library_->GetRealTimeAttributeInt32(task, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + auto checked_convert_value = [](auto raw_value) { + bool raw_value_is_valid = nidaqmx_grpc::RealTimeInt32AttributeValues_IsValid(raw_value); + auto valid_enum_value = raw_value_is_valid ? raw_value : 0; + return static_cast(valid_enum_value); + }; + response->set_value(checked_convert_value(value)); + response->set_value_raw(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetWatchdogAttributeString(::grpc::ServerContext* context, const GetWatchdogAttributeStringRequest* request, GetWatchdogAttributeStringResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto lines_mbcs = convert_from_grpc(request->lines()); - auto lines = lines_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetWatchdogAttributeStringRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::WatchdogStringAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetWatchdogAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::WatchdogStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetRealTimeAttributeUInt32(::grpc::ServerContext* context, const GetRealTimeAttributeUInt32Request* request, GetRealTimeAttributeUInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetRealTimeAttributeUInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::RealTimeUInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetRealTimeAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::RealTimeUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetRealTimeAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::GetWatchdogAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + uInt32 value {}; + auto status = library_->GetRealTimeAttributeUInt32(task, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } - while (true) { - auto status = library_->GetWatchdogAttributeString(task, lines, attribute, nullptr, 0); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetRefTrigTimestampVal(::grpc::ServerContext* context, const GetRefTrigTimestampValRequest* request, GetRefTrigTimestampValResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + CVIAbsoluteTime data {}; + auto status = library_->GetRefTrigTimestampVal(task, &data); if (!status_ok(status)) { return ConvertApiErrorStatusForTaskHandle(context, status, task); } - uInt32 size = status; + response->set_status(status); + convert_to_grpc(data, response->mutable_data()); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } - std::string value; - if (size > 0) { - value.resize(size - 1); - } - status = library_->GetWatchdogAttributeString(task, lines, attribute, (char*)value.data(), size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { - // buffer is now too small, try again - continue; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetScaleAttributeDouble(::grpc::ServerContext* context, const GetScaleAttributeDoubleRequest* request, GetScaleAttributeDoubleResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto scale_name_mbcs = convert_from_grpc(request->scale_name()); + auto scale_name = scale_name_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetScaleAttributeDoubleRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ScaleDoubleAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetScaleAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ScaleDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetScaleAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } + + float64 value {}; + auto status = library_->GetScaleAttributeDouble(scale_name, attribute, &value); if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } response->set_status(status); - std::string value_utf8; - convert_to_grpc(value, &value_utf8); - response->set_value(value_utf8); - nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); + response->set_value(value); return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetWriteAttributeBool(::grpc::ServerContext* context, const GetWriteAttributeBoolRequest* request, GetWriteAttributeBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetWriteAttributeBoolRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::WriteBoolAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetWriteAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::WriteBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetWriteAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - bool32 value{}; - auto status = library_->GetWriteAttributeBool(task, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetScaleAttributeDoubleArray(::grpc::ServerContext* context, const GetScaleAttributeDoubleArrayRequest* request, GetScaleAttributeDoubleArrayResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto scale_name_mbcs = convert_from_grpc(request->scale_name()); + auto scale_name = scale_name_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetScaleAttributeDoubleArrayRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ScaleDoubleArrayAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetScaleAttributeDoubleArrayRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ScaleDoubleArrayAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetScaleAttributeDoubleArrayRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetWriteAttributeDouble(::grpc::ServerContext* context, const GetWriteAttributeDoubleRequest* request, GetWriteAttributeDoubleResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetWriteAttributeDoubleRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::WriteDoubleAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetWriteAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::WriteDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetWriteAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - float64 value{}; - auto status = library_->GetWriteAttributeDouble(task, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetWriteAttributeInt32(::grpc::ServerContext* context, const GetWriteAttributeInt32Request* request, GetWriteAttributeInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetWriteAttributeInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::WriteInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetWriteAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::WriteInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetWriteAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - int32 value{}; - auto status = library_->GetWriteAttributeInt32(task, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - auto checked_convert_value = [](auto raw_value) { - bool raw_value_is_valid = nidaqmx_grpc::WriteInt32AttributeValues_IsValid(raw_value); - auto valid_enum_value = raw_value_is_valid ? raw_value : 0; - return static_cast(valid_enum_value); - }; - response->set_value(checked_convert_value(value)); - response->set_value_raw(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + while (true) { + auto status = library_->GetScaleAttributeDoubleArray(scale_name, attribute, nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + uInt32 size = status; + + response->mutable_value()->Resize(size, 0); + float64* value = response->mutable_value()->mutable_data(); + status = library_->GetScaleAttributeDoubleArray(scale_name, attribute, value, size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + return ::grpc::Status::OK; + } + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetWriteAttributeString(::grpc::ServerContext* context, const GetWriteAttributeStringRequest* request, GetWriteAttributeStringResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetWriteAttributeStringRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::WriteStringAttribute_IsValid(attribute) ? attribute : 0; - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetScaleAttributeInt32(::grpc::ServerContext* context, const GetScaleAttributeInt32Request* request, GetScaleAttributeInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto scale_name_mbcs = convert_from_grpc(request->scale_name()); + auto scale_name = scale_name_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetScaleAttributeInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ScaleInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetScaleAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ScaleInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetScaleAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::GetWriteAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::WriteStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; + + int32 value {}; + auto status = library_->GetScaleAttributeInt32(scale_name, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + auto checked_convert_value = [](auto raw_value) { + bool raw_value_is_valid = nidaqmx_grpc::ScaleInt32AttributeValues_IsValid(raw_value); + auto valid_enum_value = raw_value_is_valid ? raw_value : 0; + return static_cast(valid_enum_value); + }; + response->set_value(checked_convert_value(value)); + response->set_value_raw(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetScaleAttributeString(::grpc::ServerContext* context, const GetScaleAttributeStringRequest* request, GetScaleAttributeStringResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto scale_name_mbcs = convert_from_grpc(request->scale_name()); + auto scale_name = scale_name_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetScaleAttributeStringRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ScaleStringAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetScaleAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ScaleStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetScaleAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::GetWriteAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + + while (true) { + auto status = library_->GetScaleAttributeString(scale_name, attribute, nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + uInt32 size = status; + + std::string value; + if (size > 0) { + value.resize(size - 1); + } + status = library_->GetScaleAttributeString(scale_name, attribute, (char*)value.data(), size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + std::string value_utf8; + convert_to_grpc(value, &value_utf8); + response->set_value(value_utf8); + nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); + return ::grpc::Status::OK; + } + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetSelfCalLastDateAndTime(::grpc::ServerContext* context, const GetSelfCalLastDateAndTimeRequest* request, GetSelfCalLastDateAndTimeResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + uInt32 year {}; + uInt32 month {}; + uInt32 day {}; + uInt32 hour {}; + uInt32 minute {}; + auto status = library_->GetSelfCalLastDateAndTime(device_name, &year, &month, &day, &hour, &minute); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } + response->set_status(status); + response->set_year(year); + response->set_month(month); + response->set_day(day); + response->set_hour(hour); + response->set_minute(minute); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } - while (true) { - auto status = library_->GetWriteAttributeString(task, attribute, nullptr, 0); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetStartTrigTimestampVal(::grpc::ServerContext* context, const GetStartTrigTimestampValRequest* request, GetStartTrigTimestampValResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + CVIAbsoluteTime data {}; + auto status = library_->GetStartTrigTimestampVal(task, &data); if (!status_ok(status)) { return ConvertApiErrorStatusForTaskHandle(context, status, task); } - uInt32 size = status; + response->set_status(status); + convert_to_grpc(data, response->mutable_data()); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } - std::string value; - if (size > 0) { - value.resize(size - 1); - } - status = library_->GetWriteAttributeString(task, attribute, (char*)value.data(), size); - if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { - // buffer is now too small, try again - continue; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetStartTrigTrigWhen(::grpc::ServerContext* context, const GetStartTrigTrigWhenRequest* request, GetStartTrigTrigWhenResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + CVIAbsoluteTime data {}; + auto status = library_->GetStartTrigTrigWhen(task, &data); if (!status_ok(status)) { return ConvertApiErrorStatusForTaskHandle(context, status, task); } response->set_status(status); - std::string value_utf8; - convert_to_grpc(value, &value_utf8); - response->set_value(value_utf8); - nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); + convert_to_grpc(data, response->mutable_data()); return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetWriteAttributeUInt32(::grpc::ServerContext* context, const GetWriteAttributeUInt32Request* request, GetWriteAttributeUInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetWriteAttributeUInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::WriteUInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetWriteAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::WriteUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetWriteAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - uInt32 value{}; - auto status = library_->GetWriteAttributeUInt32(task, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetSyncPulseTimeWhen(::grpc::ServerContext* context, const GetSyncPulseTimeWhenRequest* request, GetSyncPulseTimeWhenResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + CVIAbsoluteTime data {}; + auto status = library_->GetSyncPulseTimeWhen(task, &data); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + convert_to_grpc(data, response->mutable_data()); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::GetWriteAttributeUInt64(::grpc::ServerContext* context, const GetWriteAttributeUInt64Request* request, GetWriteAttributeUInt64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::GetWriteAttributeUInt64Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::WriteUInt64Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::GetWriteAttributeUInt64Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::WriteUInt64Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::GetWriteAttributeUInt64Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - uInt64 value{}; - auto status = library_->GetWriteAttributeUInt64(task, attribute, &value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetSystemInfoAttributeString(::grpc::ServerContext* context, const GetSystemInfoAttributeStringRequest* request, GetSystemInfoAttributeStringResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetSystemInfoAttributeStringRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::SystemStringAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetSystemInfoAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::SystemStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetSystemInfoAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::IsTaskDone(::grpc::ServerContext* context, const IsTaskDoneRequest* request, IsTaskDoneResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - bool32 is_task_done{}; - auto status = library_->IsTaskDone(task, &is_task_done); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_is_task_done(is_task_done); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::LoadTask(::grpc::ServerContext* context, const LoadTaskRequest* request, LoadTaskResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto session_name_mbcs = convert_from_grpc(request->session_name()); - auto session_name = session_name_mbcs.c_str(); - auto initialization_behavior = request->initialization_behavior(); - - bool new_session_initialized{}; - auto init_lambda = [&]() { - TaskHandle task; - auto status = library_->LoadTask(session_name, &task); - return std::make_tuple(status, task); - }; - std::string grpc_device_session_name = request->session_name(); - // Capture the library shared_ptr by value. Do not capture `this` or any references. - LibrarySharedPtr library = library_; - auto cleanup_lambda = [library](TaskHandle id) { library->ClearTask(id); }; - int status = session_repository_->add_session(grpc_device_session_name, init_lambda, cleanup_lambda, initialization_behavior, &new_session_initialized); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - response->mutable_task()->set_name(grpc_device_session_name); - response->set_new_session_initialized(new_session_initialized); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + while (true) { + auto status = library_->GetSystemInfoAttributeString(attribute, nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + uInt32 size = status; -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::PerformBridgeOffsetNullingCalEx(::grpc::ServerContext* context, const PerformBridgeOffsetNullingCalExRequest* request, PerformBridgeOffsetNullingCalExResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto channel_mbcs = convert_from_grpc(request->channel()); - auto channel = channel_mbcs.c_str(); - bool32 skip_unsupported_channels = request->skip_unsupported_channels(); - auto status = library_->PerformBridgeOffsetNullingCalEx(task, channel, skip_unsupported_channels); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + std::string value; + if (size > 0) { + value.resize(size - 1); + } + status = library_->GetSystemInfoAttributeString(attribute, (char*)value.data(), size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + std::string value_utf8; + convert_to_grpc(value, &value_utf8); + response->set_value(value_utf8); + nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); + return ::grpc::Status::OK; + } + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::PerformBridgeShuntCalEx(::grpc::ServerContext* context, const PerformBridgeShuntCalExRequest* request, PerformBridgeShuntCalExResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto channel_mbcs = convert_from_grpc(request->channel()); - auto channel = channel_mbcs.c_str(); - float64 shunt_resistor_value = request->shunt_resistor_value(); - int32 shunt_resistor_location; - switch (request->shunt_resistor_location_enum_case()) { - case nidaqmx_grpc::PerformBridgeShuntCalExRequest::ShuntResistorLocationEnumCase::kShuntResistorLocation: { - shunt_resistor_location = static_cast(request->shunt_resistor_location()); - break; - } - case nidaqmx_grpc::PerformBridgeShuntCalExRequest::ShuntResistorLocationEnumCase::kShuntResistorLocationRaw: { - shunt_resistor_location = static_cast(request->shunt_resistor_location_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetSystemInfoAttributeUInt32(::grpc::ServerContext* context, const GetSystemInfoAttributeUInt32Request* request, GetSystemInfoAttributeUInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetSystemInfoAttributeUInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::SystemUInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetSystemInfoAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::SystemUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetSystemInfoAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::PerformBridgeShuntCalExRequest::ShuntResistorLocationEnumCase::SHUNT_RESISTOR_LOCATION_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for shunt_resistor_location was not specified or out of range"); - break; + + uInt32 value {}; + auto status = library_->GetSystemInfoAttributeUInt32(attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } + } - int32 shunt_resistor_select; - switch (request->shunt_resistor_select_enum_case()) { - case nidaqmx_grpc::PerformBridgeShuntCalExRequest::ShuntResistorSelectEnumCase::kShuntResistorSelect: { - shunt_resistor_select = static_cast(request->shunt_resistor_select()); - break; - } - case nidaqmx_grpc::PerformBridgeShuntCalExRequest::ShuntResistorSelectEnumCase::kShuntResistorSelectRaw: { - shunt_resistor_select = static_cast(request->shunt_resistor_select_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetTaskAttributeBool(::grpc::ServerContext* context, const GetTaskAttributeBoolRequest* request, GetTaskAttributeBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetTaskAttributeBoolRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TaskBoolAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTaskAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TaskBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTaskAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::PerformBridgeShuntCalExRequest::ShuntResistorSelectEnumCase::SHUNT_RESISTOR_SELECT_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for shunt_resistor_select was not specified or out of range"); - break; + + bool32 value {}; + auto status = library_->GetTaskAttributeBool(task, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } - int32 shunt_resistor_source; - switch (request->shunt_resistor_source_enum_case()) { - case nidaqmx_grpc::PerformBridgeShuntCalExRequest::ShuntResistorSourceEnumCase::kShuntResistorSource: { - shunt_resistor_source = static_cast(request->shunt_resistor_source()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetTaskAttributeString(::grpc::ServerContext* context, const GetTaskAttributeStringRequest* request, GetTaskAttributeStringResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetTaskAttributeStringRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TaskStringAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTaskAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TaskStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTaskAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::PerformBridgeShuntCalExRequest::ShuntResistorSourceEnumCase::kShuntResistorSourceRaw: { - shunt_resistor_source = static_cast(request->shunt_resistor_source_raw()); - break; + + + while (true) { + auto status = library_->GetTaskAttributeString(task, attribute, nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + uInt32 size = status; + + std::string value; + if (size > 0) { + value.resize(size - 1); + } + status = library_->GetTaskAttributeString(task, attribute, (char*)value.data(), size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + std::string value_utf8; + convert_to_grpc(value, &value_utf8); + response->set_value(value_utf8); + nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); + return ::grpc::Status::OK; + } + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetTaskAttributeUInt32(::grpc::ServerContext* context, const GetTaskAttributeUInt32Request* request, GetTaskAttributeUInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetTaskAttributeUInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TaskUInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTaskAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TaskUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTaskAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::PerformBridgeShuntCalExRequest::ShuntResistorSourceEnumCase::SHUNT_RESISTOR_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for shunt_resistor_source was not specified or out of range"); - break; + + uInt32 value {}; + auto status = library_->GetTaskAttributeUInt32(task, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; } - - float64 bridge_resistance = request->bridge_resistance(); - bool32 skip_unsupported_channels = request->skip_unsupported_channels(); - auto status = library_->PerformBridgeShuntCalEx(task, channel, shunt_resistor_value, shunt_resistor_location, shunt_resistor_select, shunt_resistor_source, bridge_resistance, skip_unsupported_channels); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::PerformStrainShuntCalEx(::grpc::ServerContext* context, const PerformStrainShuntCalExRequest* request, PerformStrainShuntCalExResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto channel_mbcs = convert_from_grpc(request->channel()); - auto channel = channel_mbcs.c_str(); - float64 shunt_resistor_value = request->shunt_resistor_value(); - int32 shunt_resistor_location; - switch (request->shunt_resistor_location_enum_case()) { - case nidaqmx_grpc::PerformStrainShuntCalExRequest::ShuntResistorLocationEnumCase::kShuntResistorLocation: { - shunt_resistor_location = static_cast(request->shunt_resistor_location()); - break; - } - case nidaqmx_grpc::PerformStrainShuntCalExRequest::ShuntResistorLocationEnumCase::kShuntResistorLocationRaw: { - shunt_resistor_location = static_cast(request->shunt_resistor_location_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetTimingAttributeBool(::grpc::ServerContext* context, const GetTimingAttributeBoolRequest* request, GetTimingAttributeBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetTimingAttributeBoolRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TimingBoolAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTimingAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TimingBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTimingAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::PerformStrainShuntCalExRequest::ShuntResistorLocationEnumCase::SHUNT_RESISTOR_LOCATION_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for shunt_resistor_location was not specified or out of range"); - break; + + bool32 value {}; + auto status = library_->GetTimingAttributeBool(task, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } + } - int32 shunt_resistor_select; - switch (request->shunt_resistor_select_enum_case()) { - case nidaqmx_grpc::PerformStrainShuntCalExRequest::ShuntResistorSelectEnumCase::kShuntResistorSelect: { - shunt_resistor_select = static_cast(request->shunt_resistor_select()); - break; - } - case nidaqmx_grpc::PerformStrainShuntCalExRequest::ShuntResistorSelectEnumCase::kShuntResistorSelectRaw: { - shunt_resistor_select = static_cast(request->shunt_resistor_select_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetTimingAttributeDouble(::grpc::ServerContext* context, const GetTimingAttributeDoubleRequest* request, GetTimingAttributeDoubleResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetTimingAttributeDoubleRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TimingDoubleAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTimingAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TimingDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTimingAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::PerformStrainShuntCalExRequest::ShuntResistorSelectEnumCase::SHUNT_RESISTOR_SELECT_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for shunt_resistor_select was not specified or out of range"); - break; + + float64 value {}; + auto status = library_->GetTimingAttributeDouble(task, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetTimingAttributeExBool(::grpc::ServerContext* context, const GetTimingAttributeExBoolRequest* request, GetTimingAttributeExBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto device_names_mbcs = convert_from_grpc(request->device_names()); + auto device_names = device_names_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetTimingAttributeExBoolRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TimingBoolAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTimingAttributeExBoolRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TimingBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTimingAttributeExBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } - int32 shunt_resistor_source; - switch (request->shunt_resistor_source_enum_case()) { - case nidaqmx_grpc::PerformStrainShuntCalExRequest::ShuntResistorSourceEnumCase::kShuntResistorSource: { - shunt_resistor_source = static_cast(request->shunt_resistor_source()); - break; + bool32 value {}; + auto status = library_->GetTimingAttributeExBool(task, device_names, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - case nidaqmx_grpc::PerformStrainShuntCalExRequest::ShuntResistorSourceEnumCase::kShuntResistorSourceRaw: { - shunt_resistor_source = static_cast(request->shunt_resistor_source_raw()); - break; + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetTimingAttributeExDouble(::grpc::ServerContext* context, const GetTimingAttributeExDoubleRequest* request, GetTimingAttributeExDoubleResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto device_names_mbcs = convert_from_grpc(request->device_names()); + auto device_names = device_names_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetTimingAttributeExDoubleRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TimingDoubleAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTimingAttributeExDoubleRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TimingDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTimingAttributeExDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::PerformStrainShuntCalExRequest::ShuntResistorSourceEnumCase::SHUNT_RESISTOR_SOURCE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for shunt_resistor_source was not specified or out of range"); - break; + + float64 value {}; + auto status = library_->GetTimingAttributeExDouble(task, device_names, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetTimingAttributeExInt32(::grpc::ServerContext* context, const GetTimingAttributeExInt32Request* request, GetTimingAttributeExInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto device_names_mbcs = convert_from_grpc(request->device_names()); + auto device_names = device_names_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetTimingAttributeExInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TimingInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTimingAttributeExInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TimingInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTimingAttributeExInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } - bool32 skip_unsupported_channels = request->skip_unsupported_channels(); - auto status = library_->PerformStrainShuntCalEx(task, channel, shunt_resistor_value, shunt_resistor_location, shunt_resistor_select, shunt_resistor_source, skip_unsupported_channels); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + int32 value {}; + auto status = library_->GetTimingAttributeExInt32(task, device_names, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + auto checked_convert_value = [](auto raw_value) { + bool raw_value_is_valid = nidaqmx_grpc::TimingInt32AttributeValues_IsValid(raw_value); + auto valid_enum_value = raw_value_is_valid ? raw_value : 0; + return static_cast(valid_enum_value); + }; + response->set_value(checked_convert_value(value)); + response->set_value_raw(value); + return ::grpc::Status::OK; } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetTimingAttributeExString(::grpc::ServerContext* context, const GetTimingAttributeExStringRequest* request, GetTimingAttributeExStringResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto device_names_mbcs = convert_from_grpc(request->device_names()); + auto device_names = device_names_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetTimingAttributeExStringRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TimingStringAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTimingAttributeExStringRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TimingStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTimingAttributeExStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::PerformThrmcplLeadOffsetNullingCal(::grpc::ServerContext* context, const PerformThrmcplLeadOffsetNullingCalRequest* request, PerformThrmcplLeadOffsetNullingCalResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto channel_mbcs = convert_from_grpc(request->channel()); - auto channel = channel_mbcs.c_str(); - bool32 skip_unsupported_channels = request->skip_unsupported_channels(); - auto status = library_->PerformThrmcplLeadOffsetNullingCal(task, channel, skip_unsupported_channels); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ReadAnalogF64(::grpc::ServerContext* context, const ReadAnalogF64Request* request, ReadAnalogF64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - int32 fill_mode; - switch (request->fill_mode_enum_case()) { - case nidaqmx_grpc::ReadAnalogF64Request::FillModeEnumCase::kFillMode: { - fill_mode = static_cast(request->fill_mode()); - break; - } - case nidaqmx_grpc::ReadAnalogF64Request::FillModeEnumCase::kFillModeRaw: { - fill_mode = static_cast(request->fill_mode_raw()); - break; + while (true) { + auto status = library_->GetTimingAttributeExString(task, device_names, attribute, nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + uInt32 size = status; + + std::string value; + if (size > 0) { + value.resize(size - 1); + } + status = library_->GetTimingAttributeExString(task, device_names, attribute, (char*)value.data(), size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + std::string value_utf8; + convert_to_grpc(value, &value_utf8); + response->set_value(value_utf8); + nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); + return ::grpc::Status::OK; + } + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetTimingAttributeExTimestamp(::grpc::ServerContext* context, const GetTimingAttributeExTimestampRequest* request, GetTimingAttributeExTimestampResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto device_names_mbcs = convert_from_grpc(request->device_names()); + auto device_names = device_names_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetTimingAttributeExTimestampRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TimingTimestampAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTimingAttributeExTimestampRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TimingTimestampAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTimingAttributeExTimestampRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::ReadAnalogF64Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); - break; + + CVIAbsoluteTime value {}; + auto status = library_->GetTimingAttributeExTimestamp(task, device_names, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + convert_to_grpc(value, response->mutable_value()); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetTimingAttributeExUInt32(::grpc::ServerContext* context, const GetTimingAttributeExUInt32Request* request, GetTimingAttributeExUInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto device_names_mbcs = convert_from_grpc(request->device_names()); + auto device_names = device_names_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetTimingAttributeExUInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TimingUInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTimingAttributeExUInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TimingUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTimingAttributeExUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - response->mutable_read_array()->Resize(array_size_in_samps, 0); - float64* read_array = response->mutable_read_array()->mutable_data(); - int32 samps_per_chan_read{}; - auto status = library_->ReadAnalogF64(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); - context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); - if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_samps_per_chan_read(samps_per_chan_read); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginReadAnalogF64(::grpc::ServerContext* context, const BeginReadAnalogF64Request* request, BeginReadAnalogF64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - int32 fill_mode; - switch (request->fill_mode_enum_case()) { - case nidaqmx_grpc::BeginReadAnalogF64Request::FillModeEnumCase::kFillMode: { - fill_mode = static_cast(request->fill_mode()); - break; - } - case nidaqmx_grpc::BeginReadAnalogF64Request::FillModeEnumCase::kFillModeRaw: { - fill_mode = static_cast(request->fill_mode_raw()); - break; - } - case nidaqmx_grpc::BeginReadAnalogF64Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); - break; - } - } - - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->num_samps_per_chan = num_samps_per_chan; - data->timeout = timeout; - data->fill_mode = fill_mode; - data->array_size_in_samps = array_size_in_samps; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - data->response.mutable_read_array()->Reserve(request->array_size_in_samps()); - data->response.mutable_read_array()->Resize(request->array_size_in_samps(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadAnalogF64", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ReadAnalogScalarF64(::grpc::ServerContext* context, const ReadAnalogScalarF64Request* request, ReadAnalogScalarF64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - float64 timeout = request->timeout(); - auto reserved = nullptr; - float64 value{}; - auto status = library_->ReadAnalogScalarF64(task, timeout, &value, reserved); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + uInt32 value {}; + auto status = library_->GetTimingAttributeExUInt32(task, device_names, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetTimingAttributeExUInt64(::grpc::ServerContext* context, const GetTimingAttributeExUInt64Request* request, GetTimingAttributeExUInt64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto device_names_mbcs = convert_from_grpc(request->device_names()); + auto device_names = device_names_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetTimingAttributeExUInt64Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TimingUInt64Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTimingAttributeExUInt64Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TimingUInt64Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTimingAttributeExUInt64Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginReadAnalogScalarF64(::grpc::ServerContext* context, const BeginReadAnalogScalarF64Request* request, BeginReadAnalogScalarF64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - float64 timeout = request->timeout(); - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->timeout = timeout; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadAnalogScalarF64", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + uInt64 value {}; + auto status = library_->GetTimingAttributeExUInt64(task, device_names, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ReadBinaryI16(::grpc::ServerContext* context, const ReadBinaryI16Request* request, ReadBinaryI16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - int32 fill_mode; - switch (request->fill_mode_enum_case()) { - case nidaqmx_grpc::ReadBinaryI16Request::FillModeEnumCase::kFillMode: { - fill_mode = static_cast(request->fill_mode()); - break; - } - case nidaqmx_grpc::ReadBinaryI16Request::FillModeEnumCase::kFillModeRaw: { - fill_mode = static_cast(request->fill_mode_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetTimingAttributeInt32(::grpc::ServerContext* context, const GetTimingAttributeInt32Request* request, GetTimingAttributeInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetTimingAttributeInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TimingInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTimingAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TimingInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTimingAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::ReadBinaryI16Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); - break; + + int32 value {}; + auto status = library_->GetTimingAttributeInt32(task, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + auto checked_convert_value = [](auto raw_value) { + bool raw_value_is_valid = nidaqmx_grpc::TimingInt32AttributeValues_IsValid(raw_value); + auto valid_enum_value = raw_value_is_valid ? raw_value : 0; + return static_cast(valid_enum_value); + }; + response->set_value(checked_convert_value(value)); + response->set_value_raw(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - std::vector read_array(array_size_in_samps); - int32 samps_per_chan_read{}; - auto status = library_->ReadBinaryI16(task, num_samps_per_chan, timeout, fill_mode, read_array.data(), array_size_in_samps, &samps_per_chan_read, reserved); - context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); - if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->mutable_read_array()->Clear(); - response->mutable_read_array()->Reserve(array_size_in_samps); - std::transform( - read_array.begin(), - read_array.begin() + array_size_in_samps, - google::protobuf::RepeatedFieldBackInserter(response->mutable_read_array()), - [&](auto x) { - return x; - }); - response->set_samps_per_chan_read(samps_per_chan_read); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginReadBinaryI16(::grpc::ServerContext* context, const BeginReadBinaryI16Request* request, BeginReadBinaryI16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - int32 fill_mode; - switch (request->fill_mode_enum_case()) { - case nidaqmx_grpc::BeginReadBinaryI16Request::FillModeEnumCase::kFillMode: { - fill_mode = static_cast(request->fill_mode()); - break; - } - case nidaqmx_grpc::BeginReadBinaryI16Request::FillModeEnumCase::kFillModeRaw: { - fill_mode = static_cast(request->fill_mode_raw()); - break; - } - case nidaqmx_grpc::BeginReadBinaryI16Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); - break; - } - } - - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->num_samps_per_chan = num_samps_per_chan; - data->timeout = timeout; - data->fill_mode = fill_mode; - data->array_size_in_samps = array_size_in_samps; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - data->response.mutable_read_array()->Reserve(request->array_size_in_samps()); - data->response.mutable_read_array()->Resize(request->array_size_in_samps(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadBinaryI16", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ReadBinaryI32(::grpc::ServerContext* context, const ReadBinaryI32Request* request, ReadBinaryI32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - int32 fill_mode; - switch (request->fill_mode_enum_case()) { - case nidaqmx_grpc::ReadBinaryI32Request::FillModeEnumCase::kFillMode: { - fill_mode = static_cast(request->fill_mode()); - break; - } - case nidaqmx_grpc::ReadBinaryI32Request::FillModeEnumCase::kFillModeRaw: { - fill_mode = static_cast(request->fill_mode_raw()); - break; - } - case nidaqmx_grpc::ReadBinaryI32Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetTimingAttributeString(::grpc::ServerContext* context, const GetTimingAttributeStringRequest* request, GetTimingAttributeStringResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetTimingAttributeStringRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TimingStringAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTimingAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TimingStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTimingAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - response->mutable_read_array()->Resize(array_size_in_samps, 0); - int32* read_array = reinterpret_cast(response->mutable_read_array()->mutable_data()); - int32 samps_per_chan_read{}; - auto status = library_->ReadBinaryI32(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); - context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); - if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_samps_per_chan_read(samps_per_chan_read); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginReadBinaryI32(::grpc::ServerContext* context, const BeginReadBinaryI32Request* request, BeginReadBinaryI32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - int32 fill_mode; - switch (request->fill_mode_enum_case()) { - case nidaqmx_grpc::BeginReadBinaryI32Request::FillModeEnumCase::kFillMode: { - fill_mode = static_cast(request->fill_mode()); - break; - } - case nidaqmx_grpc::BeginReadBinaryI32Request::FillModeEnumCase::kFillModeRaw: { - fill_mode = static_cast(request->fill_mode_raw()); - break; - } - case nidaqmx_grpc::BeginReadBinaryI32Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); - break; - } - } - - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->num_samps_per_chan = num_samps_per_chan; - data->timeout = timeout; - data->fill_mode = fill_mode; - data->array_size_in_samps = array_size_in_samps; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - data->response.mutable_read_array()->Reserve(request->array_size_in_samps()); - data->response.mutable_read_array()->Resize(request->array_size_in_samps(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadBinaryI32", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + while (true) { + auto status = library_->GetTimingAttributeString(task, attribute, nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + uInt32 size = status; -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ReadBinaryU16(::grpc::ServerContext* context, const ReadBinaryU16Request* request, ReadBinaryU16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - int32 fill_mode; - switch (request->fill_mode_enum_case()) { - case nidaqmx_grpc::ReadBinaryU16Request::FillModeEnumCase::kFillMode: { - fill_mode = static_cast(request->fill_mode()); - break; - } - case nidaqmx_grpc::ReadBinaryU16Request::FillModeEnumCase::kFillModeRaw: { - fill_mode = static_cast(request->fill_mode_raw()); - break; + std::string value; + if (size > 0) { + value.resize(size - 1); + } + status = library_->GetTimingAttributeString(task, attribute, (char*)value.data(), size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + std::string value_utf8; + convert_to_grpc(value, &value_utf8); + response->set_value(value_utf8); + nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); + return ::grpc::Status::OK; + } + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetTimingAttributeTimestamp(::grpc::ServerContext* context, const GetTimingAttributeTimestampRequest* request, GetTimingAttributeTimestampResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetTimingAttributeTimestampRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TimingTimestampAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTimingAttributeTimestampRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TimingTimestampAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTimingAttributeTimestampRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::ReadBinaryU16Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); - break; + + CVIAbsoluteTime value {}; + auto status = library_->GetTimingAttributeTimestamp(task, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + convert_to_grpc(value, response->mutable_value()); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - std::vector read_array(array_size_in_samps); - int32 samps_per_chan_read{}; - auto status = library_->ReadBinaryU16(task, num_samps_per_chan, timeout, fill_mode, read_array.data(), array_size_in_samps, &samps_per_chan_read, reserved); - context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); - if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->mutable_read_array()->Clear(); - response->mutable_read_array()->Reserve(array_size_in_samps); - std::transform( - read_array.begin(), - read_array.begin() + array_size_in_samps, - google::protobuf::RepeatedFieldBackInserter(response->mutable_read_array()), - [&](auto x) { - return x; - }); - response->set_samps_per_chan_read(samps_per_chan_read); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginReadBinaryU16(::grpc::ServerContext* context, const BeginReadBinaryU16Request* request, BeginReadBinaryU16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - int32 fill_mode; - switch (request->fill_mode_enum_case()) { - case nidaqmx_grpc::BeginReadBinaryU16Request::FillModeEnumCase::kFillMode: { - fill_mode = static_cast(request->fill_mode()); - break; - } - case nidaqmx_grpc::BeginReadBinaryU16Request::FillModeEnumCase::kFillModeRaw: { - fill_mode = static_cast(request->fill_mode_raw()); - break; - } - case nidaqmx_grpc::BeginReadBinaryU16Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); - break; - } - } - - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->num_samps_per_chan = num_samps_per_chan; - data->timeout = timeout; - data->fill_mode = fill_mode; - data->array_size_in_samps = array_size_in_samps; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - data->response.mutable_read_array()->Reserve(request->array_size_in_samps()); - data->response.mutable_read_array()->Resize(request->array_size_in_samps(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadBinaryU16", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ReadBinaryU32(::grpc::ServerContext* context, const ReadBinaryU32Request* request, ReadBinaryU32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - int32 fill_mode; - switch (request->fill_mode_enum_case()) { - case nidaqmx_grpc::ReadBinaryU32Request::FillModeEnumCase::kFillMode: { - fill_mode = static_cast(request->fill_mode()); - break; - } - case nidaqmx_grpc::ReadBinaryU32Request::FillModeEnumCase::kFillModeRaw: { - fill_mode = static_cast(request->fill_mode_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetTimingAttributeUInt32(::grpc::ServerContext* context, const GetTimingAttributeUInt32Request* request, GetTimingAttributeUInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetTimingAttributeUInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TimingUInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTimingAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TimingUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTimingAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::ReadBinaryU32Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); - break; + + uInt32 value {}; + auto status = library_->GetTimingAttributeUInt32(task, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - response->mutable_read_array()->Resize(array_size_in_samps, 0); - uInt32* read_array = reinterpret_cast(response->mutable_read_array()->mutable_data()); - int32 samps_per_chan_read{}; - auto status = library_->ReadBinaryU32(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); - context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); - if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_samps_per_chan_read(samps_per_chan_read); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginReadBinaryU32(::grpc::ServerContext* context, const BeginReadBinaryU32Request* request, BeginReadBinaryU32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - int32 fill_mode; - switch (request->fill_mode_enum_case()) { - case nidaqmx_grpc::BeginReadBinaryU32Request::FillModeEnumCase::kFillMode: { - fill_mode = static_cast(request->fill_mode()); - break; - } - case nidaqmx_grpc::BeginReadBinaryU32Request::FillModeEnumCase::kFillModeRaw: { - fill_mode = static_cast(request->fill_mode_raw()); - break; - } - case nidaqmx_grpc::BeginReadBinaryU32Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); - break; - } - } - - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->num_samps_per_chan = num_samps_per_chan; - data->timeout = timeout; - data->fill_mode = fill_mode; - data->array_size_in_samps = array_size_in_samps; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - data->response.mutable_read_array()->Reserve(request->array_size_in_samps()); - data->response.mutable_read_array()->Resize(request->array_size_in_samps(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadBinaryU32", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ReadCounterF64(::grpc::ServerContext* context, const ReadCounterF64Request* request, ReadCounterF64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - response->mutable_read_array()->Resize(array_size_in_samps, 0); - float64* read_array = response->mutable_read_array()->mutable_data(); - int32 samps_per_chan_read{}; - auto status = library_->ReadCounterF64(task, num_samps_per_chan, timeout, read_array, array_size_in_samps, &samps_per_chan_read, reserved); - context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); - if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_samps_per_chan_read(samps_per_chan_read); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetTimingAttributeUInt64(::grpc::ServerContext* context, const GetTimingAttributeUInt64Request* request, GetTimingAttributeUInt64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetTimingAttributeUInt64Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TimingUInt64Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTimingAttributeUInt64Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TimingUInt64Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTimingAttributeUInt64Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginReadCounterF64(::grpc::ServerContext* context, const BeginReadCounterF64Request* request, BeginReadCounterF64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->num_samps_per_chan = num_samps_per_chan; - data->timeout = timeout; - data->array_size_in_samps = array_size_in_samps; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - data->response.mutable_read_array()->Reserve(request->array_size_in_samps()); - data->response.mutable_read_array()->Resize(request->array_size_in_samps(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCounterF64", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + uInt64 value {}; + auto status = library_->GetTimingAttributeUInt64(task, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ReadCounterF64Ex(::grpc::ServerContext* context, const ReadCounterF64ExRequest* request, ReadCounterF64ExResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - int32 fill_mode; - switch (request->fill_mode_enum_case()) { - case nidaqmx_grpc::ReadCounterF64ExRequest::FillModeEnumCase::kFillMode: { - fill_mode = static_cast(request->fill_mode()); - break; - } - case nidaqmx_grpc::ReadCounterF64ExRequest::FillModeEnumCase::kFillModeRaw: { - fill_mode = static_cast(request->fill_mode_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetTrigAttributeBool(::grpc::ServerContext* context, const GetTrigAttributeBoolRequest* request, GetTrigAttributeBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetTrigAttributeBoolRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TriggerBoolAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTrigAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TriggerBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTrigAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::ReadCounterF64ExRequest::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); - break; + + bool32 value {}; + auto status = library_->GetTrigAttributeBool(task, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - response->mutable_read_array()->Resize(array_size_in_samps, 0); - float64* read_array = response->mutable_read_array()->mutable_data(); - int32 samps_per_chan_read{}; - auto status = library_->ReadCounterF64Ex(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); - context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); - if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_samps_per_chan_read(samps_per_chan_read); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginReadCounterF64Ex(::grpc::ServerContext* context, const BeginReadCounterF64ExRequest* request, BeginReadCounterF64ExResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - int32 fill_mode; - switch (request->fill_mode_enum_case()) { - case nidaqmx_grpc::BeginReadCounterF64ExRequest::FillModeEnumCase::kFillMode: { - fill_mode = static_cast(request->fill_mode()); - break; - } - case nidaqmx_grpc::BeginReadCounterF64ExRequest::FillModeEnumCase::kFillModeRaw: { - fill_mode = static_cast(request->fill_mode_raw()); - break; - } - case nidaqmx_grpc::BeginReadCounterF64ExRequest::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); - break; - } - } - - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->num_samps_per_chan = num_samps_per_chan; - data->timeout = timeout; - data->fill_mode = fill_mode; - data->array_size_in_samps = array_size_in_samps; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - data->response.mutable_read_array()->Reserve(request->array_size_in_samps()); - data->response.mutable_read_array()->Resize(request->array_size_in_samps(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCounterF64Ex", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetTrigAttributeDouble(::grpc::ServerContext* context, const GetTrigAttributeDoubleRequest* request, GetTrigAttributeDoubleResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetTrigAttributeDoubleRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TriggerDoubleAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTrigAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TriggerDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTrigAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ReadCounterScalarF64(::grpc::ServerContext* context, const ReadCounterScalarF64Request* request, ReadCounterScalarF64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - float64 timeout = request->timeout(); - auto reserved = nullptr; - float64 value{}; - auto status = library_->ReadCounterScalarF64(task, timeout, &value, reserved); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + float64 value {}; + auto status = library_->GetTrigAttributeDouble(task, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginReadCounterScalarF64(::grpc::ServerContext* context, const BeginReadCounterScalarF64Request* request, BeginReadCounterScalarF64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - float64 timeout = request->timeout(); - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->timeout = timeout; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCounterScalarF64", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetTrigAttributeDoubleArray(::grpc::ServerContext* context, const GetTrigAttributeDoubleArrayRequest* request, GetTrigAttributeDoubleArrayResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetTrigAttributeDoubleArrayRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TriggerDoubleArrayAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTrigAttributeDoubleArrayRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TriggerDoubleArrayAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTrigAttributeDoubleArrayRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ReadCounterScalarU32(::grpc::ServerContext* context, const ReadCounterScalarU32Request* request, ReadCounterScalarU32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - float64 timeout = request->timeout(); - auto reserved = nullptr; - uInt32 value{}; - auto status = library_->ReadCounterScalarU32(task, timeout, &value, reserved); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginReadCounterScalarU32(::grpc::ServerContext* context, const BeginReadCounterScalarU32Request* request, BeginReadCounterScalarU32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - float64 timeout = request->timeout(); - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->timeout = timeout; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCounterScalarU32", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + while (true) { + auto status = library_->GetTrigAttributeDoubleArray(task, attribute, nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + uInt32 size = status; + + response->mutable_value()->Resize(size, 0); + float64* value = response->mutable_value()->mutable_data(); + status = library_->GetTrigAttributeDoubleArray(task, attribute, value, size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ReadCounterU32(::grpc::ServerContext* context, const ReadCounterU32Request* request, ReadCounterU32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - response->mutable_read_array()->Resize(array_size_in_samps, 0); - uInt32* read_array = reinterpret_cast(response->mutable_read_array()->mutable_data()); - int32 samps_per_chan_read{}; - auto status = library_->ReadCounterU32(task, num_samps_per_chan, timeout, read_array, array_size_in_samps, &samps_per_chan_read, reserved); - context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); - if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_samps_per_chan_read(samps_per_chan_read); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetTrigAttributeInt32(::grpc::ServerContext* context, const GetTrigAttributeInt32Request* request, GetTrigAttributeInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetTrigAttributeInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TriggerInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTrigAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TriggerInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTrigAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginReadCounterU32(::grpc::ServerContext* context, const BeginReadCounterU32Request* request, BeginReadCounterU32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->num_samps_per_chan = num_samps_per_chan; - data->timeout = timeout; - data->array_size_in_samps = array_size_in_samps; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - data->response.mutable_read_array()->Reserve(request->array_size_in_samps()); - data->response.mutable_read_array()->Resize(request->array_size_in_samps(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCounterU32", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + int32 value {}; + auto status = library_->GetTrigAttributeInt32(task, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + auto checked_convert_value = [](auto raw_value) { + bool raw_value_is_valid = nidaqmx_grpc::TriggerInt32AttributeValues_IsValid(raw_value); + auto valid_enum_value = raw_value_is_valid ? raw_value : 0; + return static_cast(valid_enum_value); + }; + response->set_value(checked_convert_value(value)); + response->set_value_raw(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ReadCounterU32Ex(::grpc::ServerContext* context, const ReadCounterU32ExRequest* request, ReadCounterU32ExResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - int32 fill_mode; - switch (request->fill_mode_enum_case()) { - case nidaqmx_grpc::ReadCounterU32ExRequest::FillModeEnumCase::kFillMode: { - fill_mode = static_cast(request->fill_mode()); - break; - } - case nidaqmx_grpc::ReadCounterU32ExRequest::FillModeEnumCase::kFillModeRaw: { - fill_mode = static_cast(request->fill_mode_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetTrigAttributeInt32Array(::grpc::ServerContext* context, const GetTrigAttributeInt32ArrayRequest* request, GetTrigAttributeInt32ArrayResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetTrigAttributeInt32ArrayRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TriggerInt32ArrayAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTrigAttributeInt32ArrayRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TriggerInt32ArrayAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTrigAttributeInt32ArrayRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::ReadCounterU32ExRequest::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); - break; + + + while (true) { + auto status = library_->GetTrigAttributeInt32Array(task, attribute, nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + uInt32 size = status; + + response->mutable_value_raw()->Resize(size, 0); + int32* value = reinterpret_cast(response->mutable_value_raw()->mutable_data()); + status = library_->GetTrigAttributeInt32Array(task, attribute, value, size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + auto checked_convert_value = [](auto raw_value) { + bool raw_value_is_valid = nidaqmx_grpc::TriggerInt32AttributeValues_IsValid(raw_value); + auto valid_enum_value = raw_value_is_valid ? raw_value : 0; + return static_cast(valid_enum_value); + }; + response->mutable_value()->Clear(); + response->mutable_value()->Reserve(size); + std::transform( + response->value_raw().begin(), + response->value_raw().begin() + size, + google::protobuf::RepeatedFieldBackInserter(response->mutable_value()), + [&](auto x) { + return checked_convert_value(x); + }); + return ::grpc::Status::OK; } } - - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - response->mutable_read_array()->Resize(array_size_in_samps, 0); - uInt32* read_array = reinterpret_cast(response->mutable_read_array()->mutable_data()); - int32 samps_per_chan_read{}; - auto status = library_->ReadCounterU32Ex(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); - context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); - if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_samps_per_chan_read(samps_per_chan_read); - return ::grpc::Status::OK; + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginReadCounterU32Ex(::grpc::ServerContext* context, const BeginReadCounterU32ExRequest* request, BeginReadCounterU32ExResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - int32 fill_mode; - switch (request->fill_mode_enum_case()) { - case nidaqmx_grpc::BeginReadCounterU32ExRequest::FillModeEnumCase::kFillMode: { - fill_mode = static_cast(request->fill_mode()); - break; - } - case nidaqmx_grpc::BeginReadCounterU32ExRequest::FillModeEnumCase::kFillModeRaw: { - fill_mode = static_cast(request->fill_mode_raw()); - break; - } - case nidaqmx_grpc::BeginReadCounterU32ExRequest::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); - break; - } - } - - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->num_samps_per_chan = num_samps_per_chan; - data->timeout = timeout; - data->fill_mode = fill_mode; - data->array_size_in_samps = array_size_in_samps; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - data->response.mutable_read_array()->Reserve(request->array_size_in_samps()); - data->response.mutable_read_array()->Resize(request->array_size_in_samps(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCounterU32Ex", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ReadCtrFreq(::grpc::ServerContext* context, const ReadCtrFreqRequest* request, ReadCtrFreqResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - int32 interleaved; - switch (request->interleaved_enum_case()) { - case nidaqmx_grpc::ReadCtrFreqRequest::InterleavedEnumCase::kInterleaved: { - interleaved = static_cast(request->interleaved()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetTrigAttributeString(::grpc::ServerContext* context, const GetTrigAttributeStringRequest* request, GetTrigAttributeStringResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetTrigAttributeStringRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TriggerStringAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTrigAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TriggerStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTrigAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::ReadCtrFreqRequest::InterleavedEnumCase::kInterleavedRaw: { - interleaved = static_cast(request->interleaved_raw()); - break; + + + while (true) { + auto status = library_->GetTrigAttributeString(task, attribute, nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + uInt32 size = status; + + std::string value; + if (size > 0) { + value.resize(size - 1); + } + status = library_->GetTrigAttributeString(task, attribute, (char*)value.data(), size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + std::string value_utf8; + convert_to_grpc(value, &value_utf8); + response->set_value(value_utf8); + nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); + return ::grpc::Status::OK; + } + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetTrigAttributeTimestamp(::grpc::ServerContext* context, const GetTrigAttributeTimestampRequest* request, GetTrigAttributeTimestampResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetTrigAttributeTimestampRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TriggerTimestampAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTrigAttributeTimestampRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TriggerTimestampAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTrigAttributeTimestampRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::ReadCtrFreqRequest::InterleavedEnumCase::INTERLEAVED_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for interleaved was not specified or out of range"); - break; + + CVIAbsoluteTime value {}; + auto status = library_->GetTrigAttributeTimestamp(task, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + convert_to_grpc(value, response->mutable_value()); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - response->mutable_read_array_frequency()->Resize(array_size_in_samps, 0); - float64* read_array_frequency = response->mutable_read_array_frequency()->mutable_data(); - response->mutable_read_array_duty_cycle()->Resize(array_size_in_samps, 0); - float64* read_array_duty_cycle = response->mutable_read_array_duty_cycle()->mutable_data(); - int32 samps_per_chan_read{}; - auto status = library_->ReadCtrFreq(task, num_samps_per_chan, timeout, interleaved, read_array_frequency, read_array_duty_cycle, array_size_in_samps, &samps_per_chan_read, reserved); - context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); - if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_samps_per_chan_read(samps_per_chan_read); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginReadCtrFreq(::grpc::ServerContext* context, const BeginReadCtrFreqRequest* request, BeginReadCtrFreqResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - int32 interleaved; - switch (request->interleaved_enum_case()) { - case nidaqmx_grpc::BeginReadCtrFreqRequest::InterleavedEnumCase::kInterleaved: { - interleaved = static_cast(request->interleaved()); - break; - } - case nidaqmx_grpc::BeginReadCtrFreqRequest::InterleavedEnumCase::kInterleavedRaw: { - interleaved = static_cast(request->interleaved_raw()); - break; - } - case nidaqmx_grpc::BeginReadCtrFreqRequest::InterleavedEnumCase::INTERLEAVED_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for interleaved was not specified or out of range"); - break; - } - } - - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->num_samps_per_chan = num_samps_per_chan; - data->timeout = timeout; - data->interleaved = interleaved; - data->array_size_in_samps = array_size_in_samps; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - data->response.mutable_read_array_frequency()->Reserve(request->array_size_in_samps()); - data->response.mutable_read_array_frequency()->Resize(request->array_size_in_samps(), 0); - data->response.mutable_read_array_duty_cycle()->Reserve(request->array_size_in_samps()); - data->response.mutable_read_array_duty_cycle()->Resize(request->array_size_in_samps(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCtrFreq", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetTrigAttributeUInt32(::grpc::ServerContext* context, const GetTrigAttributeUInt32Request* request, GetTrigAttributeUInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetTrigAttributeUInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TriggerUInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTrigAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TriggerUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetTrigAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ReadCtrFreqScalar(::grpc::ServerContext* context, const ReadCtrFreqScalarRequest* request, ReadCtrFreqScalarResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - float64 timeout = request->timeout(); - auto reserved = nullptr; - float64 frequency{}; - float64 duty_cycle{}; - auto status = library_->ReadCtrFreqScalar(task, timeout, &frequency, &duty_cycle, reserved); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_frequency(frequency); - response->set_duty_cycle(duty_cycle); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + uInt32 value {}; + auto status = library_->GetTrigAttributeUInt32(task, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetWatchdogAttributeBool(::grpc::ServerContext* context, const GetWatchdogAttributeBoolRequest* request, GetWatchdogAttributeBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto lines_mbcs = convert_from_grpc(request->lines()); + auto lines = lines_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetWatchdogAttributeBoolRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::WatchdogBoolAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetWatchdogAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::WatchdogBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetWatchdogAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginReadCtrFreqScalar(::grpc::ServerContext* context, const BeginReadCtrFreqScalarRequest* request, BeginReadCtrFreqScalarResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - float64 timeout = request->timeout(); - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->timeout = timeout; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCtrFreqScalar", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + bool32 value {}; + auto status = library_->GetWatchdogAttributeBool(task, lines, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetWatchdogAttributeDouble(::grpc::ServerContext* context, const GetWatchdogAttributeDoubleRequest* request, GetWatchdogAttributeDoubleResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto lines_mbcs = convert_from_grpc(request->lines()); + auto lines = lines_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetWatchdogAttributeDoubleRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::WatchdogDoubleAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetWatchdogAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::WatchdogDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetWatchdogAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ReadCtrTicks(::grpc::ServerContext* context, const ReadCtrTicksRequest* request, ReadCtrTicksResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - int32 interleaved; - switch (request->interleaved_enum_case()) { - case nidaqmx_grpc::ReadCtrTicksRequest::InterleavedEnumCase::kInterleaved: { - interleaved = static_cast(request->interleaved()); - break; + float64 value {}; + auto status = library_->GetWatchdogAttributeDouble(task, lines, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - case nidaqmx_grpc::ReadCtrTicksRequest::InterleavedEnumCase::kInterleavedRaw: { - interleaved = static_cast(request->interleaved_raw()); - break; + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetWatchdogAttributeInt32(::grpc::ServerContext* context, const GetWatchdogAttributeInt32Request* request, GetWatchdogAttributeInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto lines_mbcs = convert_from_grpc(request->lines()); + auto lines = lines_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetWatchdogAttributeInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::WatchdogInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetWatchdogAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::WatchdogInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetWatchdogAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::ReadCtrTicksRequest::InterleavedEnumCase::INTERLEAVED_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for interleaved was not specified or out of range"); - break; + + int32 value {}; + auto status = library_->GetWatchdogAttributeInt32(task, lines, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + auto checked_convert_value = [](auto raw_value) { + bool raw_value_is_valid = nidaqmx_grpc::WatchdogInt32AttributeValues_IsValid(raw_value); + auto valid_enum_value = raw_value_is_valid ? raw_value : 0; + return static_cast(valid_enum_value); + }; + response->set_value(checked_convert_value(value)); + response->set_value_raw(value); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetWatchdogAttributeString(::grpc::ServerContext* context, const GetWatchdogAttributeStringRequest* request, GetWatchdogAttributeStringResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto lines_mbcs = convert_from_grpc(request->lines()); + auto lines = lines_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetWatchdogAttributeStringRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::WatchdogStringAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetWatchdogAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::WatchdogStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetWatchdogAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - response->mutable_read_array_high_ticks()->Resize(array_size_in_samps, 0); - uInt32* read_array_high_ticks = reinterpret_cast(response->mutable_read_array_high_ticks()->mutable_data()); - response->mutable_read_array_low_ticks()->Resize(array_size_in_samps, 0); - uInt32* read_array_low_ticks = reinterpret_cast(response->mutable_read_array_low_ticks()->mutable_data()); - int32 samps_per_chan_read{}; - auto status = library_->ReadCtrTicks(task, num_samps_per_chan, timeout, interleaved, read_array_high_ticks, read_array_low_ticks, array_size_in_samps, &samps_per_chan_read, reserved); - context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); - if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_samps_per_chan_read(samps_per_chan_read); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginReadCtrTicks(::grpc::ServerContext* context, const BeginReadCtrTicksRequest* request, BeginReadCtrTicksResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - int32 interleaved; - switch (request->interleaved_enum_case()) { - case nidaqmx_grpc::BeginReadCtrTicksRequest::InterleavedEnumCase::kInterleaved: { - interleaved = static_cast(request->interleaved()); - break; - } - case nidaqmx_grpc::BeginReadCtrTicksRequest::InterleavedEnumCase::kInterleavedRaw: { - interleaved = static_cast(request->interleaved_raw()); - break; - } - case nidaqmx_grpc::BeginReadCtrTicksRequest::InterleavedEnumCase::INTERLEAVED_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for interleaved was not specified or out of range"); - break; - } - } - - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->num_samps_per_chan = num_samps_per_chan; - data->timeout = timeout; - data->interleaved = interleaved; - data->array_size_in_samps = array_size_in_samps; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - data->response.mutable_read_array_high_ticks()->Reserve(request->array_size_in_samps()); - data->response.mutable_read_array_high_ticks()->Resize(request->array_size_in_samps(), 0); - data->response.mutable_read_array_low_ticks()->Reserve(request->array_size_in_samps()); - data->response.mutable_read_array_low_ticks()->Resize(request->array_size_in_samps(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCtrTicks", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + while (true) { + auto status = library_->GetWatchdogAttributeString(task, lines, attribute, nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + uInt32 size = status; -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ReadCtrTicksScalar(::grpc::ServerContext* context, const ReadCtrTicksScalarRequest* request, ReadCtrTicksScalarResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - float64 timeout = request->timeout(); - auto reserved = nullptr; - uInt32 high_ticks{}; - uInt32 low_ticks{}; - auto status = library_->ReadCtrTicksScalar(task, timeout, &high_ticks, &low_ticks, reserved); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_high_ticks(high_ticks); - response->set_low_ticks(low_ticks); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + std::string value; + if (size > 0) { + value.resize(size - 1); + } + status = library_->GetWatchdogAttributeString(task, lines, attribute, (char*)value.data(), size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + std::string value_utf8; + convert_to_grpc(value, &value_utf8); + response->set_value(value_utf8); + nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); + return ::grpc::Status::OK; + } + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetWriteAttributeBool(::grpc::ServerContext* context, const GetWriteAttributeBoolRequest* request, GetWriteAttributeBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetWriteAttributeBoolRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::WriteBoolAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetWriteAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::WriteBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetWriteAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginReadCtrTicksScalar(::grpc::ServerContext* context, const BeginReadCtrTicksScalarRequest* request, BeginReadCtrTicksScalarResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - float64 timeout = request->timeout(); - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->timeout = timeout; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCtrTicksScalar", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + bool32 value {}; + auto status = library_->GetWriteAttributeBool(task, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ReadCtrTime(::grpc::ServerContext* context, const ReadCtrTimeRequest* request, ReadCtrTimeResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - int32 interleaved; - switch (request->interleaved_enum_case()) { - case nidaqmx_grpc::ReadCtrTimeRequest::InterleavedEnumCase::kInterleaved: { - interleaved = static_cast(request->interleaved()); - break; - } - case nidaqmx_grpc::ReadCtrTimeRequest::InterleavedEnumCase::kInterleavedRaw: { - interleaved = static_cast(request->interleaved_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetWriteAttributeDouble(::grpc::ServerContext* context, const GetWriteAttributeDoubleRequest* request, GetWriteAttributeDoubleResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetWriteAttributeDoubleRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::WriteDoubleAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetWriteAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::WriteDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetWriteAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::ReadCtrTimeRequest::InterleavedEnumCase::INTERLEAVED_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for interleaved was not specified or out of range"); - break; + + float64 value {}; + auto status = library_->GetWriteAttributeDouble(task, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - response->mutable_read_array_high_time()->Resize(array_size_in_samps, 0); - float64* read_array_high_time = response->mutable_read_array_high_time()->mutable_data(); - response->mutable_read_array_low_time()->Resize(array_size_in_samps, 0); - float64* read_array_low_time = response->mutable_read_array_low_time()->mutable_data(); - int32 samps_per_chan_read{}; - auto status = library_->ReadCtrTime(task, num_samps_per_chan, timeout, interleaved, read_array_high_time, read_array_low_time, array_size_in_samps, &samps_per_chan_read, reserved); - context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); - if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_samps_per_chan_read(samps_per_chan_read); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginReadCtrTime(::grpc::ServerContext* context, const BeginReadCtrTimeRequest* request, BeginReadCtrTimeResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - int32 interleaved; - switch (request->interleaved_enum_case()) { - case nidaqmx_grpc::BeginReadCtrTimeRequest::InterleavedEnumCase::kInterleaved: { - interleaved = static_cast(request->interleaved()); - break; - } - case nidaqmx_grpc::BeginReadCtrTimeRequest::InterleavedEnumCase::kInterleavedRaw: { - interleaved = static_cast(request->interleaved_raw()); - break; - } - case nidaqmx_grpc::BeginReadCtrTimeRequest::InterleavedEnumCase::INTERLEAVED_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for interleaved was not specified or out of range"); - break; - } - } - - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->num_samps_per_chan = num_samps_per_chan; - data->timeout = timeout; - data->interleaved = interleaved; - data->array_size_in_samps = array_size_in_samps; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - data->response.mutable_read_array_high_time()->Reserve(request->array_size_in_samps()); - data->response.mutable_read_array_high_time()->Resize(request->array_size_in_samps(), 0); - data->response.mutable_read_array_low_time()->Reserve(request->array_size_in_samps()); - data->response.mutable_read_array_low_time()->Resize(request->array_size_in_samps(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCtrTime", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ReadCtrTimeScalar(::grpc::ServerContext* context, const ReadCtrTimeScalarRequest* request, ReadCtrTimeScalarResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - float64 timeout = request->timeout(); - auto reserved = nullptr; - float64 high_time{}; - float64 low_time{}; - auto status = library_->ReadCtrTimeScalar(task, timeout, &high_time, &low_time, reserved); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_high_time(high_time); - response->set_low_time(low_time); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetWriteAttributeInt32(::grpc::ServerContext* context, const GetWriteAttributeInt32Request* request, GetWriteAttributeInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetWriteAttributeInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::WriteInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetWriteAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::WriteInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetWriteAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginReadCtrTimeScalar(::grpc::ServerContext* context, const BeginReadCtrTimeScalarRequest* request, BeginReadCtrTimeScalarResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - float64 timeout = request->timeout(); - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->timeout = timeout; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCtrTimeScalar", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + int32 value {}; + auto status = library_->GetWriteAttributeInt32(task, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + auto checked_convert_value = [](auto raw_value) { + bool raw_value_is_valid = nidaqmx_grpc::WriteInt32AttributeValues_IsValid(raw_value); + auto valid_enum_value = raw_value_is_valid ? raw_value : 0; + return static_cast(valid_enum_value); + }; + response->set_value(checked_convert_value(value)); + response->set_value_raw(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ReadDigitalLines(::grpc::ServerContext* context, const ReadDigitalLinesRequest* request, ReadDigitalLinesResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - int32 fill_mode; - switch (request->fill_mode_enum_case()) { - case nidaqmx_grpc::ReadDigitalLinesRequest::FillModeEnumCase::kFillMode: { - fill_mode = static_cast(request->fill_mode()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetWriteAttributeString(::grpc::ServerContext* context, const GetWriteAttributeStringRequest* request, GetWriteAttributeStringResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetWriteAttributeStringRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::WriteStringAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetWriteAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::WriteStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetWriteAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::ReadDigitalLinesRequest::FillModeEnumCase::kFillModeRaw: { - fill_mode = static_cast(request->fill_mode_raw()); - break; + + + while (true) { + auto status = library_->GetWriteAttributeString(task, attribute, nullptr, 0); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + uInt32 size = status; + + std::string value; + if (size > 0) { + value.resize(size - 1); + } + status = library_->GetWriteAttributeString(task, attribute, (char*)value.data(), size); + if (status == kErrorReadBufferTooSmall || status == kWarningCAPIStringTruncatedToFitBuffer || status > static_cast(size)) { + // buffer is now too small, try again + continue; + } + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + std::string value_utf8; + convert_to_grpc(value, &value_utf8); + response->set_value(value_utf8); + nidevice_grpc::converters::trim_trailing_nulls(*(response->mutable_value())); + return ::grpc::Status::OK; + } + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetWriteAttributeUInt32(::grpc::ServerContext* context, const GetWriteAttributeUInt32Request* request, GetWriteAttributeUInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetWriteAttributeUInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::WriteUInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetWriteAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::WriteUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetWriteAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::ReadDigitalLinesRequest::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); - break; + + uInt32 value {}; + auto status = library_->GetWriteAttributeUInt32(task, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - - uInt32 array_size_in_bytes = request->array_size_in_bytes(); - auto reserved = nullptr; - std::string read_array(array_size_in_bytes, '\0'); - int32 samps_per_chan_read{}; - int32 num_bytes_per_samp{}; - auto status = library_->ReadDigitalLines(task, num_samps_per_chan, timeout, fill_mode, (uInt8*)read_array.data(), array_size_in_bytes, &samps_per_chan_read, &num_bytes_per_samp, reserved); - context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); - if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_read_array(read_array); - response->set_samps_per_chan_read(samps_per_chan_read); - response->set_num_bytes_per_samp(num_bytes_per_samp); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginReadDigitalLines(::grpc::ServerContext* context, const BeginReadDigitalLinesRequest* request, BeginReadDigitalLinesResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - int32 fill_mode; - switch (request->fill_mode_enum_case()) { - case nidaqmx_grpc::BeginReadDigitalLinesRequest::FillModeEnumCase::kFillMode: { - fill_mode = static_cast(request->fill_mode()); - break; - } - case nidaqmx_grpc::BeginReadDigitalLinesRequest::FillModeEnumCase::kFillModeRaw: { - fill_mode = static_cast(request->fill_mode_raw()); - break; - } - case nidaqmx_grpc::BeginReadDigitalLinesRequest::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); - break; - } - } - - uInt32 array_size_in_bytes = request->array_size_in_bytes(); - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->num_samps_per_chan = num_samps_per_chan; - data->timeout = timeout; - data->fill_mode = fill_mode; - data->array_size_in_bytes = array_size_in_bytes; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - data->response.mutable_read_array()->reserve(request->array_size_in_bytes()); - data->response.mutable_read_array()->resize(request->array_size_in_bytes(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadDigitalLines", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::GetWriteAttributeUInt64(::grpc::ServerContext* context, const GetWriteAttributeUInt64Request* request, GetWriteAttributeUInt64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::GetWriteAttributeUInt64Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::WriteUInt64Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::GetWriteAttributeUInt64Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::WriteUInt64Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::GetWriteAttributeUInt64Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ReadDigitalScalarU32(::grpc::ServerContext* context, const ReadDigitalScalarU32Request* request, ReadDigitalScalarU32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - float64 timeout = request->timeout(); - auto reserved = nullptr; - uInt32 value{}; - auto status = library_->ReadDigitalScalarU32(task, timeout, &value, reserved); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_value(value); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + uInt64 value {}; + auto status = library_->GetWriteAttributeUInt64(task, attribute, &value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginReadDigitalScalarU32(::grpc::ServerContext* context, const BeginReadDigitalScalarU32Request* request, BeginReadDigitalScalarU32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - float64 timeout = request->timeout(); - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->timeout = timeout; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadDigitalScalarU32", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::IsTaskDone(::grpc::ServerContext* context, const IsTaskDoneRequest* request, IsTaskDoneResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + bool32 is_task_done {}; + auto status = library_->IsTaskDone(task, &is_task_done); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + response->set_is_task_done(is_task_done); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ReadDigitalU16(::grpc::ServerContext* context, const ReadDigitalU16Request* request, ReadDigitalU16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::LoadTask(::grpc::ServerContext* context, const LoadTaskRequest* request, LoadTaskResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto session_name_mbcs = convert_from_grpc(request->session_name()); + auto session_name = session_name_mbcs.c_str(); + auto initialization_behavior = request->initialization_behavior(); + + bool new_session_initialized {}; + auto init_lambda = [&] () { + TaskHandle task; + auto status = library_->LoadTask(session_name, &task); + return std::make_tuple(status, task); + }; + std::string grpc_device_session_name = request->session_name(); + // Capture the library shared_ptr by value. Do not capture `this` or any references. + LibrarySharedPtr library = library_; + auto cleanup_lambda = [library] (TaskHandle id) { library->ClearTask(id); }; + int status = session_repository_->add_session(grpc_device_session_name, init_lambda, cleanup_lambda, initialization_behavior, &new_session_initialized); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + response->mutable_task()->set_name(grpc_device_session_name); + response->set_new_session_initialized(new_session_initialized); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - int32 fill_mode; - switch (request->fill_mode_enum_case()) { - case nidaqmx_grpc::ReadDigitalU16Request::FillModeEnumCase::kFillMode: { - fill_mode = static_cast(request->fill_mode()); - break; + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::PerformBridgeOffsetNullingCalEx(::grpc::ServerContext* context, const PerformBridgeOffsetNullingCalExRequest* request, PerformBridgeOffsetNullingCalExResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto channel_mbcs = convert_from_grpc(request->channel()); + auto channel = channel_mbcs.c_str(); + bool32 skip_unsupported_channels = request->skip_unsupported_channels(); + auto status = library_->PerformBridgeOffsetNullingCalEx(task, channel, skip_unsupported_channels); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - case nidaqmx_grpc::ReadDigitalU16Request::FillModeEnumCase::kFillModeRaw: { - fill_mode = static_cast(request->fill_mode_raw()); - break; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::PerformBridgeShuntCalEx(::grpc::ServerContext* context, const PerformBridgeShuntCalExRequest* request, PerformBridgeShuntCalExResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto channel_mbcs = convert_from_grpc(request->channel()); + auto channel = channel_mbcs.c_str(); + float64 shunt_resistor_value = request->shunt_resistor_value(); + int32 shunt_resistor_location; + switch (request->shunt_resistor_location_enum_case()) { + case nidaqmx_grpc::PerformBridgeShuntCalExRequest::ShuntResistorLocationEnumCase::kShuntResistorLocation: { + shunt_resistor_location = static_cast(request->shunt_resistor_location()); + break; + } + case nidaqmx_grpc::PerformBridgeShuntCalExRequest::ShuntResistorLocationEnumCase::kShuntResistorLocationRaw: { + shunt_resistor_location = static_cast(request->shunt_resistor_location_raw()); + break; + } + case nidaqmx_grpc::PerformBridgeShuntCalExRequest::ShuntResistorLocationEnumCase::SHUNT_RESISTOR_LOCATION_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for shunt_resistor_location was not specified or out of range"); + break; + } } - case nidaqmx_grpc::ReadDigitalU16Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); - break; + + int32 shunt_resistor_select; + switch (request->shunt_resistor_select_enum_case()) { + case nidaqmx_grpc::PerformBridgeShuntCalExRequest::ShuntResistorSelectEnumCase::kShuntResistorSelect: { + shunt_resistor_select = static_cast(request->shunt_resistor_select()); + break; + } + case nidaqmx_grpc::PerformBridgeShuntCalExRequest::ShuntResistorSelectEnumCase::kShuntResistorSelectRaw: { + shunt_resistor_select = static_cast(request->shunt_resistor_select_raw()); + break; + } + case nidaqmx_grpc::PerformBridgeShuntCalExRequest::ShuntResistorSelectEnumCase::SHUNT_RESISTOR_SELECT_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for shunt_resistor_select was not specified or out of range"); + break; + } } - } - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - std::vector read_array(array_size_in_samps); - int32 samps_per_chan_read{}; - auto status = library_->ReadDigitalU16(task, num_samps_per_chan, timeout, fill_mode, read_array.data(), array_size_in_samps, &samps_per_chan_read, reserved); - context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); - if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->mutable_read_array()->Clear(); - response->mutable_read_array()->Reserve(array_size_in_samps); - std::transform( - read_array.begin(), - read_array.begin() + array_size_in_samps, - google::protobuf::RepeatedFieldBackInserter(response->mutable_read_array()), - [&](auto x) { - return x; - }); - response->set_samps_per_chan_read(samps_per_chan_read); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + int32 shunt_resistor_source; + switch (request->shunt_resistor_source_enum_case()) { + case nidaqmx_grpc::PerformBridgeShuntCalExRequest::ShuntResistorSourceEnumCase::kShuntResistorSource: { + shunt_resistor_source = static_cast(request->shunt_resistor_source()); + break; + } + case nidaqmx_grpc::PerformBridgeShuntCalExRequest::ShuntResistorSourceEnumCase::kShuntResistorSourceRaw: { + shunt_resistor_source = static_cast(request->shunt_resistor_source_raw()); + break; + } + case nidaqmx_grpc::PerformBridgeShuntCalExRequest::ShuntResistorSourceEnumCase::SHUNT_RESISTOR_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for shunt_resistor_source was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginReadDigitalU16(::grpc::ServerContext* context, const BeginReadDigitalU16Request* request, BeginReadDigitalU16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - int32 fill_mode; - switch (request->fill_mode_enum_case()) { - case nidaqmx_grpc::BeginReadDigitalU16Request::FillModeEnumCase::kFillMode: { - fill_mode = static_cast(request->fill_mode()); - break; - } - case nidaqmx_grpc::BeginReadDigitalU16Request::FillModeEnumCase::kFillModeRaw: { - fill_mode = static_cast(request->fill_mode_raw()); - break; - } - case nidaqmx_grpc::BeginReadDigitalU16Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); - break; - } - } - - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->num_samps_per_chan = num_samps_per_chan; - data->timeout = timeout; - data->fill_mode = fill_mode; - data->array_size_in_samps = array_size_in_samps; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - data->response.mutable_read_array()->Reserve(request->array_size_in_samps()); - data->response.mutable_read_array()->Resize(request->array_size_in_samps(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadDigitalU16", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + float64 bridge_resistance = request->bridge_resistance(); + bool32 skip_unsupported_channels = request->skip_unsupported_channels(); + auto status = library_->PerformBridgeShuntCalEx(task, channel, shunt_resistor_value, shunt_resistor_location, shunt_resistor_select, shunt_resistor_source, bridge_resistance, skip_unsupported_channels); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::PerformStrainShuntCalEx(::grpc::ServerContext* context, const PerformStrainShuntCalExRequest* request, PerformStrainShuntCalExResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto channel_mbcs = convert_from_grpc(request->channel()); + auto channel = channel_mbcs.c_str(); + float64 shunt_resistor_value = request->shunt_resistor_value(); + int32 shunt_resistor_location; + switch (request->shunt_resistor_location_enum_case()) { + case nidaqmx_grpc::PerformStrainShuntCalExRequest::ShuntResistorLocationEnumCase::kShuntResistorLocation: { + shunt_resistor_location = static_cast(request->shunt_resistor_location()); + break; + } + case nidaqmx_grpc::PerformStrainShuntCalExRequest::ShuntResistorLocationEnumCase::kShuntResistorLocationRaw: { + shunt_resistor_location = static_cast(request->shunt_resistor_location_raw()); + break; + } + case nidaqmx_grpc::PerformStrainShuntCalExRequest::ShuntResistorLocationEnumCase::SHUNT_RESISTOR_LOCATION_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for shunt_resistor_location was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ReadDigitalU32(::grpc::ServerContext* context, const ReadDigitalU32Request* request, ReadDigitalU32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - int32 fill_mode; - switch (request->fill_mode_enum_case()) { - case nidaqmx_grpc::ReadDigitalU32Request::FillModeEnumCase::kFillMode: { - fill_mode = static_cast(request->fill_mode()); - break; + int32 shunt_resistor_select; + switch (request->shunt_resistor_select_enum_case()) { + case nidaqmx_grpc::PerformStrainShuntCalExRequest::ShuntResistorSelectEnumCase::kShuntResistorSelect: { + shunt_resistor_select = static_cast(request->shunt_resistor_select()); + break; + } + case nidaqmx_grpc::PerformStrainShuntCalExRequest::ShuntResistorSelectEnumCase::kShuntResistorSelectRaw: { + shunt_resistor_select = static_cast(request->shunt_resistor_select_raw()); + break; + } + case nidaqmx_grpc::PerformStrainShuntCalExRequest::ShuntResistorSelectEnumCase::SHUNT_RESISTOR_SELECT_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for shunt_resistor_select was not specified or out of range"); + break; + } } - case nidaqmx_grpc::ReadDigitalU32Request::FillModeEnumCase::kFillModeRaw: { - fill_mode = static_cast(request->fill_mode_raw()); - break; + + int32 shunt_resistor_source; + switch (request->shunt_resistor_source_enum_case()) { + case nidaqmx_grpc::PerformStrainShuntCalExRequest::ShuntResistorSourceEnumCase::kShuntResistorSource: { + shunt_resistor_source = static_cast(request->shunt_resistor_source()); + break; + } + case nidaqmx_grpc::PerformStrainShuntCalExRequest::ShuntResistorSourceEnumCase::kShuntResistorSourceRaw: { + shunt_resistor_source = static_cast(request->shunt_resistor_source_raw()); + break; + } + case nidaqmx_grpc::PerformStrainShuntCalExRequest::ShuntResistorSourceEnumCase::SHUNT_RESISTOR_SOURCE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for shunt_resistor_source was not specified or out of range"); + break; + } } - case nidaqmx_grpc::ReadDigitalU32Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); - break; + + bool32 skip_unsupported_channels = request->skip_unsupported_channels(); + auto status = library_->PerformStrainShuntCalEx(task, channel, shunt_resistor_value, shunt_resistor_location, shunt_resistor_select, shunt_resistor_source, skip_unsupported_channels); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - response->mutable_read_array()->Resize(array_size_in_samps, 0); - uInt32* read_array = reinterpret_cast(response->mutable_read_array()->mutable_data()); - int32 samps_per_chan_read{}; - auto status = library_->ReadDigitalU32(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); - context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); - if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_samps_per_chan_read(samps_per_chan_read); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginReadDigitalU32(::grpc::ServerContext* context, const BeginReadDigitalU32Request* request, BeginReadDigitalU32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - int32 fill_mode; - switch (request->fill_mode_enum_case()) { - case nidaqmx_grpc::BeginReadDigitalU32Request::FillModeEnumCase::kFillMode: { - fill_mode = static_cast(request->fill_mode()); - break; - } - case nidaqmx_grpc::BeginReadDigitalU32Request::FillModeEnumCase::kFillModeRaw: { - fill_mode = static_cast(request->fill_mode_raw()); - break; - } - case nidaqmx_grpc::BeginReadDigitalU32Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); - break; - } - } - - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->num_samps_per_chan = num_samps_per_chan; - data->timeout = timeout; - data->fill_mode = fill_mode; - data->array_size_in_samps = array_size_in_samps; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - data->response.mutable_read_array()->Reserve(request->array_size_in_samps()); - data->response.mutable_read_array()->Resize(request->array_size_in_samps(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadDigitalU32", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::PerformThrmcplLeadOffsetNullingCal(::grpc::ServerContext* context, const PerformThrmcplLeadOffsetNullingCalRequest* request, PerformThrmcplLeadOffsetNullingCalResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto channel_mbcs = convert_from_grpc(request->channel()); + auto channel = channel_mbcs.c_str(); + bool32 skip_unsupported_channels = request->skip_unsupported_channels(); + auto status = library_->PerformThrmcplLeadOffsetNullingCal(task, channel, skip_unsupported_channels); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ReadDigitalU8(::grpc::ServerContext* context, const ReadDigitalU8Request* request, ReadDigitalU8Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - int32 fill_mode; - switch (request->fill_mode_enum_case()) { - case nidaqmx_grpc::ReadDigitalU8Request::FillModeEnumCase::kFillMode: { - fill_mode = static_cast(request->fill_mode()); - break; - } - case nidaqmx_grpc::ReadDigitalU8Request::FillModeEnumCase::kFillModeRaw: { - fill_mode = static_cast(request->fill_mode_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ReadAnalogF64(::grpc::ServerContext* context, const ReadAnalogF64Request* request, ReadAnalogF64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 fill_mode; + switch (request->fill_mode_enum_case()) { + case nidaqmx_grpc::ReadAnalogF64Request::FillModeEnumCase::kFillMode: { + fill_mode = static_cast(request->fill_mode()); + break; + } + case nidaqmx_grpc::ReadAnalogF64Request::FillModeEnumCase::kFillModeRaw: { + fill_mode = static_cast(request->fill_mode_raw()); + break; + } + case nidaqmx_grpc::ReadAnalogF64Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); + break; + } } - case nidaqmx_grpc::ReadDigitalU8Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); - break; + + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + response->mutable_read_array()->Resize(array_size_in_samps, 0); + float64* read_array = response->mutable_read_array()->mutable_data(); + int32 samps_per_chan_read {}; + auto status = library_->ReadAnalogF64(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); + context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); + if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + response->set_samps_per_chan_read(samps_per_chan_read); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - std::string read_array(array_size_in_samps, '\0'); - int32 samps_per_chan_read{}; - auto status = library_->ReadDigitalU8(task, num_samps_per_chan, timeout, fill_mode, (uInt8*)read_array.data(), array_size_in_samps, &samps_per_chan_read, reserved); - context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); - if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_read_array(read_array); - response->set_samps_per_chan_read(samps_per_chan_read); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginReadDigitalU8(::grpc::ServerContext* context, const BeginReadDigitalU8Request* request, BeginReadDigitalU8Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - int32 fill_mode; - switch (request->fill_mode_enum_case()) { - case nidaqmx_grpc::BeginReadDigitalU8Request::FillModeEnumCase::kFillMode: { - fill_mode = static_cast(request->fill_mode()); - break; - } - case nidaqmx_grpc::BeginReadDigitalU8Request::FillModeEnumCase::kFillModeRaw: { - fill_mode = static_cast(request->fill_mode_raw()); - break; - } - case nidaqmx_grpc::BeginReadDigitalU8Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); - break; - } - } - - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->num_samps_per_chan = num_samps_per_chan; - data->timeout = timeout; - data->fill_mode = fill_mode; - data->array_size_in_samps = array_size_in_samps; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - data->response.mutable_read_array()->reserve(request->array_size_in_samps()); - data->response.mutable_read_array()->resize(request->array_size_in_samps(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadDigitalU8", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginReadAnalogF64(::grpc::ServerContext* context, const BeginReadAnalogF64Request* request, BeginReadAnalogF64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 fill_mode; + switch (request->fill_mode_enum_case()) { + case nidaqmx_grpc::BeginReadAnalogF64Request::FillModeEnumCase::kFillMode: { + fill_mode = static_cast(request->fill_mode()); + break; + } + case nidaqmx_grpc::BeginReadAnalogF64Request::FillModeEnumCase::kFillModeRaw: { + fill_mode = static_cast(request->fill_mode_raw()); + break; + } + case nidaqmx_grpc::BeginReadAnalogF64Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); + break; + } + } + + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->timeout = timeout; + data->fill_mode = fill_mode; + data->array_size_in_samps = array_size_in_samps; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + data->response.mutable_read_array()->Reserve(request->array_size_in_samps()); + data->response.mutable_read_array()->Resize(request->array_size_in_samps(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadAnalogF64", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ReadAnalogScalarF64(::grpc::ServerContext* context, const ReadAnalogScalarF64Request* request, ReadAnalogScalarF64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + float64 timeout = request->timeout(); + auto reserved = nullptr; + float64 value {}; + auto status = library_->ReadAnalogScalarF64(task, timeout, &value, reserved); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ReadPowerBinaryI16(::grpc::ServerContext* context, const ReadPowerBinaryI16Request* request, ReadPowerBinaryI16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginReadAnalogScalarF64(::grpc::ServerContext* context, const BeginReadAnalogScalarF64Request* request, BeginReadAnalogScalarF64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + float64 timeout = request->timeout(); + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->timeout = timeout; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadAnalogScalarF64", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - int32 fill_mode; - switch (request->fill_mode_enum_case()) { - case nidaqmx_grpc::ReadPowerBinaryI16Request::FillModeEnumCase::kFillMode: { - fill_mode = static_cast(request->fill_mode()); - break; - } - case nidaqmx_grpc::ReadPowerBinaryI16Request::FillModeEnumCase::kFillModeRaw: { - fill_mode = static_cast(request->fill_mode_raw()); - break; + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ReadBinaryI16(::grpc::ServerContext* context, const ReadBinaryI16Request* request, ReadBinaryI16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 fill_mode; + switch (request->fill_mode_enum_case()) { + case nidaqmx_grpc::ReadBinaryI16Request::FillModeEnumCase::kFillMode: { + fill_mode = static_cast(request->fill_mode()); + break; + } + case nidaqmx_grpc::ReadBinaryI16Request::FillModeEnumCase::kFillModeRaw: { + fill_mode = static_cast(request->fill_mode_raw()); + break; + } + case nidaqmx_grpc::ReadBinaryI16Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); + break; + } } - case nidaqmx_grpc::ReadPowerBinaryI16Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); - break; + + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + std::vector read_array(array_size_in_samps); + int32 samps_per_chan_read {}; + auto status = library_->ReadBinaryI16(task, num_samps_per_chan, timeout, fill_mode, read_array.data(), array_size_in_samps, &samps_per_chan_read, reserved); + context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); + if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + response->mutable_read_array()->Clear(); + response->mutable_read_array()->Reserve(array_size_in_samps); + std::transform( + read_array.begin(), + read_array.begin() + array_size_in_samps, + google::protobuf::RepeatedFieldBackInserter(response->mutable_read_array()), + [&](auto x) { + return x; + }); + response->set_samps_per_chan_read(samps_per_chan_read); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - std::vector read_array_voltage(array_size_in_samps); - std::vector read_array_current(array_size_in_samps); - int32 samps_per_chan_read{}; - auto status = library_->ReadPowerBinaryI16(task, num_samps_per_chan, timeout, fill_mode, read_array_voltage.data(), read_array_current.data(), array_size_in_samps, &samps_per_chan_read, reserved); - context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); - if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->mutable_read_array_voltage()->Clear(); - response->mutable_read_array_voltage()->Reserve(array_size_in_samps); - std::transform( - read_array_voltage.begin(), - read_array_voltage.begin() + array_size_in_samps, - google::protobuf::RepeatedFieldBackInserter(response->mutable_read_array_voltage()), - [&](auto x) { - return x; - }); - response->mutable_read_array_current()->Clear(); - response->mutable_read_array_current()->Reserve(array_size_in_samps); - std::transform( - read_array_current.begin(), - read_array_current.begin() + array_size_in_samps, - google::protobuf::RepeatedFieldBackInserter(response->mutable_read_array_current()), - [&](auto x) { - return x; - }); - response->set_samps_per_chan_read(samps_per_chan_read); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginReadPowerBinaryI16(::grpc::ServerContext* context, const BeginReadPowerBinaryI16Request* request, BeginReadPowerBinaryI16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - int32 fill_mode; - switch (request->fill_mode_enum_case()) { - case nidaqmx_grpc::BeginReadPowerBinaryI16Request::FillModeEnumCase::kFillMode: { - fill_mode = static_cast(request->fill_mode()); - break; - } - case nidaqmx_grpc::BeginReadPowerBinaryI16Request::FillModeEnumCase::kFillModeRaw: { - fill_mode = static_cast(request->fill_mode_raw()); - break; - } - case nidaqmx_grpc::BeginReadPowerBinaryI16Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); - break; - } - } - - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->num_samps_per_chan = num_samps_per_chan; - data->timeout = timeout; - data->fill_mode = fill_mode; - data->array_size_in_samps = array_size_in_samps; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - data->response.mutable_read_array_voltage()->Reserve(request->array_size_in_samps()); - data->response.mutable_read_array_voltage()->Resize(request->array_size_in_samps(), 0); - data->response.mutable_read_array_current()->Reserve(request->array_size_in_samps()); - data->response.mutable_read_array_current()->Resize(request->array_size_in_samps(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadPowerBinaryI16", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginReadBinaryI16(::grpc::ServerContext* context, const BeginReadBinaryI16Request* request, BeginReadBinaryI16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 fill_mode; + switch (request->fill_mode_enum_case()) { + case nidaqmx_grpc::BeginReadBinaryI16Request::FillModeEnumCase::kFillMode: { + fill_mode = static_cast(request->fill_mode()); + break; + } + case nidaqmx_grpc::BeginReadBinaryI16Request::FillModeEnumCase::kFillModeRaw: { + fill_mode = static_cast(request->fill_mode_raw()); + break; + } + case nidaqmx_grpc::BeginReadBinaryI16Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ReadPowerF64(::grpc::ServerContext* context, const ReadPowerF64Request* request, ReadPowerF64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->timeout = timeout; + data->fill_mode = fill_mode; + data->array_size_in_samps = array_size_in_samps; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + data->response.mutable_read_array()->Reserve(request->array_size_in_samps()); + data->response.mutable_read_array()->Resize(request->array_size_in_samps(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadBinaryI16", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - int32 fill_mode; - switch (request->fill_mode_enum_case()) { - case nidaqmx_grpc::ReadPowerF64Request::FillModeEnumCase::kFillMode: { - fill_mode = static_cast(request->fill_mode()); - break; - } - case nidaqmx_grpc::ReadPowerF64Request::FillModeEnumCase::kFillModeRaw: { - fill_mode = static_cast(request->fill_mode_raw()); - break; + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ReadBinaryI32(::grpc::ServerContext* context, const ReadBinaryI32Request* request, ReadBinaryI32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 fill_mode; + switch (request->fill_mode_enum_case()) { + case nidaqmx_grpc::ReadBinaryI32Request::FillModeEnumCase::kFillMode: { + fill_mode = static_cast(request->fill_mode()); + break; + } + case nidaqmx_grpc::ReadBinaryI32Request::FillModeEnumCase::kFillModeRaw: { + fill_mode = static_cast(request->fill_mode_raw()); + break; + } + case nidaqmx_grpc::ReadBinaryI32Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); + break; + } } - case nidaqmx_grpc::ReadPowerF64Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); - break; + + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + response->mutable_read_array()->Resize(array_size_in_samps, 0); + int32* read_array = reinterpret_cast(response->mutable_read_array()->mutable_data()); + int32 samps_per_chan_read {}; + auto status = library_->ReadBinaryI32(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); + context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); + if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + response->set_samps_per_chan_read(samps_per_chan_read); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - response->mutable_read_array_voltage()->Resize(array_size_in_samps, 0); - float64* read_array_voltage = response->mutable_read_array_voltage()->mutable_data(); - response->mutable_read_array_current()->Resize(array_size_in_samps, 0); - float64* read_array_current = response->mutable_read_array_current()->mutable_data(); - int32 samps_per_chan_read{}; - auto status = library_->ReadPowerF64(task, num_samps_per_chan, timeout, fill_mode, read_array_voltage, read_array_current, array_size_in_samps, &samps_per_chan_read, reserved); - context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); - if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_samps_per_chan_read(samps_per_chan_read); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginReadPowerF64(::grpc::ServerContext* context, const BeginReadPowerF64Request* request, BeginReadPowerF64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - int32 fill_mode; - switch (request->fill_mode_enum_case()) { - case nidaqmx_grpc::BeginReadPowerF64Request::FillModeEnumCase::kFillMode: { - fill_mode = static_cast(request->fill_mode()); - break; - } - case nidaqmx_grpc::BeginReadPowerF64Request::FillModeEnumCase::kFillModeRaw: { - fill_mode = static_cast(request->fill_mode_raw()); - break; - } - case nidaqmx_grpc::BeginReadPowerF64Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); - break; - } - } - - uInt32 array_size_in_samps = request->array_size_in_samps(); - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->num_samps_per_chan = num_samps_per_chan; - data->timeout = timeout; - data->fill_mode = fill_mode; - data->array_size_in_samps = array_size_in_samps; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - data->response.mutable_read_array_voltage()->Reserve(request->array_size_in_samps()); - data->response.mutable_read_array_voltage()->Resize(request->array_size_in_samps(), 0); - data->response.mutable_read_array_current()->Reserve(request->array_size_in_samps()); - data->response.mutable_read_array_current()->Resize(request->array_size_in_samps(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadPowerF64", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginReadBinaryI32(::grpc::ServerContext* context, const BeginReadBinaryI32Request* request, BeginReadBinaryI32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 fill_mode; + switch (request->fill_mode_enum_case()) { + case nidaqmx_grpc::BeginReadBinaryI32Request::FillModeEnumCase::kFillMode: { + fill_mode = static_cast(request->fill_mode()); + break; + } + case nidaqmx_grpc::BeginReadBinaryI32Request::FillModeEnumCase::kFillModeRaw: { + fill_mode = static_cast(request->fill_mode_raw()); + break; + } + case nidaqmx_grpc::BeginReadBinaryI32Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); + break; + } + } + + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->timeout = timeout; + data->fill_mode = fill_mode; + data->array_size_in_samps = array_size_in_samps; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + data->response.mutable_read_array()->Reserve(request->array_size_in_samps()); + data->response.mutable_read_array()->Resize(request->array_size_in_samps(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadBinaryI32", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ReadPowerScalarF64(::grpc::ServerContext* context, const ReadPowerScalarF64Request* request, ReadPowerScalarF64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - float64 timeout = request->timeout(); - auto reserved = nullptr; - float64 voltage{}; - float64 current{}; - auto status = library_->ReadPowerScalarF64(task, timeout, &voltage, ¤t, reserved); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_voltage(voltage); - response->set_current(current); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginReadPowerScalarF64(::grpc::ServerContext* context, const BeginReadPowerScalarF64Request* request, BeginReadPowerScalarF64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - float64 timeout = request->timeout(); - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->timeout = timeout; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadPowerScalarF64", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ReadRaw(::grpc::ServerContext* context, const ReadRawRequest* request, ReadRawResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - uInt32 array_size_in_bytes = request->array_size_in_bytes(); - auto reserved = nullptr; - std::string read_array(array_size_in_bytes, '\0'); - int32 samps_read{}; - int32 num_bytes_per_samp{}; - auto status = library_->ReadRaw(task, num_samps_per_chan, timeout, (uInt8*)read_array.data(), array_size_in_bytes, &samps_read, &num_bytes_per_samp, reserved); - context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_read)); - if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_read_array(read_array); - response->set_samps_read(samps_read); - response->set_num_bytes_per_samp(num_bytes_per_samp); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginReadRaw(::grpc::ServerContext* context, const BeginReadRawRequest* request, BeginReadRawResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - float64 timeout = request->timeout(); - uInt32 array_size_in_bytes = request->array_size_in_bytes(); - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->num_samps_per_chan = num_samps_per_chan; - data->timeout = timeout; - data->array_size_in_bytes = array_size_in_bytes; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - data->response.mutable_read_array()->reserve(request->array_size_in_bytes()); - data->response.mutable_read_array()->resize(request->array_size_in_bytes(), 0); - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadRaw", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ReadBinaryU16(::grpc::ServerContext* context, const ReadBinaryU16Request* request, ReadBinaryU16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 fill_mode; + switch (request->fill_mode_enum_case()) { + case nidaqmx_grpc::ReadBinaryU16Request::FillModeEnumCase::kFillMode: { + fill_mode = static_cast(request->fill_mode()); + break; + } + case nidaqmx_grpc::ReadBinaryU16Request::FillModeEnumCase::kFillModeRaw: { + fill_mode = static_cast(request->fill_mode_raw()); + break; + } + case nidaqmx_grpc::ReadBinaryU16Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::ServerWriteReactor* -NiDAQmxService::RegisterDoneEvent(::grpc::CallbackServerContext* context, const RegisterDoneEventRequest* request) -{ - using CallbackRouter = nidevice_grpc::CallbackRouter; - class RegisterDoneEventReactor : public nidevice_grpc::ServerWriterReactor { - public: - RegisterDoneEventReactor(::grpc::CallbackServerContext* context, const RegisterDoneEventRequest* request, LibrarySharedPtr library, NiDAQmxService* service) - { - auto status = start(context, request, library, service); - if (!status.ok()) { - this->try_finish(std::move(status)); + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + std::vector read_array(array_size_in_samps); + int32 samps_per_chan_read {}; + auto status = library_->ReadBinaryU16(task, num_samps_per_chan, timeout, fill_mode, read_array.data(), array_size_in_samps, &samps_per_chan_read, reserved); + context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); + if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + response->mutable_read_array()->Clear(); + response->mutable_read_array()->Reserve(array_size_in_samps); + std::transform( + read_array.begin(), + read_array.begin() + array_size_in_samps, + google::protobuf::RepeatedFieldBackInserter(response->mutable_read_array()), + [&](auto x) { + return x; + }); + response->set_samps_per_chan_read(samps_per_chan_read); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } - ::grpc::Status start(::grpc::CallbackServerContext* context, const RegisterDoneEventRequest* request, LibrarySharedPtr library, NiDAQmxService* service) - { - try { - auto handler = CallbackRouter::register_handler( - [this](TaskHandle task, int32 status) { - RegisterDoneEventResponse callback_response; - auto response = &callback_response; - response->set_status(status); - queue_write(callback_response); - return 0; - }); - - const auto& session_repository_ = service->session_repository_; - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto options = 0U; - - auto status = library->RegisterDoneEvent(task, options, CallbackRouter::handle_callback, handler->token()); - if (!status_ok(status)) { - return service->ConvertApiErrorStatusForTaskHandle(context, status, task); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginReadBinaryU16(::grpc::ServerContext* context, const BeginReadBinaryU16Request* request, BeginReadBinaryU16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 fill_mode; + switch (request->fill_mode_enum_case()) { + case nidaqmx_grpc::BeginReadBinaryU16Request::FillModeEnumCase::kFillMode: { + fill_mode = static_cast(request->fill_mode()); + break; + } + case nidaqmx_grpc::BeginReadBinaryU16Request::FillModeEnumCase::kFillModeRaw: { + fill_mode = static_cast(request->fill_mode_raw()); + break; + } + case nidaqmx_grpc::BeginReadBinaryU16Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); + break; } - - // SendInitialMetadata after the driver call so that WaitForInitialMetadata can be used to ensure that calls are serialized. - StartSendInitialMetadata(); - - this->set_producer(std::move(handler)); - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->timeout = timeout; + data->fill_mode = fill_mode; + data->array_size_in_samps = array_size_in_samps; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + data->response.mutable_read_array()->Reserve(request->array_size_in_samps()); + data->response.mutable_read_array()->Resize(request->array_size_in_samps(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadBinaryU16", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); return ::grpc::Status::OK; } - }; + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } - return new RegisterDoneEventReactor(context, request, library_, this); -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ReadBinaryU32(::grpc::ServerContext* context, const ReadBinaryU32Request* request, ReadBinaryU32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 fill_mode; + switch (request->fill_mode_enum_case()) { + case nidaqmx_grpc::ReadBinaryU32Request::FillModeEnumCase::kFillMode: { + fill_mode = static_cast(request->fill_mode()); + break; + } + case nidaqmx_grpc::ReadBinaryU32Request::FillModeEnumCase::kFillModeRaw: { + fill_mode = static_cast(request->fill_mode_raw()); + break; + } + case nidaqmx_grpc::ReadBinaryU32Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::ServerWriteReactor* -NiDAQmxService::RegisterEveryNSamplesEvent(::grpc::CallbackServerContext* context, const RegisterEveryNSamplesEventRequest* request) -{ - using CallbackRouter = nidevice_grpc::CallbackRouter; - class RegisterEveryNSamplesEventReactor : public nidevice_grpc::ServerWriterReactor { - public: - RegisterEveryNSamplesEventReactor(::grpc::CallbackServerContext* context, const RegisterEveryNSamplesEventRequest* request, LibrarySharedPtr library, NiDAQmxService* service) - { - auto status = start(context, request, library, service); - if (!status.ok()) { - this->try_finish(std::move(status)); + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + response->mutable_read_array()->Resize(array_size_in_samps, 0); + uInt32* read_array = reinterpret_cast(response->mutable_read_array()->mutable_data()); + int32 samps_per_chan_read {}; + auto status = library_->ReadBinaryU32(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); + context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); + if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + response->set_samps_per_chan_read(samps_per_chan_read); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } - ::grpc::Status start(::grpc::CallbackServerContext* context, const RegisterEveryNSamplesEventRequest* request, LibrarySharedPtr library, NiDAQmxService* service) - { - try { - auto handler = CallbackRouter::register_handler( - [this](TaskHandle task, int32 every_n_samples_event_type, uInt32 n_samples) { - RegisterEveryNSamplesEventResponse callback_response; - auto response = &callback_response; - response->set_every_n_samples_event_type(static_cast(every_n_samples_event_type)); - response->set_every_n_samples_event_type_raw(every_n_samples_event_type); - response->set_n_samples(n_samples); - queue_write(callback_response); - return 0; - }); - - const auto& session_repository_ = service->session_repository_; - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 every_n_samples_event_type; - switch (request->every_n_samples_event_type_enum_case()) { - case nidaqmx_grpc::RegisterEveryNSamplesEventRequest::EveryNSamplesEventTypeEnumCase::kEveryNSamplesEventType: { - every_n_samples_event_type = static_cast(request->every_n_samples_event_type()); - break; - } - case nidaqmx_grpc::RegisterEveryNSamplesEventRequest::EveryNSamplesEventTypeEnumCase::kEveryNSamplesEventTypeRaw: { - every_n_samples_event_type = static_cast(request->every_n_samples_event_type_raw()); - break; - } - case nidaqmx_grpc::RegisterEveryNSamplesEventRequest::EveryNSamplesEventTypeEnumCase::EVERY_N_SAMPLES_EVENT_TYPE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for every_n_samples_event_type was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginReadBinaryU32(::grpc::ServerContext* context, const BeginReadBinaryU32Request* request, BeginReadBinaryU32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 fill_mode; + switch (request->fill_mode_enum_case()) { + case nidaqmx_grpc::BeginReadBinaryU32Request::FillModeEnumCase::kFillMode: { + fill_mode = static_cast(request->fill_mode()); + break; } - - uInt32 n_samples = request->n_samples(); - auto options = 0U; - - auto status = library->RegisterEveryNSamplesEvent(task, every_n_samples_event_type, n_samples, options, CallbackRouter::handle_callback, handler->token()); - if (!status_ok(status)) { - return service->ConvertApiErrorStatusForTaskHandle(context, status, task); + case nidaqmx_grpc::BeginReadBinaryU32Request::FillModeEnumCase::kFillModeRaw: { + fill_mode = static_cast(request->fill_mode_raw()); + break; + } + case nidaqmx_grpc::BeginReadBinaryU32Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); + break; } - - // SendInitialMetadata after the driver call so that WaitForInitialMetadata can be used to ensure that calls are serialized. - StartSendInitialMetadata(); - - this->set_producer(std::move(handler)); - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->timeout = timeout; + data->fill_mode = fill_mode; + data->array_size_in_samps = array_size_in_samps; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + data->response.mutable_read_array()->Reserve(request->array_size_in_samps()); + data->response.mutable_read_array()->Resize(request->array_size_in_samps(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadBinaryU32", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); return ::grpc::Status::OK; } - }; - - return new RegisterEveryNSamplesEventReactor(context, request, library_, this); -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::ServerWriteReactor* -NiDAQmxService::RegisterSignalEvent(::grpc::CallbackServerContext* context, const RegisterSignalEventRequest* request) -{ - using CallbackRouter = nidevice_grpc::CallbackRouter; - class RegisterSignalEventReactor : public nidevice_grpc::ServerWriterReactor { - public: - RegisterSignalEventReactor(::grpc::CallbackServerContext* context, const RegisterSignalEventRequest* request, LibrarySharedPtr library, NiDAQmxService* service) - { - auto status = start(context, request, library, service); - if (!status.ok()) { - this->try_finish(std::move(status)); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ReadCounterF64(::grpc::ServerContext* context, const ReadCounterF64Request* request, ReadCounterF64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + response->mutable_read_array()->Resize(array_size_in_samps, 0); + float64* read_array = response->mutable_read_array()->mutable_data(); + int32 samps_per_chan_read {}; + auto status = library_->ReadCounterF64(task, num_samps_per_chan, timeout, read_array, array_size_in_samps, &samps_per_chan_read, reserved); + context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); + if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + response->set_samps_per_chan_read(samps_per_chan_read); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginReadCounterF64(::grpc::ServerContext* context, const BeginReadCounterF64Request* request, BeginReadCounterF64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->timeout = timeout; + data->array_size_in_samps = array_size_in_samps; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + data->response.mutable_read_array()->Reserve(request->array_size_in_samps()); + data->response.mutable_read_array()->Resize(request->array_size_in_samps(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCounterF64", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } - ::grpc::Status start(::grpc::CallbackServerContext* context, const RegisterSignalEventRequest* request, LibrarySharedPtr library, NiDAQmxService* service) - { - try { - auto handler = CallbackRouter::register_handler( - [this](TaskHandle task, int32 signal_id) { - RegisterSignalEventResponse callback_response; - auto response = &callback_response; - response->set_signal_id(signal_id); - queue_write(callback_response); - return 0; - }); - - const auto& session_repository_ = service->session_repository_; - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 signal_id; - switch (request->signal_id_enum_case()) { - case nidaqmx_grpc::RegisterSignalEventRequest::SignalIdEnumCase::kSignalId: { - signal_id = static_cast(request->signal_id()); - break; - } - case nidaqmx_grpc::RegisterSignalEventRequest::SignalIdEnumCase::kSignalIdRaw: { - signal_id = static_cast(request->signal_id_raw()); - break; - } - case nidaqmx_grpc::RegisterSignalEventRequest::SignalIdEnumCase::SIGNAL_ID_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for signal_id was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ReadCounterF64Ex(::grpc::ServerContext* context, const ReadCounterF64ExRequest* request, ReadCounterF64ExResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 fill_mode; + switch (request->fill_mode_enum_case()) { + case nidaqmx_grpc::ReadCounterF64ExRequest::FillModeEnumCase::kFillMode: { + fill_mode = static_cast(request->fill_mode()); + break; } - - auto options = 0U; - - auto status = library->RegisterSignalEvent(task, signal_id, options, CallbackRouter::handle_callback, handler->token()); - if (!status_ok(status)) { - return service->ConvertApiErrorStatusForTaskHandle(context, status, task); + case nidaqmx_grpc::ReadCounterF64ExRequest::FillModeEnumCase::kFillModeRaw: { + fill_mode = static_cast(request->fill_mode_raw()); + break; + } + case nidaqmx_grpc::ReadCounterF64ExRequest::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); + break; } - - // SendInitialMetadata after the driver call so that WaitForInitialMetadata can be used to ensure that calls are serialized. - StartSendInitialMetadata(); - - this->set_producer(std::move(handler)); - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + response->mutable_read_array()->Resize(array_size_in_samps, 0); + float64* read_array = response->mutable_read_array()->mutable_data(); + int32 samps_per_chan_read {}; + auto status = library_->ReadCounterF64Ex(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); + context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); + if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + response->set_samps_per_chan_read(samps_per_chan_read); return ::grpc::Status::OK; } - }; - - return new RegisterSignalEventReactor(context, request, library_, this); -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::RemoveCDAQSyncConnection(::grpc::ServerContext* context, const RemoveCDAQSyncConnectionRequest* request, RemoveCDAQSyncConnectionResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto port_list_mbcs = convert_from_grpc(request->port_list()); - auto port_list = port_list_mbcs.c_str(); - auto status = library_->RemoveCDAQSyncConnection(port_list); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ReserveNetworkDevice(::grpc::ServerContext* context, const ReserveNetworkDeviceRequest* request, ReserveNetworkDeviceResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - bool32 override_reservation = request->override_reservation(); - auto status = library_->ReserveNetworkDevice(device_name, override_reservation); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginReadCounterF64Ex(::grpc::ServerContext* context, const BeginReadCounterF64ExRequest* request, BeginReadCounterF64ExResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 fill_mode; + switch (request->fill_mode_enum_case()) { + case nidaqmx_grpc::BeginReadCounterF64ExRequest::FillModeEnumCase::kFillMode: { + fill_mode = static_cast(request->fill_mode()); + break; + } + case nidaqmx_grpc::BeginReadCounterF64ExRequest::FillModeEnumCase::kFillModeRaw: { + fill_mode = static_cast(request->fill_mode_raw()); + break; + } + case nidaqmx_grpc::BeginReadCounterF64ExRequest::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ResetBufferAttribute(::grpc::ServerContext* context, const ResetBufferAttributeRequest* request, ResetBufferAttributeResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->timeout = timeout; + data->fill_mode = fill_mode; + data->array_size_in_samps = array_size_in_samps; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + data->response.mutable_read_array()->Reserve(request->array_size_in_samps()); + data->response.mutable_read_array()->Resize(request->array_size_in_samps(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCounterF64Ex", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::ResetBufferAttributeRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::BufferResetAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::ResetBufferAttributeRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::BufferResetAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::ResetBufferAttributeRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ReadCounterScalarF64(::grpc::ServerContext* context, const ReadCounterScalarF64Request* request, ReadCounterScalarF64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + float64 timeout = request->timeout(); + auto reserved = nullptr; + float64 value {}; + auto status = library_->ReadCounterScalarF64(task, timeout, &value, reserved); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; } - - auto status = library_->ResetBufferAttribute(task, attribute); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ResetChanAttribute(::grpc::ServerContext* context, const ResetChanAttributeRequest* request, ResetChanAttributeResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto channel_mbcs = convert_from_grpc(request->channel()); - auto channel = channel_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::ResetChanAttributeRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ChannelResetAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::ResetChanAttributeRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ChannelResetAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::ResetChanAttributeRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - auto status = library_->ResetChanAttribute(task, channel, attribute); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginReadCounterScalarF64(::grpc::ServerContext* context, const BeginReadCounterScalarF64Request* request, BeginReadCounterScalarF64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + float64 timeout = request->timeout(); + auto reserved = nullptr; -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ResetDevice(::grpc::ServerContext* context, const ResetDeviceRequest* request, ResetDeviceResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - auto status = library_->ResetDevice(device_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + auto data = std::make_unique(); + data->task = task; + data->timeout = timeout; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCounterScalarF64", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ResetExportedSignalAttribute(::grpc::ServerContext* context, const ResetExportedSignalAttributeRequest* request, ResetExportedSignalAttributeResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::ResetExportedSignalAttributeRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ExportSignalResetAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::ResetExportedSignalAttributeRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ExportSignalResetAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::ResetExportedSignalAttributeRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ReadCounterScalarU32(::grpc::ServerContext* context, const ReadCounterScalarU32Request* request, ReadCounterScalarU32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + float64 timeout = request->timeout(); + auto reserved = nullptr; + uInt32 value {}; + auto status = library_->ReadCounterScalarU32(task, timeout, &value, reserved); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; } - - auto status = library_->ResetExportedSignalAttribute(task, attribute); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ResetReadAttribute(::grpc::ServerContext* context, const ResetReadAttributeRequest* request, ResetReadAttributeResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::ResetReadAttributeRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ReadResetAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::ResetReadAttributeRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ReadResetAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::ResetReadAttributeRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginReadCounterScalarU32(::grpc::ServerContext* context, const BeginReadCounterScalarU32Request* request, BeginReadCounterScalarU32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + float64 timeout = request->timeout(); + auto reserved = nullptr; - auto status = library_->ResetReadAttribute(task, attribute); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + auto data = std::make_unique(); + data->task = task; + data->timeout = timeout; + data->reserved = reserved; + data->library = std::shared_ptr(library_); -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ResetRealTimeAttribute(::grpc::ServerContext* context, const ResetRealTimeAttributeRequest* request, ResetRealTimeAttributeResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::ResetRealTimeAttributeRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::RealTimeResetAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::ResetRealTimeAttributeRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::RealTimeResetAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::ResetRealTimeAttributeRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCounterScalarU32", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ReadCounterU32(::grpc::ServerContext* context, const ReadCounterU32Request* request, ReadCounterU32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + response->mutable_read_array()->Resize(array_size_in_samps, 0); + uInt32* read_array = reinterpret_cast(response->mutable_read_array()->mutable_data()); + int32 samps_per_chan_read {}; + auto status = library_->ReadCounterU32(task, num_samps_per_chan, timeout, read_array, array_size_in_samps, &samps_per_chan_read, reserved); + context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); + if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + response->set_samps_per_chan_read(samps_per_chan_read); + return ::grpc::Status::OK; } - - auto status = library_->ResetRealTimeAttribute(task, attribute); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginReadCounterU32(::grpc::ServerContext* context, const BeginReadCounterU32Request* request, BeginReadCounterU32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->timeout = timeout; + data->array_size_in_samps = array_size_in_samps; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + data->response.mutable_read_array()->Reserve(request->array_size_in_samps()); + data->response.mutable_read_array()->Resize(request->array_size_in_samps(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCounterU32", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ResetTimingAttribute(::grpc::ServerContext* context, const ResetTimingAttributeRequest* request, ResetTimingAttributeResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::ResetTimingAttributeRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TimingResetAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::ResetTimingAttributeRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TimingResetAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ReadCounterU32Ex(::grpc::ServerContext* context, const ReadCounterU32ExRequest* request, ReadCounterU32ExResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 fill_mode; + switch (request->fill_mode_enum_case()) { + case nidaqmx_grpc::ReadCounterU32ExRequest::FillModeEnumCase::kFillMode: { + fill_mode = static_cast(request->fill_mode()); + break; + } + case nidaqmx_grpc::ReadCounterU32ExRequest::FillModeEnumCase::kFillModeRaw: { + fill_mode = static_cast(request->fill_mode_raw()); + break; + } + case nidaqmx_grpc::ReadCounterU32ExRequest::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); + break; + } } - case nidaqmx_grpc::ResetTimingAttributeRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + response->mutable_read_array()->Resize(array_size_in_samps, 0); + uInt32* read_array = reinterpret_cast(response->mutable_read_array()->mutable_data()); + int32 samps_per_chan_read {}; + auto status = library_->ReadCounterU32Ex(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); + context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); + if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + response->set_samps_per_chan_read(samps_per_chan_read); + return ::grpc::Status::OK; } - - auto status = library_->ResetTimingAttribute(task, attribute); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ResetTimingAttributeEx(::grpc::ServerContext* context, const ResetTimingAttributeExRequest* request, ResetTimingAttributeExResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto device_names_mbcs = convert_from_grpc(request->device_names()); - auto device_names = device_names_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::ResetTimingAttributeExRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TimingResetAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::ResetTimingAttributeExRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TimingResetAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::ResetTimingAttributeExRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - auto status = library_->ResetTimingAttributeEx(task, device_names, attribute); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginReadCounterU32Ex(::grpc::ServerContext* context, const BeginReadCounterU32ExRequest* request, BeginReadCounterU32ExResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 fill_mode; + switch (request->fill_mode_enum_case()) { + case nidaqmx_grpc::BeginReadCounterU32ExRequest::FillModeEnumCase::kFillMode: { + fill_mode = static_cast(request->fill_mode()); + break; + } + case nidaqmx_grpc::BeginReadCounterU32ExRequest::FillModeEnumCase::kFillModeRaw: { + fill_mode = static_cast(request->fill_mode_raw()); + break; + } + case nidaqmx_grpc::BeginReadCounterU32ExRequest::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ResetTrigAttribute(::grpc::ServerContext* context, const ResetTrigAttributeRequest* request, ResetTrigAttributeResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->timeout = timeout; + data->fill_mode = fill_mode; + data->array_size_in_samps = array_size_in_samps; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + data->response.mutable_read_array()->Reserve(request->array_size_in_samps()); + data->response.mutable_read_array()->Resize(request->array_size_in_samps(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCounterU32Ex", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::ResetTrigAttributeRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TriggerResetAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::ResetTrigAttributeRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TriggerResetAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ReadCtrFreq(::grpc::ServerContext* context, const ReadCtrFreqRequest* request, ReadCtrFreqResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 interleaved; + switch (request->interleaved_enum_case()) { + case nidaqmx_grpc::ReadCtrFreqRequest::InterleavedEnumCase::kInterleaved: { + interleaved = static_cast(request->interleaved()); + break; + } + case nidaqmx_grpc::ReadCtrFreqRequest::InterleavedEnumCase::kInterleavedRaw: { + interleaved = static_cast(request->interleaved_raw()); + break; + } + case nidaqmx_grpc::ReadCtrFreqRequest::InterleavedEnumCase::INTERLEAVED_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for interleaved was not specified or out of range"); + break; + } } - case nidaqmx_grpc::ResetTrigAttributeRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + response->mutable_read_array_frequency()->Resize(array_size_in_samps, 0); + float64* read_array_frequency = response->mutable_read_array_frequency()->mutable_data(); + response->mutable_read_array_duty_cycle()->Resize(array_size_in_samps, 0); + float64* read_array_duty_cycle = response->mutable_read_array_duty_cycle()->mutable_data(); + int32 samps_per_chan_read {}; + auto status = library_->ReadCtrFreq(task, num_samps_per_chan, timeout, interleaved, read_array_frequency, read_array_duty_cycle, array_size_in_samps, &samps_per_chan_read, reserved); + context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); + if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + response->set_samps_per_chan_read(samps_per_chan_read); + return ::grpc::Status::OK; } - - auto status = library_->ResetTrigAttribute(task, attribute); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ResetWatchdogAttribute(::grpc::ServerContext* context, const ResetWatchdogAttributeRequest* request, ResetWatchdogAttributeResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto lines_mbcs = convert_from_grpc(request->lines()); - auto lines = lines_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::ResetWatchdogAttributeRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::WatchdogResetAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::ResetWatchdogAttributeRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::WatchdogResetAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::ResetWatchdogAttributeRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - auto status = library_->ResetWatchdogAttribute(task, lines, attribute); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginReadCtrFreq(::grpc::ServerContext* context, const BeginReadCtrFreqRequest* request, BeginReadCtrFreqResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 interleaved; + switch (request->interleaved_enum_case()) { + case nidaqmx_grpc::BeginReadCtrFreqRequest::InterleavedEnumCase::kInterleaved: { + interleaved = static_cast(request->interleaved()); + break; + } + case nidaqmx_grpc::BeginReadCtrFreqRequest::InterleavedEnumCase::kInterleavedRaw: { + interleaved = static_cast(request->interleaved_raw()); + break; + } + case nidaqmx_grpc::BeginReadCtrFreqRequest::InterleavedEnumCase::INTERLEAVED_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for interleaved was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::ResetWriteAttribute(::grpc::ServerContext* context, const ResetWriteAttributeRequest* request, ResetWriteAttributeResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->timeout = timeout; + data->interleaved = interleaved; + data->array_size_in_samps = array_size_in_samps; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + data->response.mutable_read_array_frequency()->Reserve(request->array_size_in_samps()); + data->response.mutable_read_array_frequency()->Resize(request->array_size_in_samps(), 0); + data->response.mutable_read_array_duty_cycle()->Reserve(request->array_size_in_samps()); + data->response.mutable_read_array_duty_cycle()->Resize(request->array_size_in_samps(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCtrFreq", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::ResetWriteAttributeRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::WriteResetAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::ResetWriteAttributeRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::WriteResetAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::ResetWriteAttributeRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ReadCtrFreqScalar(::grpc::ServerContext* context, const ReadCtrFreqScalarRequest* request, ReadCtrFreqScalarResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + float64 timeout = request->timeout(); + auto reserved = nullptr; + float64 frequency {}; + float64 duty_cycle {}; + auto status = library_->ReadCtrFreqScalar(task, timeout, &frequency, &duty_cycle, reserved); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + response->set_frequency(frequency); + response->set_duty_cycle(duty_cycle); + return ::grpc::Status::OK; } - - auto status = library_->ResetWriteAttribute(task, attribute); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::RestoreLastExtCalConst(::grpc::ServerContext* context, const RestoreLastExtCalConstRequest* request, RestoreLastExtCalConstResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - auto status = library_->RestoreLastExtCalConst(device_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginReadCtrFreqScalar(::grpc::ServerContext* context, const BeginReadCtrFreqScalarRequest* request, BeginReadCtrFreqScalarResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + float64 timeout = request->timeout(); + auto reserved = nullptr; -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SaveGlobalChan(::grpc::ServerContext* context, const SaveGlobalChanRequest* request, SaveGlobalChanResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto channel_name_mbcs = convert_from_grpc(request->channel_name()); - auto channel_name = channel_name_mbcs.c_str(); - auto save_as_mbcs = convert_from_grpc(request->save_as()); - auto save_as = save_as_mbcs.c_str(); - auto author_mbcs = convert_from_grpc(request->author()); - auto author = author_mbcs.c_str(); - uInt32 options; - switch (request->options_enum_case()) { - case nidaqmx_grpc::SaveGlobalChanRequest::OptionsEnumCase::kOptions: { - options = static_cast(request->options()); - break; - } - case nidaqmx_grpc::SaveGlobalChanRequest::OptionsEnumCase::kOptionsRaw: { - options = static_cast(request->options_raw()); - break; - } - case nidaqmx_grpc::SaveGlobalChanRequest::OptionsEnumCase::OPTIONS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for options was not specified or out of range"); - break; - } - } - - auto status = library_->SaveGlobalChan(task, channel_name, save_as, author, options); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + auto data = std::make_unique(); + data->task = task; + data->timeout = timeout; + data->reserved = reserved; + data->library = std::shared_ptr(library_); -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SaveScale(::grpc::ServerContext* context, const SaveScaleRequest* request, SaveScaleResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCtrFreqScalar", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - try { - auto scale_name_mbcs = convert_from_grpc(request->scale_name()); - auto scale_name = scale_name_mbcs.c_str(); - auto save_as_mbcs = convert_from_grpc(request->save_as()); - auto save_as = save_as_mbcs.c_str(); - auto author_mbcs = convert_from_grpc(request->author()); - auto author = author_mbcs.c_str(); - uInt32 options; - switch (request->options_enum_case()) { - case nidaqmx_grpc::SaveScaleRequest::OptionsEnumCase::kOptions: { - options = static_cast(request->options()); - break; - } - case nidaqmx_grpc::SaveScaleRequest::OptionsEnumCase::kOptionsRaw: { - options = static_cast(request->options_raw()); - break; + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ReadCtrTicks(::grpc::ServerContext* context, const ReadCtrTicksRequest* request, ReadCtrTicksResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 interleaved; + switch (request->interleaved_enum_case()) { + case nidaqmx_grpc::ReadCtrTicksRequest::InterleavedEnumCase::kInterleaved: { + interleaved = static_cast(request->interleaved()); + break; + } + case nidaqmx_grpc::ReadCtrTicksRequest::InterleavedEnumCase::kInterleavedRaw: { + interleaved = static_cast(request->interleaved_raw()); + break; + } + case nidaqmx_grpc::ReadCtrTicksRequest::InterleavedEnumCase::INTERLEAVED_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for interleaved was not specified or out of range"); + break; + } } - case nidaqmx_grpc::SaveScaleRequest::OptionsEnumCase::OPTIONS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for options was not specified or out of range"); - break; + + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + response->mutable_read_array_high_ticks()->Resize(array_size_in_samps, 0); + uInt32* read_array_high_ticks = reinterpret_cast(response->mutable_read_array_high_ticks()->mutable_data()); + response->mutable_read_array_low_ticks()->Resize(array_size_in_samps, 0); + uInt32* read_array_low_ticks = reinterpret_cast(response->mutable_read_array_low_ticks()->mutable_data()); + int32 samps_per_chan_read {}; + auto status = library_->ReadCtrTicks(task, num_samps_per_chan, timeout, interleaved, read_array_high_ticks, read_array_low_ticks, array_size_in_samps, &samps_per_chan_read, reserved); + context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); + if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + response->set_samps_per_chan_read(samps_per_chan_read); + return ::grpc::Status::OK; } - - auto status = library_->SaveScale(scale_name, save_as, author, options); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SaveTask(::grpc::ServerContext* context, const SaveTaskRequest* request, SaveTaskResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto save_as_mbcs = convert_from_grpc(request->save_as()); - auto save_as = save_as_mbcs.c_str(); - auto author_mbcs = convert_from_grpc(request->author()); - auto author = author_mbcs.c_str(); - uInt32 options; - switch (request->options_enum_case()) { - case nidaqmx_grpc::SaveTaskRequest::OptionsEnumCase::kOptions: { - options = static_cast(request->options()); - break; - } - case nidaqmx_grpc::SaveTaskRequest::OptionsEnumCase::kOptionsRaw: { - options = static_cast(request->options_raw()); - break; - } - case nidaqmx_grpc::SaveTaskRequest::OptionsEnumCase::OPTIONS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for options was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginReadCtrTicks(::grpc::ServerContext* context, const BeginReadCtrTicksRequest* request, BeginReadCtrTicksResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 interleaved; + switch (request->interleaved_enum_case()) { + case nidaqmx_grpc::BeginReadCtrTicksRequest::InterleavedEnumCase::kInterleaved: { + interleaved = static_cast(request->interleaved()); + break; + } + case nidaqmx_grpc::BeginReadCtrTicksRequest::InterleavedEnumCase::kInterleavedRaw: { + interleaved = static_cast(request->interleaved_raw()); + break; + } + case nidaqmx_grpc::BeginReadCtrTicksRequest::InterleavedEnumCase::INTERLEAVED_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for interleaved was not specified or out of range"); + break; + } + } - auto status = library_->SaveTask(task, save_as, author, options); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->timeout = timeout; + data->interleaved = interleaved; + data->array_size_in_samps = array_size_in_samps; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + data->response.mutable_read_array_high_ticks()->Reserve(request->array_size_in_samps()); + data->response.mutable_read_array_high_ticks()->Resize(request->array_size_in_samps(), 0); + data->response.mutable_read_array_low_ticks()->Reserve(request->array_size_in_samps()); + data->response.mutable_read_array_low_ticks()->Resize(request->array_size_in_samps(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCtrTicks", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SelfCal(::grpc::ServerContext* context, const SelfCalRequest* request, SelfCalResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - auto status = library_->SelfCal(device_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ReadCtrTicksScalar(::grpc::ServerContext* context, const ReadCtrTicksScalarRequest* request, ReadCtrTicksScalarResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + float64 timeout = request->timeout(); + auto reserved = nullptr; + uInt32 high_ticks {}; + uInt32 low_ticks {}; + auto status = library_->ReadCtrTicksScalar(task, timeout, &high_ticks, &low_ticks, reserved); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + response->set_high_ticks(high_ticks); + response->set_low_ticks(low_ticks); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SelfTestDevice(::grpc::ServerContext* context, const SelfTestDeviceRequest* request, SelfTestDeviceResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - auto status = library_->SelfTestDevice(device_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginReadCtrTicksScalar(::grpc::ServerContext* context, const BeginReadCtrTicksScalarRequest* request, BeginReadCtrTicksScalarResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + float64 timeout = request->timeout(); + auto reserved = nullptr; -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetAIChanCalCalDate(::grpc::ServerContext* context, const SetAIChanCalCalDateRequest* request, SetAIChanCalCalDateResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto channel_name_mbcs = convert_from_grpc(request->channel_name()); - auto channel_name = channel_name_mbcs.c_str(); - uInt32 year = request->year(); - uInt32 month = request->month(); - uInt32 day = request->day(); - uInt32 hour = request->hour(); - uInt32 minute = request->minute(); - auto status = library_->SetAIChanCalCalDate(task, channel_name, year, month, day, hour, minute); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + auto data = std::make_unique(); + data->task = task; + data->timeout = timeout; + data->reserved = reserved; + data->library = std::shared_ptr(library_); -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetAIChanCalExpDate(::grpc::ServerContext* context, const SetAIChanCalExpDateRequest* request, SetAIChanCalExpDateResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto channel_name_mbcs = convert_from_grpc(request->channel_name()); - auto channel_name = channel_name_mbcs.c_str(); - uInt32 year = request->year(); - uInt32 month = request->month(); - uInt32 day = request->day(); - uInt32 hour = request->hour(); - uInt32 minute = request->minute(); - auto status = library_->SetAIChanCalExpDate(task, channel_name, year, month, day, hour, minute); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCtrTicksScalar", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetAnalogPowerUpStates(::grpc::ServerContext* context, const SetAnalogPowerUpStatesRequest* request, SetAnalogPowerUpStatesResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - auto get_channelNames_if = [](const google::protobuf::RepeatedPtrField& vector, int n) -> const char* { - if (vector.size() > n) { - return vector[n].channel_names().c_str(); - } - return nullptr; - }; - auto get_state_if = [](const google::protobuf::RepeatedPtrField& vector, int n) -> float64 { - if (vector.size() > n) { - return vector[n].state(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ReadCtrTime(::grpc::ServerContext* context, const ReadCtrTimeRequest* request, ReadCtrTimeResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 interleaved; + switch (request->interleaved_enum_case()) { + case nidaqmx_grpc::ReadCtrTimeRequest::InterleavedEnumCase::kInterleaved: { + interleaved = static_cast(request->interleaved()); + break; + } + case nidaqmx_grpc::ReadCtrTimeRequest::InterleavedEnumCase::kInterleavedRaw: { + interleaved = static_cast(request->interleaved_raw()); + break; + } + case nidaqmx_grpc::ReadCtrTimeRequest::InterleavedEnumCase::INTERLEAVED_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for interleaved was not specified or out of range"); + break; + } } - return 0; - }; - auto get_channelType_if = [](const google::protobuf::RepeatedPtrField& vector, int n) -> int32 { - if (vector.size() > n) { - return vector[n].channel_type(); + + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + response->mutable_read_array_high_time()->Resize(array_size_in_samps, 0); + float64* read_array_high_time = response->mutable_read_array_high_time()->mutable_data(); + response->mutable_read_array_low_time()->Resize(array_size_in_samps, 0); + float64* read_array_low_time = response->mutable_read_array_low_time()->mutable_data(); + int32 samps_per_chan_read {}; + auto status = library_->ReadCtrTime(task, num_samps_per_chan, timeout, interleaved, read_array_high_time, read_array_low_time, array_size_in_samps, &samps_per_chan_read, reserved); + context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); + if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - return 0; - }; - auto power_up_states = request->power_up_states(); - if (power_up_states.size() == 0) { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "No values for powerUpStates were specified"); - } - if (power_up_states.size() > 96) { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "More than 96 values for powerUpStates were specified"); + response->set_status(status); + response->set_samps_per_chan_read(samps_per_chan_read); + return ::grpc::Status::OK; } - - auto status = std::static_pointer_cast(library_)->SetAnalogPowerUpStates(device_name, get_channelNames_if(power_up_states, 0), get_state_if(power_up_states, 0), get_channelType_if(power_up_states, 0), get_channelNames_if(power_up_states, 1), get_state_if(power_up_states, 1), get_channelType_if(power_up_states, 1), get_channelNames_if(power_up_states, 2), get_state_if(power_up_states, 2), get_channelType_if(power_up_states, 2), get_channelNames_if(power_up_states, 3), get_state_if(power_up_states, 3), get_channelType_if(power_up_states, 3), get_channelNames_if(power_up_states, 4), get_state_if(power_up_states, 4), get_channelType_if(power_up_states, 4), get_channelNames_if(power_up_states, 5), get_state_if(power_up_states, 5), get_channelType_if(power_up_states, 5), get_channelNames_if(power_up_states, 6), get_state_if(power_up_states, 6), get_channelType_if(power_up_states, 6), get_channelNames_if(power_up_states, 7), get_state_if(power_up_states, 7), get_channelType_if(power_up_states, 7), get_channelNames_if(power_up_states, 8), get_state_if(power_up_states, 8), get_channelType_if(power_up_states, 8), get_channelNames_if(power_up_states, 9), get_state_if(power_up_states, 9), get_channelType_if(power_up_states, 9), get_channelNames_if(power_up_states, 10), get_state_if(power_up_states, 10), get_channelType_if(power_up_states, 10), get_channelNames_if(power_up_states, 11), get_state_if(power_up_states, 11), get_channelType_if(power_up_states, 11), get_channelNames_if(power_up_states, 12), get_state_if(power_up_states, 12), get_channelType_if(power_up_states, 12), get_channelNames_if(power_up_states, 13), get_state_if(power_up_states, 13), get_channelType_if(power_up_states, 13), get_channelNames_if(power_up_states, 14), get_state_if(power_up_states, 14), get_channelType_if(power_up_states, 14), get_channelNames_if(power_up_states, 15), get_state_if(power_up_states, 15), get_channelType_if(power_up_states, 15), get_channelNames_if(power_up_states, 16), get_state_if(power_up_states, 16), get_channelType_if(power_up_states, 16), get_channelNames_if(power_up_states, 17), get_state_if(power_up_states, 17), get_channelType_if(power_up_states, 17), get_channelNames_if(power_up_states, 18), get_state_if(power_up_states, 18), get_channelType_if(power_up_states, 18), get_channelNames_if(power_up_states, 19), get_state_if(power_up_states, 19), get_channelType_if(power_up_states, 19), get_channelNames_if(power_up_states, 20), get_state_if(power_up_states, 20), get_channelType_if(power_up_states, 20), get_channelNames_if(power_up_states, 21), get_state_if(power_up_states, 21), get_channelType_if(power_up_states, 21), get_channelNames_if(power_up_states, 22), get_state_if(power_up_states, 22), get_channelType_if(power_up_states, 22), get_channelNames_if(power_up_states, 23), get_state_if(power_up_states, 23), get_channelType_if(power_up_states, 23), get_channelNames_if(power_up_states, 24), get_state_if(power_up_states, 24), get_channelType_if(power_up_states, 24), get_channelNames_if(power_up_states, 25), get_state_if(power_up_states, 25), get_channelType_if(power_up_states, 25), get_channelNames_if(power_up_states, 26), get_state_if(power_up_states, 26), get_channelType_if(power_up_states, 26), get_channelNames_if(power_up_states, 27), get_state_if(power_up_states, 27), get_channelType_if(power_up_states, 27), get_channelNames_if(power_up_states, 28), get_state_if(power_up_states, 28), get_channelType_if(power_up_states, 28), get_channelNames_if(power_up_states, 29), get_state_if(power_up_states, 29), get_channelType_if(power_up_states, 29), get_channelNames_if(power_up_states, 30), get_state_if(power_up_states, 30), get_channelType_if(power_up_states, 30), get_channelNames_if(power_up_states, 31), get_state_if(power_up_states, 31), get_channelType_if(power_up_states, 31), get_channelNames_if(power_up_states, 32), get_state_if(power_up_states, 32), get_channelType_if(power_up_states, 32), get_channelNames_if(power_up_states, 33), get_state_if(power_up_states, 33), get_channelType_if(power_up_states, 33), get_channelNames_if(power_up_states, 34), get_state_if(power_up_states, 34), get_channelType_if(power_up_states, 34), get_channelNames_if(power_up_states, 35), get_state_if(power_up_states, 35), get_channelType_if(power_up_states, 35), get_channelNames_if(power_up_states, 36), get_state_if(power_up_states, 36), get_channelType_if(power_up_states, 36), get_channelNames_if(power_up_states, 37), get_state_if(power_up_states, 37), get_channelType_if(power_up_states, 37), get_channelNames_if(power_up_states, 38), get_state_if(power_up_states, 38), get_channelType_if(power_up_states, 38), get_channelNames_if(power_up_states, 39), get_state_if(power_up_states, 39), get_channelType_if(power_up_states, 39), get_channelNames_if(power_up_states, 40), get_state_if(power_up_states, 40), get_channelType_if(power_up_states, 40), get_channelNames_if(power_up_states, 41), get_state_if(power_up_states, 41), get_channelType_if(power_up_states, 41), get_channelNames_if(power_up_states, 42), get_state_if(power_up_states, 42), get_channelType_if(power_up_states, 42), get_channelNames_if(power_up_states, 43), get_state_if(power_up_states, 43), get_channelType_if(power_up_states, 43), get_channelNames_if(power_up_states, 44), get_state_if(power_up_states, 44), get_channelType_if(power_up_states, 44), get_channelNames_if(power_up_states, 45), get_state_if(power_up_states, 45), get_channelType_if(power_up_states, 45), get_channelNames_if(power_up_states, 46), get_state_if(power_up_states, 46), get_channelType_if(power_up_states, 46), get_channelNames_if(power_up_states, 47), get_state_if(power_up_states, 47), get_channelType_if(power_up_states, 47), get_channelNames_if(power_up_states, 48), get_state_if(power_up_states, 48), get_channelType_if(power_up_states, 48), get_channelNames_if(power_up_states, 49), get_state_if(power_up_states, 49), get_channelType_if(power_up_states, 49), get_channelNames_if(power_up_states, 50), get_state_if(power_up_states, 50), get_channelType_if(power_up_states, 50), get_channelNames_if(power_up_states, 51), get_state_if(power_up_states, 51), get_channelType_if(power_up_states, 51), get_channelNames_if(power_up_states, 52), get_state_if(power_up_states, 52), get_channelType_if(power_up_states, 52), get_channelNames_if(power_up_states, 53), get_state_if(power_up_states, 53), get_channelType_if(power_up_states, 53), get_channelNames_if(power_up_states, 54), get_state_if(power_up_states, 54), get_channelType_if(power_up_states, 54), get_channelNames_if(power_up_states, 55), get_state_if(power_up_states, 55), get_channelType_if(power_up_states, 55), get_channelNames_if(power_up_states, 56), get_state_if(power_up_states, 56), get_channelType_if(power_up_states, 56), get_channelNames_if(power_up_states, 57), get_state_if(power_up_states, 57), get_channelType_if(power_up_states, 57), get_channelNames_if(power_up_states, 58), get_state_if(power_up_states, 58), get_channelType_if(power_up_states, 58), get_channelNames_if(power_up_states, 59), get_state_if(power_up_states, 59), get_channelType_if(power_up_states, 59), get_channelNames_if(power_up_states, 60), get_state_if(power_up_states, 60), get_channelType_if(power_up_states, 60), get_channelNames_if(power_up_states, 61), get_state_if(power_up_states, 61), get_channelType_if(power_up_states, 61), get_channelNames_if(power_up_states, 62), get_state_if(power_up_states, 62), get_channelType_if(power_up_states, 62), get_channelNames_if(power_up_states, 63), get_state_if(power_up_states, 63), get_channelType_if(power_up_states, 63), get_channelNames_if(power_up_states, 64), get_state_if(power_up_states, 64), get_channelType_if(power_up_states, 64), get_channelNames_if(power_up_states, 65), get_state_if(power_up_states, 65), get_channelType_if(power_up_states, 65), get_channelNames_if(power_up_states, 66), get_state_if(power_up_states, 66), get_channelType_if(power_up_states, 66), get_channelNames_if(power_up_states, 67), get_state_if(power_up_states, 67), get_channelType_if(power_up_states, 67), get_channelNames_if(power_up_states, 68), get_state_if(power_up_states, 68), get_channelType_if(power_up_states, 68), get_channelNames_if(power_up_states, 69), get_state_if(power_up_states, 69), get_channelType_if(power_up_states, 69), get_channelNames_if(power_up_states, 70), get_state_if(power_up_states, 70), get_channelType_if(power_up_states, 70), get_channelNames_if(power_up_states, 71), get_state_if(power_up_states, 71), get_channelType_if(power_up_states, 71), get_channelNames_if(power_up_states, 72), get_state_if(power_up_states, 72), get_channelType_if(power_up_states, 72), get_channelNames_if(power_up_states, 73), get_state_if(power_up_states, 73), get_channelType_if(power_up_states, 73), get_channelNames_if(power_up_states, 74), get_state_if(power_up_states, 74), get_channelType_if(power_up_states, 74), get_channelNames_if(power_up_states, 75), get_state_if(power_up_states, 75), get_channelType_if(power_up_states, 75), get_channelNames_if(power_up_states, 76), get_state_if(power_up_states, 76), get_channelType_if(power_up_states, 76), get_channelNames_if(power_up_states, 77), get_state_if(power_up_states, 77), get_channelType_if(power_up_states, 77), get_channelNames_if(power_up_states, 78), get_state_if(power_up_states, 78), get_channelType_if(power_up_states, 78), get_channelNames_if(power_up_states, 79), get_state_if(power_up_states, 79), get_channelType_if(power_up_states, 79), get_channelNames_if(power_up_states, 80), get_state_if(power_up_states, 80), get_channelType_if(power_up_states, 80), get_channelNames_if(power_up_states, 81), get_state_if(power_up_states, 81), get_channelType_if(power_up_states, 81), get_channelNames_if(power_up_states, 82), get_state_if(power_up_states, 82), get_channelType_if(power_up_states, 82), get_channelNames_if(power_up_states, 83), get_state_if(power_up_states, 83), get_channelType_if(power_up_states, 83), get_channelNames_if(power_up_states, 84), get_state_if(power_up_states, 84), get_channelType_if(power_up_states, 84), get_channelNames_if(power_up_states, 85), get_state_if(power_up_states, 85), get_channelType_if(power_up_states, 85), get_channelNames_if(power_up_states, 86), get_state_if(power_up_states, 86), get_channelType_if(power_up_states, 86), get_channelNames_if(power_up_states, 87), get_state_if(power_up_states, 87), get_channelType_if(power_up_states, 87), get_channelNames_if(power_up_states, 88), get_state_if(power_up_states, 88), get_channelType_if(power_up_states, 88), get_channelNames_if(power_up_states, 89), get_state_if(power_up_states, 89), get_channelType_if(power_up_states, 89), get_channelNames_if(power_up_states, 90), get_state_if(power_up_states, 90), get_channelType_if(power_up_states, 90), get_channelNames_if(power_up_states, 91), get_state_if(power_up_states, 91), get_channelType_if(power_up_states, 91), get_channelNames_if(power_up_states, 92), get_state_if(power_up_states, 92), get_channelType_if(power_up_states, 92), get_channelNames_if(power_up_states, 93), get_state_if(power_up_states, 93), get_channelType_if(power_up_states, 93), get_channelNames_if(power_up_states, 94), get_state_if(power_up_states, 94), get_channelType_if(power_up_states, 94), get_channelNames_if(power_up_states, 95), get_state_if(power_up_states, 95), get_channelType_if(power_up_states, 95), get_channelNames_if(power_up_states, 96), get_state_if(power_up_states, 96), get_channelType_if(power_up_states, 96)); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetAnalogPowerUpStatesWithOutputType(::grpc::ServerContext* context, const SetAnalogPowerUpStatesWithOutputTypeRequest* request, SetAnalogPowerUpStatesWithOutputTypeResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto channel_names_mbcs = convert_from_grpc(request->channel_names()); - auto channel_names = channel_names_mbcs.c_str(); - auto state_array = const_cast(request->state_array().data()); - auto channel_type_array_vector = std::vector(); - channel_type_array_vector.reserve(request->channel_type_array().size()); - std::transform( - request->channel_type_array().begin(), - request->channel_type_array().end(), - std::back_inserter(channel_type_array_vector), - [](auto x) { return x; }); - auto channel_type_array = channel_type_array_vector.data(); - - auto array_size_determine_from_sizes = std::array{ - request->state_array_size(), - request->channel_type_array_size()}; - const auto array_size_size_calculation = calculate_linked_array_size(array_size_determine_from_sizes, false); - if (array_size_size_calculation.match_state == MatchState::MISMATCH) { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The sizes of linked repeated fields [state_array, channel_type_array] do not match"); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginReadCtrTime(::grpc::ServerContext* context, const BeginReadCtrTimeRequest* request, BeginReadCtrTimeResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - auto array_size = array_size_size_calculation.size; + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 interleaved; + switch (request->interleaved_enum_case()) { + case nidaqmx_grpc::BeginReadCtrTimeRequest::InterleavedEnumCase::kInterleaved: { + interleaved = static_cast(request->interleaved()); + break; + } + case nidaqmx_grpc::BeginReadCtrTimeRequest::InterleavedEnumCase::kInterleavedRaw: { + interleaved = static_cast(request->interleaved_raw()); + break; + } + case nidaqmx_grpc::BeginReadCtrTimeRequest::InterleavedEnumCase::INTERLEAVED_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for interleaved was not specified or out of range"); + break; + } + } - auto status = library_->SetAnalogPowerUpStatesWithOutputType(channel_names, state_array, channel_type_array, array_size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->timeout = timeout; + data->interleaved = interleaved; + data->array_size_in_samps = array_size_in_samps; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + data->response.mutable_read_array_high_time()->Reserve(request->array_size_in_samps()); + data->response.mutable_read_array_high_time()->Resize(request->array_size_in_samps(), 0); + data->response.mutable_read_array_low_time()->Reserve(request->array_size_in_samps()); + data->response.mutable_read_array_low_time()->Resize(request->array_size_in_samps(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCtrTime", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetArmStartTrigTrigWhen(::grpc::ServerContext* context, const SetArmStartTrigTrigWhenRequest* request, SetArmStartTrigTrigWhenResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto data = convert_from_grpc(request->data()); - auto status = library_->SetArmStartTrigTrigWhen(task, data); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetBufferAttributeUInt32(::grpc::ServerContext* context, const SetBufferAttributeUInt32Request* request, SetBufferAttributeUInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetBufferAttributeUInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::BufferUInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetBufferAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::BufferUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetBufferAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ReadCtrTimeScalar(::grpc::ServerContext* context, const ReadCtrTimeScalarRequest* request, ReadCtrTimeScalarResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + float64 timeout = request->timeout(); + auto reserved = nullptr; + float64 high_time {}; + float64 low_time {}; + auto status = library_->ReadCtrTimeScalar(task, timeout, &high_time, &low_time, reserved); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + response->set_high_time(high_time); + response->set_low_time(low_time); + return ::grpc::Status::OK; } - - uInt32 value = request->value(); - auto status = library_->SetBufferAttributeUInt32(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetCalInfoAttributeBool(::grpc::ServerContext* context, const SetCalInfoAttributeBoolRequest* request, SetCalInfoAttributeBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetCalInfoAttributeBoolRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::CalibrationInfoBoolAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetCalInfoAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::CalibrationInfoBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetCalInfoAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginReadCtrTimeScalar(::grpc::ServerContext* context, const BeginReadCtrTimeScalarRequest* request, BeginReadCtrTimeScalarResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + float64 timeout = request->timeout(); + auto reserved = nullptr; - bool32 value = request->value(); - auto status = library_->SetCalInfoAttributeBool(device_name, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + auto data = std::make_unique(); + data->task = task; + data->timeout = timeout; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadCtrTimeScalar", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetCalInfoAttributeDouble(::grpc::ServerContext* context, const SetCalInfoAttributeDoubleRequest* request, SetCalInfoAttributeDoubleResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetCalInfoAttributeDoubleRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::CalibrationInfoDoubleAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetCalInfoAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::CalibrationInfoDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ReadDigitalLines(::grpc::ServerContext* context, const ReadDigitalLinesRequest* request, ReadDigitalLinesResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 fill_mode; + switch (request->fill_mode_enum_case()) { + case nidaqmx_grpc::ReadDigitalLinesRequest::FillModeEnumCase::kFillMode: { + fill_mode = static_cast(request->fill_mode()); + break; + } + case nidaqmx_grpc::ReadDigitalLinesRequest::FillModeEnumCase::kFillModeRaw: { + fill_mode = static_cast(request->fill_mode_raw()); + break; + } + case nidaqmx_grpc::ReadDigitalLinesRequest::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); + break; + } } - case nidaqmx_grpc::SetCalInfoAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + uInt32 array_size_in_bytes = request->array_size_in_bytes(); + auto reserved = nullptr; + std::string read_array(array_size_in_bytes, '\0'); + int32 samps_per_chan_read {}; + int32 num_bytes_per_samp {}; + auto status = library_->ReadDigitalLines(task, num_samps_per_chan, timeout, fill_mode, (uInt8*)read_array.data(), array_size_in_bytes, &samps_per_chan_read, &num_bytes_per_samp, reserved); + context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); + if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + response->set_read_array(read_array); + response->set_samps_per_chan_read(samps_per_chan_read); + response->set_num_bytes_per_samp(num_bytes_per_samp); + return ::grpc::Status::OK; } - - float64 value = request->value(); - auto status = library_->SetCalInfoAttributeDouble(device_name, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetCalInfoAttributeString(::grpc::ServerContext* context, const SetCalInfoAttributeStringRequest* request, SetCalInfoAttributeStringResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetCalInfoAttributeStringRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::CalibrationInfoStringAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetCalInfoAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::CalibrationInfoStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetCalInfoAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - auto value_mbcs = convert_from_grpc(request->value()); - auto value = value_mbcs.c_str(); - auto status = library_->SetCalInfoAttributeString(device_name, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginReadDigitalLines(::grpc::ServerContext* context, const BeginReadDigitalLinesRequest* request, BeginReadDigitalLinesResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 fill_mode; + switch (request->fill_mode_enum_case()) { + case nidaqmx_grpc::BeginReadDigitalLinesRequest::FillModeEnumCase::kFillMode: { + fill_mode = static_cast(request->fill_mode()); + break; + } + case nidaqmx_grpc::BeginReadDigitalLinesRequest::FillModeEnumCase::kFillModeRaw: { + fill_mode = static_cast(request->fill_mode_raw()); + break; + } + case nidaqmx_grpc::BeginReadDigitalLinesRequest::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetCalInfoAttributeUInt32(::grpc::ServerContext* context, const SetCalInfoAttributeUInt32Request* request, SetCalInfoAttributeUInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; + uInt32 array_size_in_bytes = request->array_size_in_bytes(); + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->timeout = timeout; + data->fill_mode = fill_mode; + data->array_size_in_bytes = array_size_in_bytes; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + data->response.mutable_read_array()->reserve(request->array_size_in_bytes()); + data->response.mutable_read_array()->resize(request->array_size_in_bytes(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadDigitalLines", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetCalInfoAttributeUInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::CalibrationInfoUInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetCalInfoAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::CalibrationInfoUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetCalInfoAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ReadDigitalScalarU32(::grpc::ServerContext* context, const ReadDigitalScalarU32Request* request, ReadDigitalScalarU32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + float64 timeout = request->timeout(); + auto reserved = nullptr; + uInt32 value {}; + auto status = library_->ReadDigitalScalarU32(task, timeout, &value, reserved); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + response->set_value(value); + return ::grpc::Status::OK; } - - uInt32 value = request->value(); - auto status = library_->SetCalInfoAttributeUInt32(device_name, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetChanAttributeBool(::grpc::ServerContext* context, const SetChanAttributeBoolRequest* request, SetChanAttributeBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto channel_mbcs = convert_from_grpc(request->channel()); - auto channel = channel_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetChanAttributeBoolRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ChannelBoolAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetChanAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ChannelBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetChanAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - bool32 value = request->value(); - auto status = library_->SetChanAttributeBool(task, channel, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginReadDigitalScalarU32(::grpc::ServerContext* context, const BeginReadDigitalScalarU32Request* request, BeginReadDigitalScalarU32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + float64 timeout = request->timeout(); + auto reserved = nullptr; -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetChanAttributeDouble(::grpc::ServerContext* context, const SetChanAttributeDoubleRequest* request, SetChanAttributeDoubleResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto channel_mbcs = convert_from_grpc(request->channel()); - auto channel = channel_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetChanAttributeDoubleRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ChannelDoubleAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetChanAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ChannelDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetChanAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - float64 value = request->value(); - auto status = library_->SetChanAttributeDouble(task, channel, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + auto data = std::make_unique(); + data->task = task; + data->timeout = timeout; + data->reserved = reserved; + data->library = std::shared_ptr(library_); -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetChanAttributeDoubleArray(::grpc::ServerContext* context, const SetChanAttributeDoubleArrayRequest* request, SetChanAttributeDoubleArrayResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto channel_mbcs = convert_from_grpc(request->channel()); - auto channel = channel_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetChanAttributeDoubleArrayRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ChannelDoubleArrayAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetChanAttributeDoubleArrayRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ChannelDoubleArrayAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetChanAttributeDoubleArrayRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - auto value = const_cast(request->value().data()); - uInt32 size = static_cast(request->value().size()); - auto status = library_->SetChanAttributeDoubleArray(task, channel, attribute, value, size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadDigitalScalarU32", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetChanAttributeInt32(::grpc::ServerContext* context, const SetChanAttributeInt32Request* request, SetChanAttributeInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto channel_mbcs = convert_from_grpc(request->channel()); - auto channel = channel_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetChanAttributeInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ChannelInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetChanAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ChannelInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetChanAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ReadDigitalU16(::grpc::ServerContext* context, const ReadDigitalU16Request* request, ReadDigitalU16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - - int32 value; - switch (request->value_enum_case()) { - case nidaqmx_grpc::SetChanAttributeInt32Request::ValueEnumCase::kValue: { - value = static_cast(request->value()); - break; - } - case nidaqmx_grpc::SetChanAttributeInt32Request::ValueEnumCase::kValueRaw: { - value = static_cast(request->value_raw()); - break; + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 fill_mode; + switch (request->fill_mode_enum_case()) { + case nidaqmx_grpc::ReadDigitalU16Request::FillModeEnumCase::kFillMode: { + fill_mode = static_cast(request->fill_mode()); + break; + } + case nidaqmx_grpc::ReadDigitalU16Request::FillModeEnumCase::kFillModeRaw: { + fill_mode = static_cast(request->fill_mode_raw()); + break; + } + case nidaqmx_grpc::ReadDigitalU16Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); + break; + } } - case nidaqmx_grpc::SetChanAttributeInt32Request::ValueEnumCase::VALUE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for value was not specified or out of range"); - break; + + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + std::vector read_array(array_size_in_samps); + int32 samps_per_chan_read {}; + auto status = library_->ReadDigitalU16(task, num_samps_per_chan, timeout, fill_mode, read_array.data(), array_size_in_samps, &samps_per_chan_read, reserved); + context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); + if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + response->mutable_read_array()->Clear(); + response->mutable_read_array()->Reserve(array_size_in_samps); + std::transform( + read_array.begin(), + read_array.begin() + array_size_in_samps, + google::protobuf::RepeatedFieldBackInserter(response->mutable_read_array()), + [&](auto x) { + return x; + }); + response->set_samps_per_chan_read(samps_per_chan_read); + return ::grpc::Status::OK; } - - auto status = library_->SetChanAttributeInt32(task, channel, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetChanAttributeString(::grpc::ServerContext* context, const SetChanAttributeStringRequest* request, SetChanAttributeStringResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto channel_mbcs = convert_from_grpc(request->channel()); - auto channel = channel_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetChanAttributeStringRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ChannelStringAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetChanAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ChannelStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetChanAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - auto value_mbcs = convert_from_grpc(request->value()); - auto value = value_mbcs.c_str(); - auto status = library_->SetChanAttributeString(task, channel, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginReadDigitalU16(::grpc::ServerContext* context, const BeginReadDigitalU16Request* request, BeginReadDigitalU16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 fill_mode; + switch (request->fill_mode_enum_case()) { + case nidaqmx_grpc::BeginReadDigitalU16Request::FillModeEnumCase::kFillMode: { + fill_mode = static_cast(request->fill_mode()); + break; + } + case nidaqmx_grpc::BeginReadDigitalU16Request::FillModeEnumCase::kFillModeRaw: { + fill_mode = static_cast(request->fill_mode_raw()); + break; + } + case nidaqmx_grpc::BeginReadDigitalU16Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetChanAttributeUInt32(::grpc::ServerContext* context, const SetChanAttributeUInt32Request* request, SetChanAttributeUInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto channel_mbcs = convert_from_grpc(request->channel()); - auto channel = channel_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetChanAttributeUInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ChannelUInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetChanAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ChannelUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetChanAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - uInt32 value = request->value(); - auto status = library_->SetChanAttributeUInt32(task, channel, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->timeout = timeout; + data->fill_mode = fill_mode; + data->array_size_in_samps = array_size_in_samps; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + data->response.mutable_read_array()->Reserve(request->array_size_in_samps()); + data->response.mutable_read_array()->Resize(request->array_size_in_samps(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadDigitalU16", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetDigitalLogicFamilyPowerUpState(::grpc::ServerContext* context, const SetDigitalLogicFamilyPowerUpStateRequest* request, SetDigitalLogicFamilyPowerUpStateResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - int32 logic_family; - switch (request->logic_family_enum_case()) { - case nidaqmx_grpc::SetDigitalLogicFamilyPowerUpStateRequest::LogicFamilyEnumCase::kLogicFamily: { - logic_family = static_cast(request->logic_family()); - break; - } - case nidaqmx_grpc::SetDigitalLogicFamilyPowerUpStateRequest::LogicFamilyEnumCase::kLogicFamilyRaw: { - logic_family = static_cast(request->logic_family_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ReadDigitalU32(::grpc::ServerContext* context, const ReadDigitalU32Request* request, ReadDigitalU32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 fill_mode; + switch (request->fill_mode_enum_case()) { + case nidaqmx_grpc::ReadDigitalU32Request::FillModeEnumCase::kFillMode: { + fill_mode = static_cast(request->fill_mode()); + break; + } + case nidaqmx_grpc::ReadDigitalU32Request::FillModeEnumCase::kFillModeRaw: { + fill_mode = static_cast(request->fill_mode_raw()); + break; + } + case nidaqmx_grpc::ReadDigitalU32Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); + break; + } } - case nidaqmx_grpc::SetDigitalLogicFamilyPowerUpStateRequest::LogicFamilyEnumCase::LOGIC_FAMILY_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for logic_family was not specified or out of range"); - break; + + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + response->mutable_read_array()->Resize(array_size_in_samps, 0); + uInt32* read_array = reinterpret_cast(response->mutable_read_array()->mutable_data()); + int32 samps_per_chan_read {}; + auto status = library_->ReadDigitalU32(task, num_samps_per_chan, timeout, fill_mode, read_array, array_size_in_samps, &samps_per_chan_read, reserved); + context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); + if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + response->set_samps_per_chan_read(samps_per_chan_read); + return ::grpc::Status::OK; } - - auto status = library_->SetDigitalLogicFamilyPowerUpState(device_name, logic_family); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetDigitalPowerUpStates(::grpc::ServerContext* context, const SetDigitalPowerUpStatesRequest* request, SetDigitalPowerUpStatesResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - auto get_channelNames_if = [](const google::protobuf::RepeatedPtrField& vector, int n) -> const char* { - if (vector.size() > n) { - return vector[n].channel_names().c_str(); - } - return nullptr; - }; - auto get_state_if = [](const google::protobuf::RepeatedPtrField& vector, int n) -> int32 { - if (vector.size() > n) { - return vector[n].state(); - } - return 0; - }; - auto power_up_states = request->power_up_states(); - if (power_up_states.size() == 0) { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "No values for powerUpStates were specified"); - } - if (power_up_states.size() > 96) { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "More than 96 values for powerUpStates were specified"); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginReadDigitalU32(::grpc::ServerContext* context, const BeginReadDigitalU32Request* request, BeginReadDigitalU32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 fill_mode; + switch (request->fill_mode_enum_case()) { + case nidaqmx_grpc::BeginReadDigitalU32Request::FillModeEnumCase::kFillMode: { + fill_mode = static_cast(request->fill_mode()); + break; + } + case nidaqmx_grpc::BeginReadDigitalU32Request::FillModeEnumCase::kFillModeRaw: { + fill_mode = static_cast(request->fill_mode_raw()); + break; + } + case nidaqmx_grpc::BeginReadDigitalU32Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); + break; + } + } - auto status = std::static_pointer_cast(library_)->SetDigitalPowerUpStates(device_name, get_channelNames_if(power_up_states, 0), get_state_if(power_up_states, 0), get_channelNames_if(power_up_states, 1), get_state_if(power_up_states, 1), get_channelNames_if(power_up_states, 2), get_state_if(power_up_states, 2), get_channelNames_if(power_up_states, 3), get_state_if(power_up_states, 3), get_channelNames_if(power_up_states, 4), get_state_if(power_up_states, 4), get_channelNames_if(power_up_states, 5), get_state_if(power_up_states, 5), get_channelNames_if(power_up_states, 6), get_state_if(power_up_states, 6), get_channelNames_if(power_up_states, 7), get_state_if(power_up_states, 7), get_channelNames_if(power_up_states, 8), get_state_if(power_up_states, 8), get_channelNames_if(power_up_states, 9), get_state_if(power_up_states, 9), get_channelNames_if(power_up_states, 10), get_state_if(power_up_states, 10), get_channelNames_if(power_up_states, 11), get_state_if(power_up_states, 11), get_channelNames_if(power_up_states, 12), get_state_if(power_up_states, 12), get_channelNames_if(power_up_states, 13), get_state_if(power_up_states, 13), get_channelNames_if(power_up_states, 14), get_state_if(power_up_states, 14), get_channelNames_if(power_up_states, 15), get_state_if(power_up_states, 15), get_channelNames_if(power_up_states, 16), get_state_if(power_up_states, 16), get_channelNames_if(power_up_states, 17), get_state_if(power_up_states, 17), get_channelNames_if(power_up_states, 18), get_state_if(power_up_states, 18), get_channelNames_if(power_up_states, 19), get_state_if(power_up_states, 19), get_channelNames_if(power_up_states, 20), get_state_if(power_up_states, 20), get_channelNames_if(power_up_states, 21), get_state_if(power_up_states, 21), get_channelNames_if(power_up_states, 22), get_state_if(power_up_states, 22), get_channelNames_if(power_up_states, 23), get_state_if(power_up_states, 23), get_channelNames_if(power_up_states, 24), get_state_if(power_up_states, 24), get_channelNames_if(power_up_states, 25), get_state_if(power_up_states, 25), get_channelNames_if(power_up_states, 26), get_state_if(power_up_states, 26), get_channelNames_if(power_up_states, 27), get_state_if(power_up_states, 27), get_channelNames_if(power_up_states, 28), get_state_if(power_up_states, 28), get_channelNames_if(power_up_states, 29), get_state_if(power_up_states, 29), get_channelNames_if(power_up_states, 30), get_state_if(power_up_states, 30), get_channelNames_if(power_up_states, 31), get_state_if(power_up_states, 31), get_channelNames_if(power_up_states, 32), get_state_if(power_up_states, 32), get_channelNames_if(power_up_states, 33), get_state_if(power_up_states, 33), get_channelNames_if(power_up_states, 34), get_state_if(power_up_states, 34), get_channelNames_if(power_up_states, 35), get_state_if(power_up_states, 35), get_channelNames_if(power_up_states, 36), get_state_if(power_up_states, 36), get_channelNames_if(power_up_states, 37), get_state_if(power_up_states, 37), get_channelNames_if(power_up_states, 38), get_state_if(power_up_states, 38), get_channelNames_if(power_up_states, 39), get_state_if(power_up_states, 39), get_channelNames_if(power_up_states, 40), get_state_if(power_up_states, 40), get_channelNames_if(power_up_states, 41), get_state_if(power_up_states, 41), get_channelNames_if(power_up_states, 42), get_state_if(power_up_states, 42), get_channelNames_if(power_up_states, 43), get_state_if(power_up_states, 43), get_channelNames_if(power_up_states, 44), get_state_if(power_up_states, 44), get_channelNames_if(power_up_states, 45), get_state_if(power_up_states, 45), get_channelNames_if(power_up_states, 46), get_state_if(power_up_states, 46), get_channelNames_if(power_up_states, 47), get_state_if(power_up_states, 47), get_channelNames_if(power_up_states, 48), get_state_if(power_up_states, 48), get_channelNames_if(power_up_states, 49), get_state_if(power_up_states, 49), get_channelNames_if(power_up_states, 50), get_state_if(power_up_states, 50), get_channelNames_if(power_up_states, 51), get_state_if(power_up_states, 51), get_channelNames_if(power_up_states, 52), get_state_if(power_up_states, 52), get_channelNames_if(power_up_states, 53), get_state_if(power_up_states, 53), get_channelNames_if(power_up_states, 54), get_state_if(power_up_states, 54), get_channelNames_if(power_up_states, 55), get_state_if(power_up_states, 55), get_channelNames_if(power_up_states, 56), get_state_if(power_up_states, 56), get_channelNames_if(power_up_states, 57), get_state_if(power_up_states, 57), get_channelNames_if(power_up_states, 58), get_state_if(power_up_states, 58), get_channelNames_if(power_up_states, 59), get_state_if(power_up_states, 59), get_channelNames_if(power_up_states, 60), get_state_if(power_up_states, 60), get_channelNames_if(power_up_states, 61), get_state_if(power_up_states, 61), get_channelNames_if(power_up_states, 62), get_state_if(power_up_states, 62), get_channelNames_if(power_up_states, 63), get_state_if(power_up_states, 63), get_channelNames_if(power_up_states, 64), get_state_if(power_up_states, 64), get_channelNames_if(power_up_states, 65), get_state_if(power_up_states, 65), get_channelNames_if(power_up_states, 66), get_state_if(power_up_states, 66), get_channelNames_if(power_up_states, 67), get_state_if(power_up_states, 67), get_channelNames_if(power_up_states, 68), get_state_if(power_up_states, 68), get_channelNames_if(power_up_states, 69), get_state_if(power_up_states, 69), get_channelNames_if(power_up_states, 70), get_state_if(power_up_states, 70), get_channelNames_if(power_up_states, 71), get_state_if(power_up_states, 71), get_channelNames_if(power_up_states, 72), get_state_if(power_up_states, 72), get_channelNames_if(power_up_states, 73), get_state_if(power_up_states, 73), get_channelNames_if(power_up_states, 74), get_state_if(power_up_states, 74), get_channelNames_if(power_up_states, 75), get_state_if(power_up_states, 75), get_channelNames_if(power_up_states, 76), get_state_if(power_up_states, 76), get_channelNames_if(power_up_states, 77), get_state_if(power_up_states, 77), get_channelNames_if(power_up_states, 78), get_state_if(power_up_states, 78), get_channelNames_if(power_up_states, 79), get_state_if(power_up_states, 79), get_channelNames_if(power_up_states, 80), get_state_if(power_up_states, 80), get_channelNames_if(power_up_states, 81), get_state_if(power_up_states, 81), get_channelNames_if(power_up_states, 82), get_state_if(power_up_states, 82), get_channelNames_if(power_up_states, 83), get_state_if(power_up_states, 83), get_channelNames_if(power_up_states, 84), get_state_if(power_up_states, 84), get_channelNames_if(power_up_states, 85), get_state_if(power_up_states, 85), get_channelNames_if(power_up_states, 86), get_state_if(power_up_states, 86), get_channelNames_if(power_up_states, 87), get_state_if(power_up_states, 87), get_channelNames_if(power_up_states, 88), get_state_if(power_up_states, 88), get_channelNames_if(power_up_states, 89), get_state_if(power_up_states, 89), get_channelNames_if(power_up_states, 90), get_state_if(power_up_states, 90), get_channelNames_if(power_up_states, 91), get_state_if(power_up_states, 91), get_channelNames_if(power_up_states, 92), get_state_if(power_up_states, 92), get_channelNames_if(power_up_states, 93), get_state_if(power_up_states, 93), get_channelNames_if(power_up_states, 94), get_state_if(power_up_states, 94), get_channelNames_if(power_up_states, 95), get_state_if(power_up_states, 95), get_channelNames_if(power_up_states, 96), get_state_if(power_up_states, 96)); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->timeout = timeout; + data->fill_mode = fill_mode; + data->array_size_in_samps = array_size_in_samps; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + data->response.mutable_read_array()->Reserve(request->array_size_in_samps()); + data->response.mutable_read_array()->Resize(request->array_size_in_samps(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadDigitalU32", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetDigitalPullUpPullDownStates(::grpc::ServerContext* context, const SetDigitalPullUpPullDownStatesRequest* request, SetDigitalPullUpPullDownStatesResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - auto get_channelNames_if = [](const google::protobuf::RepeatedPtrField& vector, int n) -> const char* { - if (vector.size() > n) { - return vector[n].channel_names().c_str(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ReadDigitalU8(::grpc::ServerContext* context, const ReadDigitalU8Request* request, ReadDigitalU8Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 fill_mode; + switch (request->fill_mode_enum_case()) { + case nidaqmx_grpc::ReadDigitalU8Request::FillModeEnumCase::kFillMode: { + fill_mode = static_cast(request->fill_mode()); + break; + } + case nidaqmx_grpc::ReadDigitalU8Request::FillModeEnumCase::kFillModeRaw: { + fill_mode = static_cast(request->fill_mode_raw()); + break; + } + case nidaqmx_grpc::ReadDigitalU8Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); + break; + } } - return nullptr; - }; - auto get_state_if = [](const google::protobuf::RepeatedPtrField& vector, int n) -> int32 { - if (vector.size() > n) { - return vector[n].state(); + + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + std::string read_array(array_size_in_samps, '\0'); + int32 samps_per_chan_read {}; + auto status = library_->ReadDigitalU8(task, num_samps_per_chan, timeout, fill_mode, (uInt8*)read_array.data(), array_size_in_samps, &samps_per_chan_read, reserved); + context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); + if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - return 0; - }; - auto pull_up_pull_down_states = request->pull_up_pull_down_states(); - if (pull_up_pull_down_states.size() == 0) { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "No values for pullUpPullDownStates were specified"); - } - if (pull_up_pull_down_states.size() > 96) { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "More than 96 values for pullUpPullDownStates were specified"); + response->set_status(status); + response->set_read_array(read_array); + response->set_samps_per_chan_read(samps_per_chan_read); + return ::grpc::Status::OK; } - - auto status = std::static_pointer_cast(library_)->SetDigitalPullUpPullDownStates(device_name, get_channelNames_if(pull_up_pull_down_states, 0), get_state_if(pull_up_pull_down_states, 0), get_channelNames_if(pull_up_pull_down_states, 1), get_state_if(pull_up_pull_down_states, 1), get_channelNames_if(pull_up_pull_down_states, 2), get_state_if(pull_up_pull_down_states, 2), get_channelNames_if(pull_up_pull_down_states, 3), get_state_if(pull_up_pull_down_states, 3), get_channelNames_if(pull_up_pull_down_states, 4), get_state_if(pull_up_pull_down_states, 4), get_channelNames_if(pull_up_pull_down_states, 5), get_state_if(pull_up_pull_down_states, 5), get_channelNames_if(pull_up_pull_down_states, 6), get_state_if(pull_up_pull_down_states, 6), get_channelNames_if(pull_up_pull_down_states, 7), get_state_if(pull_up_pull_down_states, 7), get_channelNames_if(pull_up_pull_down_states, 8), get_state_if(pull_up_pull_down_states, 8), get_channelNames_if(pull_up_pull_down_states, 9), get_state_if(pull_up_pull_down_states, 9), get_channelNames_if(pull_up_pull_down_states, 10), get_state_if(pull_up_pull_down_states, 10), get_channelNames_if(pull_up_pull_down_states, 11), get_state_if(pull_up_pull_down_states, 11), get_channelNames_if(pull_up_pull_down_states, 12), get_state_if(pull_up_pull_down_states, 12), get_channelNames_if(pull_up_pull_down_states, 13), get_state_if(pull_up_pull_down_states, 13), get_channelNames_if(pull_up_pull_down_states, 14), get_state_if(pull_up_pull_down_states, 14), get_channelNames_if(pull_up_pull_down_states, 15), get_state_if(pull_up_pull_down_states, 15), get_channelNames_if(pull_up_pull_down_states, 16), get_state_if(pull_up_pull_down_states, 16), get_channelNames_if(pull_up_pull_down_states, 17), get_state_if(pull_up_pull_down_states, 17), get_channelNames_if(pull_up_pull_down_states, 18), get_state_if(pull_up_pull_down_states, 18), get_channelNames_if(pull_up_pull_down_states, 19), get_state_if(pull_up_pull_down_states, 19), get_channelNames_if(pull_up_pull_down_states, 20), get_state_if(pull_up_pull_down_states, 20), get_channelNames_if(pull_up_pull_down_states, 21), get_state_if(pull_up_pull_down_states, 21), get_channelNames_if(pull_up_pull_down_states, 22), get_state_if(pull_up_pull_down_states, 22), get_channelNames_if(pull_up_pull_down_states, 23), get_state_if(pull_up_pull_down_states, 23), get_channelNames_if(pull_up_pull_down_states, 24), get_state_if(pull_up_pull_down_states, 24), get_channelNames_if(pull_up_pull_down_states, 25), get_state_if(pull_up_pull_down_states, 25), get_channelNames_if(pull_up_pull_down_states, 26), get_state_if(pull_up_pull_down_states, 26), get_channelNames_if(pull_up_pull_down_states, 27), get_state_if(pull_up_pull_down_states, 27), get_channelNames_if(pull_up_pull_down_states, 28), get_state_if(pull_up_pull_down_states, 28), get_channelNames_if(pull_up_pull_down_states, 29), get_state_if(pull_up_pull_down_states, 29), get_channelNames_if(pull_up_pull_down_states, 30), get_state_if(pull_up_pull_down_states, 30), get_channelNames_if(pull_up_pull_down_states, 31), get_state_if(pull_up_pull_down_states, 31), get_channelNames_if(pull_up_pull_down_states, 32), get_state_if(pull_up_pull_down_states, 32), get_channelNames_if(pull_up_pull_down_states, 33), get_state_if(pull_up_pull_down_states, 33), get_channelNames_if(pull_up_pull_down_states, 34), get_state_if(pull_up_pull_down_states, 34), get_channelNames_if(pull_up_pull_down_states, 35), get_state_if(pull_up_pull_down_states, 35), get_channelNames_if(pull_up_pull_down_states, 36), get_state_if(pull_up_pull_down_states, 36), get_channelNames_if(pull_up_pull_down_states, 37), get_state_if(pull_up_pull_down_states, 37), get_channelNames_if(pull_up_pull_down_states, 38), get_state_if(pull_up_pull_down_states, 38), get_channelNames_if(pull_up_pull_down_states, 39), get_state_if(pull_up_pull_down_states, 39), get_channelNames_if(pull_up_pull_down_states, 40), get_state_if(pull_up_pull_down_states, 40), get_channelNames_if(pull_up_pull_down_states, 41), get_state_if(pull_up_pull_down_states, 41), get_channelNames_if(pull_up_pull_down_states, 42), get_state_if(pull_up_pull_down_states, 42), get_channelNames_if(pull_up_pull_down_states, 43), get_state_if(pull_up_pull_down_states, 43), get_channelNames_if(pull_up_pull_down_states, 44), get_state_if(pull_up_pull_down_states, 44), get_channelNames_if(pull_up_pull_down_states, 45), get_state_if(pull_up_pull_down_states, 45), get_channelNames_if(pull_up_pull_down_states, 46), get_state_if(pull_up_pull_down_states, 46), get_channelNames_if(pull_up_pull_down_states, 47), get_state_if(pull_up_pull_down_states, 47), get_channelNames_if(pull_up_pull_down_states, 48), get_state_if(pull_up_pull_down_states, 48), get_channelNames_if(pull_up_pull_down_states, 49), get_state_if(pull_up_pull_down_states, 49), get_channelNames_if(pull_up_pull_down_states, 50), get_state_if(pull_up_pull_down_states, 50), get_channelNames_if(pull_up_pull_down_states, 51), get_state_if(pull_up_pull_down_states, 51), get_channelNames_if(pull_up_pull_down_states, 52), get_state_if(pull_up_pull_down_states, 52), get_channelNames_if(pull_up_pull_down_states, 53), get_state_if(pull_up_pull_down_states, 53), get_channelNames_if(pull_up_pull_down_states, 54), get_state_if(pull_up_pull_down_states, 54), get_channelNames_if(pull_up_pull_down_states, 55), get_state_if(pull_up_pull_down_states, 55), get_channelNames_if(pull_up_pull_down_states, 56), get_state_if(pull_up_pull_down_states, 56), get_channelNames_if(pull_up_pull_down_states, 57), get_state_if(pull_up_pull_down_states, 57), get_channelNames_if(pull_up_pull_down_states, 58), get_state_if(pull_up_pull_down_states, 58), get_channelNames_if(pull_up_pull_down_states, 59), get_state_if(pull_up_pull_down_states, 59), get_channelNames_if(pull_up_pull_down_states, 60), get_state_if(pull_up_pull_down_states, 60), get_channelNames_if(pull_up_pull_down_states, 61), get_state_if(pull_up_pull_down_states, 61), get_channelNames_if(pull_up_pull_down_states, 62), get_state_if(pull_up_pull_down_states, 62), get_channelNames_if(pull_up_pull_down_states, 63), get_state_if(pull_up_pull_down_states, 63), get_channelNames_if(pull_up_pull_down_states, 64), get_state_if(pull_up_pull_down_states, 64), get_channelNames_if(pull_up_pull_down_states, 65), get_state_if(pull_up_pull_down_states, 65), get_channelNames_if(pull_up_pull_down_states, 66), get_state_if(pull_up_pull_down_states, 66), get_channelNames_if(pull_up_pull_down_states, 67), get_state_if(pull_up_pull_down_states, 67), get_channelNames_if(pull_up_pull_down_states, 68), get_state_if(pull_up_pull_down_states, 68), get_channelNames_if(pull_up_pull_down_states, 69), get_state_if(pull_up_pull_down_states, 69), get_channelNames_if(pull_up_pull_down_states, 70), get_state_if(pull_up_pull_down_states, 70), get_channelNames_if(pull_up_pull_down_states, 71), get_state_if(pull_up_pull_down_states, 71), get_channelNames_if(pull_up_pull_down_states, 72), get_state_if(pull_up_pull_down_states, 72), get_channelNames_if(pull_up_pull_down_states, 73), get_state_if(pull_up_pull_down_states, 73), get_channelNames_if(pull_up_pull_down_states, 74), get_state_if(pull_up_pull_down_states, 74), get_channelNames_if(pull_up_pull_down_states, 75), get_state_if(pull_up_pull_down_states, 75), get_channelNames_if(pull_up_pull_down_states, 76), get_state_if(pull_up_pull_down_states, 76), get_channelNames_if(pull_up_pull_down_states, 77), get_state_if(pull_up_pull_down_states, 77), get_channelNames_if(pull_up_pull_down_states, 78), get_state_if(pull_up_pull_down_states, 78), get_channelNames_if(pull_up_pull_down_states, 79), get_state_if(pull_up_pull_down_states, 79), get_channelNames_if(pull_up_pull_down_states, 80), get_state_if(pull_up_pull_down_states, 80), get_channelNames_if(pull_up_pull_down_states, 81), get_state_if(pull_up_pull_down_states, 81), get_channelNames_if(pull_up_pull_down_states, 82), get_state_if(pull_up_pull_down_states, 82), get_channelNames_if(pull_up_pull_down_states, 83), get_state_if(pull_up_pull_down_states, 83), get_channelNames_if(pull_up_pull_down_states, 84), get_state_if(pull_up_pull_down_states, 84), get_channelNames_if(pull_up_pull_down_states, 85), get_state_if(pull_up_pull_down_states, 85), get_channelNames_if(pull_up_pull_down_states, 86), get_state_if(pull_up_pull_down_states, 86), get_channelNames_if(pull_up_pull_down_states, 87), get_state_if(pull_up_pull_down_states, 87), get_channelNames_if(pull_up_pull_down_states, 88), get_state_if(pull_up_pull_down_states, 88), get_channelNames_if(pull_up_pull_down_states, 89), get_state_if(pull_up_pull_down_states, 89), get_channelNames_if(pull_up_pull_down_states, 90), get_state_if(pull_up_pull_down_states, 90), get_channelNames_if(pull_up_pull_down_states, 91), get_state_if(pull_up_pull_down_states, 91), get_channelNames_if(pull_up_pull_down_states, 92), get_state_if(pull_up_pull_down_states, 92), get_channelNames_if(pull_up_pull_down_states, 93), get_state_if(pull_up_pull_down_states, 93), get_channelNames_if(pull_up_pull_down_states, 94), get_state_if(pull_up_pull_down_states, 94), get_channelNames_if(pull_up_pull_down_states, 95), get_state_if(pull_up_pull_down_states, 95), get_channelNames_if(pull_up_pull_down_states, 96), get_state_if(pull_up_pull_down_states, 96)); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetExportedSignalAttributeBool(::grpc::ServerContext* context, const SetExportedSignalAttributeBoolRequest* request, SetExportedSignalAttributeBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetExportedSignalAttributeBoolRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ExportSignalBoolAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetExportedSignalAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ExportSignalBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetExportedSignalAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginReadDigitalU8(::grpc::ServerContext* context, const BeginReadDigitalU8Request* request, BeginReadDigitalU8Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 fill_mode; + switch (request->fill_mode_enum_case()) { + case nidaqmx_grpc::BeginReadDigitalU8Request::FillModeEnumCase::kFillMode: { + fill_mode = static_cast(request->fill_mode()); + break; + } + case nidaqmx_grpc::BeginReadDigitalU8Request::FillModeEnumCase::kFillModeRaw: { + fill_mode = static_cast(request->fill_mode_raw()); + break; + } + case nidaqmx_grpc::BeginReadDigitalU8Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); + break; + } + } - bool32 value = request->value(); - auto status = library_->SetExportedSignalAttributeBool(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->timeout = timeout; + data->fill_mode = fill_mode; + data->array_size_in_samps = array_size_in_samps; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + data->response.mutable_read_array()->reserve(request->array_size_in_samps()); + data->response.mutable_read_array()->resize(request->array_size_in_samps(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadDigitalU8", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetExportedSignalAttributeDouble(::grpc::ServerContext* context, const SetExportedSignalAttributeDoubleRequest* request, SetExportedSignalAttributeDoubleResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetExportedSignalAttributeDoubleRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ExportSignalDoubleAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetExportedSignalAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ExportSignalDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ReadPowerBinaryI16(::grpc::ServerContext* context, const ReadPowerBinaryI16Request* request, ReadPowerBinaryI16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 fill_mode; + switch (request->fill_mode_enum_case()) { + case nidaqmx_grpc::ReadPowerBinaryI16Request::FillModeEnumCase::kFillMode: { + fill_mode = static_cast(request->fill_mode()); + break; + } + case nidaqmx_grpc::ReadPowerBinaryI16Request::FillModeEnumCase::kFillModeRaw: { + fill_mode = static_cast(request->fill_mode_raw()); + break; + } + case nidaqmx_grpc::ReadPowerBinaryI16Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); + break; + } } - case nidaqmx_grpc::SetExportedSignalAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + std::vector read_array_voltage(array_size_in_samps); + std::vector read_array_current(array_size_in_samps); + int32 samps_per_chan_read {}; + auto status = library_->ReadPowerBinaryI16(task, num_samps_per_chan, timeout, fill_mode, read_array_voltage.data(), read_array_current.data(), array_size_in_samps, &samps_per_chan_read, reserved); + context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); + if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + response->mutable_read_array_voltage()->Clear(); + response->mutable_read_array_voltage()->Reserve(array_size_in_samps); + std::transform( + read_array_voltage.begin(), + read_array_voltage.begin() + array_size_in_samps, + google::protobuf::RepeatedFieldBackInserter(response->mutable_read_array_voltage()), + [&](auto x) { + return x; + }); + response->mutable_read_array_current()->Clear(); + response->mutable_read_array_current()->Reserve(array_size_in_samps); + std::transform( + read_array_current.begin(), + read_array_current.begin() + array_size_in_samps, + google::protobuf::RepeatedFieldBackInserter(response->mutable_read_array_current()), + [&](auto x) { + return x; + }); + response->set_samps_per_chan_read(samps_per_chan_read); + return ::grpc::Status::OK; } - - float64 value = request->value(); - auto status = library_->SetExportedSignalAttributeDouble(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetExportedSignalAttributeInt32(::grpc::ServerContext* context, const SetExportedSignalAttributeInt32Request* request, SetExportedSignalAttributeInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetExportedSignalAttributeInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ExportSignalInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetExportedSignalAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ExportSignalInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetExportedSignalAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginReadPowerBinaryI16(::grpc::ServerContext* context, const BeginReadPowerBinaryI16Request* request, BeginReadPowerBinaryI16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - - int32 value; - switch (request->value_enum_case()) { - case nidaqmx_grpc::SetExportedSignalAttributeInt32Request::ValueEnumCase::kValue: { - value = static_cast(request->value()); - break; - } - case nidaqmx_grpc::SetExportedSignalAttributeInt32Request::ValueEnumCase::kValueRaw: { - value = static_cast(request->value_raw()); - break; - } - case nidaqmx_grpc::SetExportedSignalAttributeInt32Request::ValueEnumCase::VALUE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for value was not specified or out of range"); - break; + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 fill_mode; + switch (request->fill_mode_enum_case()) { + case nidaqmx_grpc::BeginReadPowerBinaryI16Request::FillModeEnumCase::kFillMode: { + fill_mode = static_cast(request->fill_mode()); + break; + } + case nidaqmx_grpc::BeginReadPowerBinaryI16Request::FillModeEnumCase::kFillModeRaw: { + fill_mode = static_cast(request->fill_mode_raw()); + break; + } + case nidaqmx_grpc::BeginReadPowerBinaryI16Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); + break; + } } - } - auto status = library_->SetExportedSignalAttributeInt32(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->timeout = timeout; + data->fill_mode = fill_mode; + data->array_size_in_samps = array_size_in_samps; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + data->response.mutable_read_array_voltage()->Reserve(request->array_size_in_samps()); + data->response.mutable_read_array_voltage()->Resize(request->array_size_in_samps(), 0); + data->response.mutable_read_array_current()->Reserve(request->array_size_in_samps()); + data->response.mutable_read_array_current()->Resize(request->array_size_in_samps(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadPowerBinaryI16", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetExportedSignalAttributeString(::grpc::ServerContext* context, const SetExportedSignalAttributeStringRequest* request, SetExportedSignalAttributeStringResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetExportedSignalAttributeStringRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ExportSignalStringAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetExportedSignalAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ExportSignalStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetExportedSignalAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - auto value_mbcs = convert_from_grpc(request->value()); - auto value = value_mbcs.c_str(); - auto status = library_->SetExportedSignalAttributeString(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetExportedSignalAttributeUInt32(::grpc::ServerContext* context, const SetExportedSignalAttributeUInt32Request* request, SetExportedSignalAttributeUInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetExportedSignalAttributeUInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ExportSignalUInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetExportedSignalAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ExportSignalUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ReadPowerF64(::grpc::ServerContext* context, const ReadPowerF64Request* request, ReadPowerF64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 fill_mode; + switch (request->fill_mode_enum_case()) { + case nidaqmx_grpc::ReadPowerF64Request::FillModeEnumCase::kFillMode: { + fill_mode = static_cast(request->fill_mode()); + break; + } + case nidaqmx_grpc::ReadPowerF64Request::FillModeEnumCase::kFillModeRaw: { + fill_mode = static_cast(request->fill_mode_raw()); + break; + } + case nidaqmx_grpc::ReadPowerF64Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); + break; + } } - case nidaqmx_grpc::SetExportedSignalAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + response->mutable_read_array_voltage()->Resize(array_size_in_samps, 0); + float64* read_array_voltage = response->mutable_read_array_voltage()->mutable_data(); + response->mutable_read_array_current()->Resize(array_size_in_samps, 0); + float64* read_array_current = response->mutable_read_array_current()->mutable_data(); + int32 samps_per_chan_read {}; + auto status = library_->ReadPowerF64(task, num_samps_per_chan, timeout, fill_mode, read_array_voltage, read_array_current, array_size_in_samps, &samps_per_chan_read, reserved); + context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_per_chan_read)); + if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + response->set_samps_per_chan_read(samps_per_chan_read); + return ::grpc::Status::OK; } - - uInt32 value = request->value(); - auto status = library_->SetExportedSignalAttributeUInt32(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetFirstSampClkWhen(::grpc::ServerContext* context, const SetFirstSampClkWhenRequest* request, SetFirstSampClkWhenResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto data = convert_from_grpc(request->data()); - auto status = library_->SetFirstSampClkWhen(task, data); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetReadAttributeBool(::grpc::ServerContext* context, const SetReadAttributeBoolRequest* request, SetReadAttributeBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetReadAttributeBoolRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ReadBoolAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetReadAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ReadBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetReadAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginReadPowerF64(::grpc::ServerContext* context, const BeginReadPowerF64Request* request, BeginReadPowerF64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + int32 fill_mode; + switch (request->fill_mode_enum_case()) { + case nidaqmx_grpc::BeginReadPowerF64Request::FillModeEnumCase::kFillMode: { + fill_mode = static_cast(request->fill_mode()); + break; + } + case nidaqmx_grpc::BeginReadPowerF64Request::FillModeEnumCase::kFillModeRaw: { + fill_mode = static_cast(request->fill_mode_raw()); + break; + } + case nidaqmx_grpc::BeginReadPowerF64Request::FillModeEnumCase::FILL_MODE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for fill_mode was not specified or out of range"); + break; + } + } - bool32 value = request->value(); - auto status = library_->SetReadAttributeBool(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + uInt32 array_size_in_samps = request->array_size_in_samps(); + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->timeout = timeout; + data->fill_mode = fill_mode; + data->array_size_in_samps = array_size_in_samps; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + data->response.mutable_read_array_voltage()->Reserve(request->array_size_in_samps()); + data->response.mutable_read_array_voltage()->Resize(request->array_size_in_samps(), 0); + data->response.mutable_read_array_current()->Reserve(request->array_size_in_samps()); + data->response.mutable_read_array_current()->Resize(request->array_size_in_samps(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadPowerF64", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetReadAttributeDouble(::grpc::ServerContext* context, const SetReadAttributeDoubleRequest* request, SetReadAttributeDoubleResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetReadAttributeDoubleRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ReadDoubleAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetReadAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ReadDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetReadAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ReadPowerScalarF64(::grpc::ServerContext* context, const ReadPowerScalarF64Request* request, ReadPowerScalarF64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + float64 timeout = request->timeout(); + auto reserved = nullptr; + float64 voltage {}; + float64 current {}; + auto status = library_->ReadPowerScalarF64(task, timeout, &voltage, ¤t, reserved); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + response->set_voltage(voltage); + response->set_current(current); + return ::grpc::Status::OK; } - - float64 value = request->value(); - auto status = library_->SetReadAttributeDouble(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetReadAttributeInt32(::grpc::ServerContext* context, const SetReadAttributeInt32Request* request, SetReadAttributeInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetReadAttributeInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ReadInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetReadAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ReadInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetReadAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginReadPowerScalarF64(::grpc::ServerContext* context, const BeginReadPowerScalarF64Request* request, BeginReadPowerScalarF64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + float64 timeout = request->timeout(); + auto reserved = nullptr; - int32 value; - switch (request->value_enum_case()) { - case nidaqmx_grpc::SetReadAttributeInt32Request::ValueEnumCase::kValue: { - value = static_cast(request->value()); - break; - } - case nidaqmx_grpc::SetReadAttributeInt32Request::ValueEnumCase::kValueRaw: { - value = static_cast(request->value_raw()); - break; - } - case nidaqmx_grpc::SetReadAttributeInt32Request::ValueEnumCase::VALUE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for value was not specified or out of range"); - break; - } - } + auto data = std::make_unique(); + data->task = task; + data->timeout = timeout; + data->reserved = reserved; + data->library = std::shared_ptr(library_); - auto status = library_->SetReadAttributeInt32(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadPowerScalarF64", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetReadAttributeString(::grpc::ServerContext* context, const SetReadAttributeStringRequest* request, SetReadAttributeStringResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetReadAttributeStringRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ReadStringAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetReadAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ReadStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetReadAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - auto value_mbcs = convert_from_grpc(request->value()); - auto value = value_mbcs.c_str(); - auto status = library_->SetReadAttributeString(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetReadAttributeUInt32(::grpc::ServerContext* context, const SetReadAttributeUInt32Request* request, SetReadAttributeUInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetReadAttributeUInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ReadUInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetReadAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ReadUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetReadAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ReadRaw(::grpc::ServerContext* context, const ReadRawRequest* request, ReadRawResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + uInt32 array_size_in_bytes = request->array_size_in_bytes(); + auto reserved = nullptr; + std::string read_array(array_size_in_bytes, '\0'); + int32 samps_read {}; + int32 num_bytes_per_samp {}; + auto status = library_->ReadRaw(task, num_samps_per_chan, timeout, (uInt8*)read_array.data(), array_size_in_bytes, &samps_read, &num_bytes_per_samp, reserved); + context->AddTrailingMetadata("ni-samps-per-chan-read", std::to_string(samps_read)); + if (!status_ok(status) && status != DAQmxErrorSamplesNotYetAvailable) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + response->set_read_array(read_array); + response->set_samps_read(samps_read); + response->set_num_bytes_per_samp(num_bytes_per_samp); + return ::grpc::Status::OK; } - - uInt32 value = request->value(); - auto status = library_->SetReadAttributeUInt32(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginReadRaw(::grpc::ServerContext* context, const BeginReadRawRequest* request, BeginReadRawResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + float64 timeout = request->timeout(); + uInt32 array_size_in_bytes = request->array_size_in_bytes(); + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->timeout = timeout; + data->array_size_in_bytes = array_size_in_bytes; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + data->response.mutable_read_array()->reserve(request->array_size_in_bytes()); + data->response.mutable_read_array()->resize(request->array_size_in_bytes(), 0); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerReadRaw", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetReadAttributeUInt64(::grpc::ServerContext* context, const SetReadAttributeUInt64Request* request, SetReadAttributeUInt64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetReadAttributeUInt64Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ReadUInt64Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetReadAttributeUInt64Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ReadUInt64Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetReadAttributeUInt64Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::ServerWriteReactor* + NiDAQmxService::RegisterDoneEvent(::grpc::CallbackServerContext* context, const RegisterDoneEventRequest* request) + { + using CallbackRouter = nidevice_grpc::CallbackRouter; + class RegisterDoneEventReactor : public nidevice_grpc::ServerWriterReactor { + public: + RegisterDoneEventReactor(::grpc::CallbackServerContext* context, const RegisterDoneEventRequest* request, LibrarySharedPtr library, NiDAQmxService* service) + { + auto status = start(context, request, library, service); + if (!status.ok()) { + this->try_finish(std::move(status)); } } - uInt64 value = request->value(); - auto status = library_->SetReadAttributeUInt64(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + ::grpc::Status start(::grpc::CallbackServerContext* context, const RegisterDoneEventRequest* request, LibrarySharedPtr library, NiDAQmxService* service) + { + try { + auto handler = CallbackRouter::register_handler( + [this](TaskHandle task, int32 status) { + RegisterDoneEventResponse callback_response; + auto response = &callback_response; + response->set_status(status); + queue_write(callback_response); + return 0; + }); -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetRealTimeAttributeBool(::grpc::ServerContext* context, const SetRealTimeAttributeBoolRequest* request, SetRealTimeAttributeBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetRealTimeAttributeBoolRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::RealTimeBoolAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetRealTimeAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::RealTimeBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetRealTimeAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } + const auto& session_repository_ = service->session_repository_; + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto options = 0U; - bool32 value = request->value(); - auto status = library_->SetRealTimeAttributeBool(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + auto status = library->RegisterDoneEvent(task, options, CallbackRouter::handle_callback, handler->token()); + if (!status_ok(status)) { + return service->ConvertApiErrorStatusForTaskHandle(context, status, task); + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetRealTimeAttributeInt32(::grpc::ServerContext* context, const SetRealTimeAttributeInt32Request* request, SetRealTimeAttributeInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetRealTimeAttributeInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::RealTimeInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetRealTimeAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::RealTimeInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetRealTimeAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } + // SendInitialMetadata after the driver call so that WaitForInitialMetadata can be used to ensure that calls are serialized. + StartSendInitialMetadata(); - int32 value; - switch (request->value_enum_case()) { - case nidaqmx_grpc::SetRealTimeAttributeInt32Request::ValueEnumCase::kValue: { - value = static_cast(request->value()); - break; - } - case nidaqmx_grpc::SetRealTimeAttributeInt32Request::ValueEnumCase::kValueRaw: { - value = static_cast(request->value_raw()); - break; + this->set_producer(std::move(handler)); } - case nidaqmx_grpc::SetRealTimeAttributeInt32Request::ValueEnumCase::VALUE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for value was not specified or out of range"); - break; + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - } - auto status = library_->SetRealTimeAttributeInt32(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + return ::grpc::Status::OK; } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + }; -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetRealTimeAttributeUInt32(::grpc::ServerContext* context, const SetRealTimeAttributeUInt32Request* request, SetRealTimeAttributeUInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; + return new RegisterDoneEventReactor(context, request, library_, this); } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetRealTimeAttributeUInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::RealTimeUInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetRealTimeAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::RealTimeUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetRealTimeAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::ServerWriteReactor* + NiDAQmxService::RegisterEveryNSamplesEvent(::grpc::CallbackServerContext* context, const RegisterEveryNSamplesEventRequest* request) + { + using CallbackRouter = nidevice_grpc::CallbackRouter; + class RegisterEveryNSamplesEventReactor : public nidevice_grpc::ServerWriterReactor { + public: + RegisterEveryNSamplesEventReactor(::grpc::CallbackServerContext* context, const RegisterEveryNSamplesEventRequest* request, LibrarySharedPtr library, NiDAQmxService* service) + { + auto status = start(context, request, library, service); + if (!status.ok()) { + this->try_finish(std::move(status)); } } - uInt32 value = request->value(); - auto status = library_->SetRealTimeAttributeUInt32(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + ::grpc::Status start(::grpc::CallbackServerContext* context, const RegisterEveryNSamplesEventRequest* request, LibrarySharedPtr library, NiDAQmxService* service) + { + try { + auto handler = CallbackRouter::register_handler( + [this](TaskHandle task, int32 every_n_samples_event_type, uInt32 n_samples) { + RegisterEveryNSamplesEventResponse callback_response; + auto response = &callback_response; + response->set_every_n_samples_event_type(static_cast(every_n_samples_event_type)); + response->set_every_n_samples_event_type_raw(every_n_samples_event_type); + response->set_n_samples(n_samples); + queue_write(callback_response); + return 0; + }); -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetScaleAttributeDouble(::grpc::ServerContext* context, const SetScaleAttributeDoubleRequest* request, SetScaleAttributeDoubleResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto scale_name_mbcs = convert_from_grpc(request->scale_name()); - auto scale_name = scale_name_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetScaleAttributeDoubleRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ScaleDoubleAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetScaleAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ScaleDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetScaleAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } + const auto& session_repository_ = service->session_repository_; + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 every_n_samples_event_type; + switch (request->every_n_samples_event_type_enum_case()) { + case nidaqmx_grpc::RegisterEveryNSamplesEventRequest::EveryNSamplesEventTypeEnumCase::kEveryNSamplesEventType: { + every_n_samples_event_type = static_cast(request->every_n_samples_event_type()); + break; + } + case nidaqmx_grpc::RegisterEveryNSamplesEventRequest::EveryNSamplesEventTypeEnumCase::kEveryNSamplesEventTypeRaw: { + every_n_samples_event_type = static_cast(request->every_n_samples_event_type_raw()); + break; + } + case nidaqmx_grpc::RegisterEveryNSamplesEventRequest::EveryNSamplesEventTypeEnumCase::EVERY_N_SAMPLES_EVENT_TYPE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for every_n_samples_event_type was not specified or out of range"); + break; + } + } - float64 value = request->value(); - auto status = library_->SetScaleAttributeDouble(scale_name, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + uInt32 n_samples = request->n_samples(); + auto options = 0U; -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetScaleAttributeDoubleArray(::grpc::ServerContext* context, const SetScaleAttributeDoubleArrayRequest* request, SetScaleAttributeDoubleArrayResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto scale_name_mbcs = convert_from_grpc(request->scale_name()); - auto scale_name = scale_name_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetScaleAttributeDoubleArrayRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ScaleDoubleArrayAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetScaleAttributeDoubleArrayRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ScaleDoubleArrayAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetScaleAttributeDoubleArrayRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - auto value = const_cast(request->value().data()); - uInt32 size = static_cast(request->value().size()); - auto status = library_->SetScaleAttributeDoubleArray(scale_name, attribute, value, size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + auto status = library->RegisterEveryNSamplesEvent(task, every_n_samples_event_type, n_samples, options, CallbackRouter::handle_callback, handler->token()); + if (!status_ok(status)) { + return service->ConvertApiErrorStatusForTaskHandle(context, status, task); + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetScaleAttributeInt32(::grpc::ServerContext* context, const SetScaleAttributeInt32Request* request, SetScaleAttributeInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto scale_name_mbcs = convert_from_grpc(request->scale_name()); - auto scale_name = scale_name_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetScaleAttributeInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ScaleInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetScaleAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ScaleInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetScaleAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } + // SendInitialMetadata after the driver call so that WaitForInitialMetadata can be used to ensure that calls are serialized. + StartSendInitialMetadata(); - int32 value; - switch (request->value_enum_case()) { - case nidaqmx_grpc::SetScaleAttributeInt32Request::ValueEnumCase::kValue: { - value = static_cast(request->value()); - break; - } - case nidaqmx_grpc::SetScaleAttributeInt32Request::ValueEnumCase::kValueRaw: { - value = static_cast(request->value_raw()); - break; + this->set_producer(std::move(handler)); } - case nidaqmx_grpc::SetScaleAttributeInt32Request::ValueEnumCase::VALUE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for value was not specified or out of range"); - break; + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - } - auto status = library_->SetScaleAttributeInt32(scale_name, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + return ::grpc::Status::OK; } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + }; + + return new RegisterEveryNSamplesEventReactor(context, request, library_, this); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetScaleAttributeString(::grpc::ServerContext* context, const SetScaleAttributeStringRequest* request, SetScaleAttributeStringResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto scale_name_mbcs = convert_from_grpc(request->scale_name()); - auto scale_name = scale_name_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetScaleAttributeStringRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::ScaleStringAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetScaleAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::ScaleStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetScaleAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - auto value_mbcs = convert_from_grpc(request->value()); - auto value = value_mbcs.c_str(); - auto status = library_->SetScaleAttributeString(scale_name, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::ServerWriteReactor* + NiDAQmxService::RegisterSignalEvent(::grpc::CallbackServerContext* context, const RegisterSignalEventRequest* request) + { + using CallbackRouter = nidevice_grpc::CallbackRouter; + class RegisterSignalEventReactor : public nidevice_grpc::ServerWriterReactor { + public: + RegisterSignalEventReactor(::grpc::CallbackServerContext* context, const RegisterSignalEventRequest* request, LibrarySharedPtr library, NiDAQmxService* service) + { + auto status = start(context, request, library, service); + if (!status.ok()) { + this->try_finish(std::move(status)); + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetStartTrigTrigWhen(::grpc::ServerContext* context, const SetStartTrigTrigWhenRequest* request, SetStartTrigTrigWhenResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto data = convert_from_grpc(request->data()); - auto status = library_->SetStartTrigTrigWhen(task, data); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + ::grpc::Status start(::grpc::CallbackServerContext* context, const RegisterSignalEventRequest* request, LibrarySharedPtr library, NiDAQmxService* service) + { + try { + auto handler = CallbackRouter::register_handler( + [this](TaskHandle task, int32 signal_id) { + RegisterSignalEventResponse callback_response; + auto response = &callback_response; + response->set_signal_id(signal_id); + queue_write(callback_response); + return 0; + }); -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetSyncPulseTimeWhen(::grpc::ServerContext* context, const SetSyncPulseTimeWhenRequest* request, SetSyncPulseTimeWhenResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto data = convert_from_grpc(request->data()); - auto status = library_->SetSyncPulseTimeWhen(task, data); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + const auto& session_repository_ = service->session_repository_; + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 signal_id; + switch (request->signal_id_enum_case()) { + case nidaqmx_grpc::RegisterSignalEventRequest::SignalIdEnumCase::kSignalId: { + signal_id = static_cast(request->signal_id()); + break; + } + case nidaqmx_grpc::RegisterSignalEventRequest::SignalIdEnumCase::kSignalIdRaw: { + signal_id = static_cast(request->signal_id_raw()); + break; + } + case nidaqmx_grpc::RegisterSignalEventRequest::SignalIdEnumCase::SIGNAL_ID_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for signal_id was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetTimingAttributeBool(::grpc::ServerContext* context, const SetTimingAttributeBoolRequest* request, SetTimingAttributeBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetTimingAttributeBoolRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TimingBoolAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTimingAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TimingBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTimingAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } + auto options = 0U; - bool32 value = request->value(); - auto status = library_->SetTimingAttributeBool(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + auto status = library->RegisterSignalEvent(task, signal_id, options, CallbackRouter::handle_callback, handler->token()); + if (!status_ok(status)) { + return service->ConvertApiErrorStatusForTaskHandle(context, status, task); + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetTimingAttributeDouble(::grpc::ServerContext* context, const SetTimingAttributeDoubleRequest* request, SetTimingAttributeDoubleResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetTimingAttributeDoubleRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TimingDoubleAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTimingAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TimingDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; + // SendInitialMetadata after the driver call so that WaitForInitialMetadata can be used to ensure that calls are serialized. + StartSendInitialMetadata(); + + this->set_producer(std::move(handler)); } - case nidaqmx_grpc::SetTimingAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - } - float64 value = request->value(); - auto status = library_->SetTimingAttributeDouble(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + return ::grpc::Status::OK; } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetTimingAttributeExBool(::grpc::ServerContext* context, const SetTimingAttributeExBoolRequest* request, SetTimingAttributeExBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto device_names_mbcs = convert_from_grpc(request->device_names()); - auto device_names = device_names_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetTimingAttributeExBoolRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TimingBoolAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTimingAttributeExBoolRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TimingBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTimingAttributeExBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - bool32 value = request->value(); - auto status = library_->SetTimingAttributeExBool(task, device_names, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + }; -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetTimingAttributeExDouble(::grpc::ServerContext* context, const SetTimingAttributeExDoubleRequest* request, SetTimingAttributeExDoubleResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto device_names_mbcs = convert_from_grpc(request->device_names()); - auto device_names = device_names_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetTimingAttributeExDoubleRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TimingDoubleAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTimingAttributeExDoubleRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TimingDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTimingAttributeExDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - float64 value = request->value(); - auto status = library_->SetTimingAttributeExDouble(task, device_names, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; + return new RegisterSignalEventReactor(context, request, library_, this); } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetTimingAttributeExInt32(::grpc::ServerContext* context, const SetTimingAttributeExInt32Request* request, SetTimingAttributeExInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto device_names_mbcs = convert_from_grpc(request->device_names()); - auto device_names = device_names_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetTimingAttributeExInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TimingInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTimingAttributeExInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TimingInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTimingAttributeExInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::RemoveCDAQSyncConnection(::grpc::ServerContext* context, const RemoveCDAQSyncConnectionRequest* request, RemoveCDAQSyncConnectionResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - - int32 value; - switch (request->value_enum_case()) { - case nidaqmx_grpc::SetTimingAttributeExInt32Request::ValueEnumCase::kValue: { - value = static_cast(request->value()); - break; - } - case nidaqmx_grpc::SetTimingAttributeExInt32Request::ValueEnumCase::kValueRaw: { - value = static_cast(request->value_raw()); - break; - } - case nidaqmx_grpc::SetTimingAttributeExInt32Request::ValueEnumCase::VALUE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for value was not specified or out of range"); - break; + try { + auto port_list_mbcs = convert_from_grpc(request->port_list()); + auto port_list = port_list_mbcs.c_str(); + auto status = library_->RemoveCDAQSyncConnection(port_list); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } + response->set_status(status); + return ::grpc::Status::OK; } - - auto status = library_->SetTimingAttributeExInt32(task, device_names, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetTimingAttributeExString(::grpc::ServerContext* context, const SetTimingAttributeExStringRequest* request, SetTimingAttributeExStringResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto device_names_mbcs = convert_from_grpc(request->device_names()); - auto device_names = device_names_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetTimingAttributeExStringRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TimingStringAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTimingAttributeExStringRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TimingStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTimingAttributeExStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - auto value_mbcs = convert_from_grpc(request->value()); - auto value = value_mbcs.c_str(); - auto status = library_->SetTimingAttributeExString(task, device_names, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetTimingAttributeExTimestamp(::grpc::ServerContext* context, const SetTimingAttributeExTimestampRequest* request, SetTimingAttributeExTimestampResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto device_names_mbcs = convert_from_grpc(request->device_names()); - auto device_names = device_names_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetTimingAttributeExTimestampRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TimingTimestampAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTimingAttributeExTimestampRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TimingTimestampAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTimingAttributeExTimestampRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - auto value = convert_from_grpc(request->value()); - auto status = library_->SetTimingAttributeExTimestamp(task, device_names, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetTimingAttributeExUInt32(::grpc::ServerContext* context, const SetTimingAttributeExUInt32Request* request, SetTimingAttributeExUInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto device_names_mbcs = convert_from_grpc(request->device_names()); - auto device_names = device_names_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetTimingAttributeExUInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TimingUInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTimingAttributeExUInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TimingUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTimingAttributeExUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - uInt32 value = request->value(); - auto status = library_->SetTimingAttributeExUInt32(task, device_names, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetTimingAttributeExUInt64(::grpc::ServerContext* context, const SetTimingAttributeExUInt64Request* request, SetTimingAttributeExUInt64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto device_names_mbcs = convert_from_grpc(request->device_names()); - auto device_names = device_names_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetTimingAttributeExUInt64Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TimingUInt64Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTimingAttributeExUInt64Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TimingUInt64Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTimingAttributeExUInt64Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - uInt64 value = request->value(); - auto status = library_->SetTimingAttributeExUInt64(task, device_names, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ReserveNetworkDevice(::grpc::ServerContext* context, const ReserveNetworkDeviceRequest* request, ReserveNetworkDeviceResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + bool32 override_reservation = request->override_reservation(); + auto status = library_->ReserveNetworkDevice(device_name, override_reservation); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetTimingAttributeInt32(::grpc::ServerContext* context, const SetTimingAttributeInt32Request* request, SetTimingAttributeInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetTimingAttributeInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TimingInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTimingAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TimingInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTimingAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ResetBufferAttribute(::grpc::ServerContext* context, const ResetBufferAttributeRequest* request, ResetBufferAttributeResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::ResetBufferAttributeRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::BufferResetAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::ResetBufferAttributeRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::BufferResetAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::ResetBufferAttributeRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } - int32 value; - switch (request->value_enum_case()) { - case nidaqmx_grpc::SetTimingAttributeInt32Request::ValueEnumCase::kValue: { - value = static_cast(request->value()); - break; + auto status = library_->ResetBufferAttribute(task, attribute); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - case nidaqmx_grpc::SetTimingAttributeInt32Request::ValueEnumCase::kValueRaw: { - value = static_cast(request->value_raw()); - break; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ResetChanAttribute(::grpc::ServerContext* context, const ResetChanAttributeRequest* request, ResetChanAttributeResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto channel_mbcs = convert_from_grpc(request->channel()); + auto channel = channel_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::ResetChanAttributeRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ChannelResetAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::ResetChanAttributeRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ChannelResetAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::ResetChanAttributeRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::SetTimingAttributeInt32Request::ValueEnumCase::VALUE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for value was not specified or out of range"); - break; + + auto status = library_->ResetChanAttribute(task, channel, attribute); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - auto status = library_->SetTimingAttributeInt32(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetTimingAttributeString(::grpc::ServerContext* context, const SetTimingAttributeStringRequest* request, SetTimingAttributeStringResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetTimingAttributeStringRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TimingStringAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTimingAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TimingStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTimingAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - auto value_mbcs = convert_from_grpc(request->value()); - auto value = value_mbcs.c_str(); - auto status = library_->SetTimingAttributeString(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetTimingAttributeTimestamp(::grpc::ServerContext* context, const SetTimingAttributeTimestampRequest* request, SetTimingAttributeTimestampResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetTimingAttributeTimestampRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TimingTimestampAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTimingAttributeTimestampRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TimingTimestampAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTimingAttributeTimestampRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ResetDevice(::grpc::ServerContext* context, const ResetDeviceRequest* request, ResetDeviceResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + auto status = library_->ResetDevice(device_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } + response->set_status(status); + return ::grpc::Status::OK; } - - auto value = convert_from_grpc(request->value()); - auto status = library_->SetTimingAttributeTimestamp(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetTimingAttributeUInt32(::grpc::ServerContext* context, const SetTimingAttributeUInt32Request* request, SetTimingAttributeUInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetTimingAttributeUInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TimingUInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTimingAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TimingUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ResetExportedSignalAttribute(::grpc::ServerContext* context, const ResetExportedSignalAttributeRequest* request, ResetExportedSignalAttributeResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::ResetExportedSignalAttributeRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ExportSignalResetAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::ResetExportedSignalAttributeRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ExportSignalResetAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::ResetExportedSignalAttributeRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::SetTimingAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + auto status = library_->ResetExportedSignalAttribute(task, attribute); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - uInt32 value = request->value(); - auto status = library_->SetTimingAttributeUInt32(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetTimingAttributeUInt64(::grpc::ServerContext* context, const SetTimingAttributeUInt64Request* request, SetTimingAttributeUInt64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetTimingAttributeUInt64Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TimingUInt64Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTimingAttributeUInt64Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TimingUInt64Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ResetReadAttribute(::grpc::ServerContext* context, const ResetReadAttributeRequest* request, ResetReadAttributeResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::ResetReadAttributeRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ReadResetAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::ResetReadAttributeRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ReadResetAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::ResetReadAttributeRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::SetTimingAttributeUInt64Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + auto status = library_->ResetReadAttribute(task, attribute); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - uInt64 value = request->value(); - auto status = library_->SetTimingAttributeUInt64(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetTrigAttributeBool(::grpc::ServerContext* context, const SetTrigAttributeBoolRequest* request, SetTrigAttributeBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetTrigAttributeBoolRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TriggerBoolAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTrigAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TriggerBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ResetRealTimeAttribute(::grpc::ServerContext* context, const ResetRealTimeAttributeRequest* request, ResetRealTimeAttributeResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::ResetRealTimeAttributeRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::RealTimeResetAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::ResetRealTimeAttributeRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::RealTimeResetAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::ResetRealTimeAttributeRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::SetTrigAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + auto status = library_->ResetRealTimeAttribute(task, attribute); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - bool32 value = request->value(); - auto status = library_->SetTrigAttributeBool(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetTrigAttributeDouble(::grpc::ServerContext* context, const SetTrigAttributeDoubleRequest* request, SetTrigAttributeDoubleResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetTrigAttributeDoubleRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TriggerDoubleAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTrigAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TriggerDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTrigAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - float64 value = request->value(); - auto status = library_->SetTrigAttributeDouble(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ResetTimingAttribute(::grpc::ServerContext* context, const ResetTimingAttributeRequest* request, ResetTimingAttributeResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetTrigAttributeDoubleArray(::grpc::ServerContext* context, const SetTrigAttributeDoubleArrayRequest* request, SetTrigAttributeDoubleArrayResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetTrigAttributeDoubleArrayRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TriggerDoubleArrayAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTrigAttributeDoubleArrayRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TriggerDoubleArrayAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTrigAttributeDoubleArrayRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - auto value = const_cast(request->value().data()); - uInt32 size = static_cast(request->value().size()); - auto status = library_->SetTrigAttributeDoubleArray(task, attribute, value, size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetTrigAttributeInt32(::grpc::ServerContext* context, const SetTrigAttributeInt32Request* request, SetTrigAttributeInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetTrigAttributeInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TriggerInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTrigAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TriggerInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTrigAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::ResetTimingAttributeRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TimingResetAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::ResetTimingAttributeRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TimingResetAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::ResetTimingAttributeRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - } - int32 value; - switch (request->value_enum_case()) { - case nidaqmx_grpc::SetTrigAttributeInt32Request::ValueEnumCase::kValue: { - value = static_cast(request->value()); - break; + auto status = library_->ResetTimingAttribute(task, attribute); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - case nidaqmx_grpc::SetTrigAttributeInt32Request::ValueEnumCase::kValueRaw: { - value = static_cast(request->value_raw()); - break; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ResetTimingAttributeEx(::grpc::ServerContext* context, const ResetTimingAttributeExRequest* request, ResetTimingAttributeExResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto device_names_mbcs = convert_from_grpc(request->device_names()); + auto device_names = device_names_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::ResetTimingAttributeExRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TimingResetAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::ResetTimingAttributeExRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TimingResetAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::ResetTimingAttributeExRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::SetTrigAttributeInt32Request::ValueEnumCase::VALUE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for value was not specified or out of range"); - break; + + auto status = library_->ResetTimingAttributeEx(task, device_names, attribute); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - auto status = library_->SetTrigAttributeInt32(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetTrigAttributeInt32Array(::grpc::ServerContext* context, const SetTrigAttributeInt32ArrayRequest* request, SetTrigAttributeInt32ArrayResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetTrigAttributeInt32ArrayRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TriggerInt32ArrayAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTrigAttributeInt32ArrayRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TriggerInt32ArrayAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTrigAttributeInt32ArrayRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - auto value = reinterpret_cast(request->value().data()); - uInt32 size = static_cast(request->value().size()); - auto status = library_->SetTrigAttributeInt32Array(task, attribute, value, size); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetTrigAttributeString(::grpc::ServerContext* context, const SetTrigAttributeStringRequest* request, SetTrigAttributeStringResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetTrigAttributeStringRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TriggerStringAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTrigAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TriggerStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTrigAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - auto value_mbcs = convert_from_grpc(request->value()); - auto value = value_mbcs.c_str(); - auto status = library_->SetTrigAttributeString(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ResetTrigAttribute(::grpc::ServerContext* context, const ResetTrigAttributeRequest* request, ResetTrigAttributeResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::ResetTrigAttributeRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TriggerResetAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::ResetTrigAttributeRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TriggerResetAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::ResetTrigAttributeRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetTrigAttributeTimestamp(::grpc::ServerContext* context, const SetTrigAttributeTimestampRequest* request, SetTrigAttributeTimestampResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetTrigAttributeTimestampRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TriggerTimestampAttribute_IsValid(attribute) ? attribute : 0; - break; + auto status = library_->ResetTrigAttribute(task, attribute); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - case nidaqmx_grpc::SetTrigAttributeTimestampRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TriggerTimestampAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ResetWatchdogAttribute(::grpc::ServerContext* context, const ResetWatchdogAttributeRequest* request, ResetWatchdogAttributeResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto lines_mbcs = convert_from_grpc(request->lines()); + auto lines = lines_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::ResetWatchdogAttributeRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::WatchdogResetAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::ResetWatchdogAttributeRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::WatchdogResetAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::ResetWatchdogAttributeRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::SetTrigAttributeTimestampRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + auto status = library_->ResetWatchdogAttribute(task, lines, attribute); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - auto value = convert_from_grpc(request->value()); - auto status = library_->SetTrigAttributeTimestamp(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetTrigAttributeUInt32(::grpc::ServerContext* context, const SetTrigAttributeUInt32Request* request, SetTrigAttributeUInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetTrigAttributeUInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::TriggerUInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetTrigAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::TriggerUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::ResetWriteAttribute(::grpc::ServerContext* context, const ResetWriteAttributeRequest* request, ResetWriteAttributeResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::ResetWriteAttributeRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::WriteResetAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::ResetWriteAttributeRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::WriteResetAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::ResetWriteAttributeRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::SetTrigAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + auto status = library_->ResetWriteAttribute(task, attribute); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - uInt32 value = request->value(); - auto status = library_->SetTrigAttributeUInt32(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetWatchdogAttributeBool(::grpc::ServerContext* context, const SetWatchdogAttributeBoolRequest* request, SetWatchdogAttributeBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto lines_mbcs = convert_from_grpc(request->lines()); - auto lines = lines_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetWatchdogAttributeBoolRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::WatchdogBoolAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetWatchdogAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::WatchdogBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetWatchdogAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - bool32 value = request->value(); - auto status = library_->SetWatchdogAttributeBool(task, lines, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetWatchdogAttributeDouble(::grpc::ServerContext* context, const SetWatchdogAttributeDoubleRequest* request, SetWatchdogAttributeDoubleResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto lines_mbcs = convert_from_grpc(request->lines()); - auto lines = lines_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetWatchdogAttributeDoubleRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::WatchdogDoubleAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetWatchdogAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::WatchdogDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetWatchdogAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - float64 value = request->value(); - auto status = library_->SetWatchdogAttributeDouble(task, lines, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetWatchdogAttributeInt32(::grpc::ServerContext* context, const SetWatchdogAttributeInt32Request* request, SetWatchdogAttributeInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto lines_mbcs = convert_from_grpc(request->lines()); - auto lines = lines_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetWatchdogAttributeInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::WatchdogInt32Attribute_IsValid(attribute) ? attribute : 0; - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::RestoreLastExtCalConst(::grpc::ServerContext* context, const RestoreLastExtCalConstRequest* request, RestoreLastExtCalConstResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + auto status = library_->RestoreLastExtCalConst(device_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } - case nidaqmx_grpc::SetWatchdogAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::WatchdogInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SaveGlobalChan(::grpc::ServerContext* context, const SaveGlobalChanRequest* request, SaveGlobalChanResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto channel_name_mbcs = convert_from_grpc(request->channel_name()); + auto channel_name = channel_name_mbcs.c_str(); + auto save_as_mbcs = convert_from_grpc(request->save_as()); + auto save_as = save_as_mbcs.c_str(); + auto author_mbcs = convert_from_grpc(request->author()); + auto author = author_mbcs.c_str(); + uInt32 options; + switch (request->options_enum_case()) { + case nidaqmx_grpc::SaveGlobalChanRequest::OptionsEnumCase::kOptions: { + options = static_cast(request->options()); + break; + } + case nidaqmx_grpc::SaveGlobalChanRequest::OptionsEnumCase::kOptionsRaw: { + options = static_cast(request->options_raw()); + break; + } + case nidaqmx_grpc::SaveGlobalChanRequest::OptionsEnumCase::OPTIONS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for options was not specified or out of range"); + break; + } } - case nidaqmx_grpc::SetWatchdogAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + auto status = library_->SaveGlobalChan(task, channel_name, save_as, author, options); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SaveScale(::grpc::ServerContext* context, const SaveScaleRequest* request, SaveScaleResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto scale_name_mbcs = convert_from_grpc(request->scale_name()); + auto scale_name = scale_name_mbcs.c_str(); + auto save_as_mbcs = convert_from_grpc(request->save_as()); + auto save_as = save_as_mbcs.c_str(); + auto author_mbcs = convert_from_grpc(request->author()); + auto author = author_mbcs.c_str(); + uInt32 options; + switch (request->options_enum_case()) { + case nidaqmx_grpc::SaveScaleRequest::OptionsEnumCase::kOptions: { + options = static_cast(request->options()); + break; + } + case nidaqmx_grpc::SaveScaleRequest::OptionsEnumCase::kOptionsRaw: { + options = static_cast(request->options_raw()); + break; + } + case nidaqmx_grpc::SaveScaleRequest::OptionsEnumCase::OPTIONS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for options was not specified or out of range"); + break; + } + } - int32 value; - switch (request->value_enum_case()) { - case nidaqmx_grpc::SetWatchdogAttributeInt32Request::ValueEnumCase::kValue: { - value = static_cast(request->value()); - break; + auto status = library_->SaveScale(scale_name, save_as, author, options); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } - case nidaqmx_grpc::SetWatchdogAttributeInt32Request::ValueEnumCase::kValueRaw: { - value = static_cast(request->value_raw()); - break; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SaveTask(::grpc::ServerContext* context, const SaveTaskRequest* request, SaveTaskResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto save_as_mbcs = convert_from_grpc(request->save_as()); + auto save_as = save_as_mbcs.c_str(); + auto author_mbcs = convert_from_grpc(request->author()); + auto author = author_mbcs.c_str(); + uInt32 options; + switch (request->options_enum_case()) { + case nidaqmx_grpc::SaveTaskRequest::OptionsEnumCase::kOptions: { + options = static_cast(request->options()); + break; + } + case nidaqmx_grpc::SaveTaskRequest::OptionsEnumCase::kOptionsRaw: { + options = static_cast(request->options_raw()); + break; + } + case nidaqmx_grpc::SaveTaskRequest::OptionsEnumCase::OPTIONS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for options was not specified or out of range"); + break; + } } - case nidaqmx_grpc::SetWatchdogAttributeInt32Request::ValueEnumCase::VALUE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for value was not specified or out of range"); - break; + + auto status = library_->SaveTask(task, save_as, author, options); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - auto status = library_->SetWatchdogAttributeInt32(task, lines, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetWatchdogAttributeString(::grpc::ServerContext* context, const SetWatchdogAttributeStringRequest* request, SetWatchdogAttributeStringResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto lines_mbcs = convert_from_grpc(request->lines()); - auto lines = lines_mbcs.c_str(); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetWatchdogAttributeStringRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::WatchdogStringAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetWatchdogAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::WatchdogStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetWatchdogAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - auto value_mbcs = convert_from_grpc(request->value()); - auto value = value_mbcs.c_str(); - auto status = library_->SetWatchdogAttributeString(task, lines, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SelfCal(::grpc::ServerContext* context, const SelfCalRequest* request, SelfCalResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + auto status = library_->SelfCal(device_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetWriteAttributeBool(::grpc::ServerContext* context, const SetWriteAttributeBoolRequest* request, SetWriteAttributeBoolResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetWriteAttributeBoolRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::WriteBoolAttribute_IsValid(attribute) ? attribute : 0; - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SelfTestDevice(::grpc::ServerContext* context, const SelfTestDeviceRequest* request, SelfTestDeviceResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + auto status = library_->SelfTestDevice(device_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } - case nidaqmx_grpc::SetWriteAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::WriteBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetAIChanCalCalDate(::grpc::ServerContext* context, const SetAIChanCalCalDateRequest* request, SetAIChanCalCalDateResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto channel_name_mbcs = convert_from_grpc(request->channel_name()); + auto channel_name = channel_name_mbcs.c_str(); + uInt32 year = request->year(); + uInt32 month = request->month(); + uInt32 day = request->day(); + uInt32 hour = request->hour(); + uInt32 minute = request->minute(); + auto status = library_->SetAIChanCalCalDate(task, channel_name, year, month, day, hour, minute); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - case nidaqmx_grpc::SetWriteAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetAIChanCalExpDate(::grpc::ServerContext* context, const SetAIChanCalExpDateRequest* request, SetAIChanCalExpDateResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto channel_name_mbcs = convert_from_grpc(request->channel_name()); + auto channel_name = channel_name_mbcs.c_str(); + uInt32 year = request->year(); + uInt32 month = request->month(); + uInt32 day = request->day(); + uInt32 hour = request->hour(); + uInt32 minute = request->minute(); + auto status = library_->SetAIChanCalExpDate(task, channel_name, year, month, day, hour, minute); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } - - bool32 value = request->value(); - auto status = library_->SetWriteAttributeBool(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetWriteAttributeDouble(::grpc::ServerContext* context, const SetWriteAttributeDoubleRequest* request, SetWriteAttributeDoubleResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetWriteAttributeDoubleRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::WriteDoubleAttribute_IsValid(attribute) ? attribute : 0; - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetAnalogPowerUpStates(::grpc::ServerContext* context, const SetAnalogPowerUpStatesRequest* request, SetAnalogPowerUpStatesResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + auto get_channelNames_if = [](const google::protobuf::RepeatedPtrField& vector, int n) -> const char* { + if (vector.size() > n) { + return vector[n].channel_names().c_str(); + } + return nullptr; + }; + auto get_state_if = [](const google::protobuf::RepeatedPtrField& vector, int n) -> float64 { + if (vector.size() > n) { + return vector[n].state(); + } + return 0; + }; + auto get_channelType_if = [](const google::protobuf::RepeatedPtrField& vector, int n) -> int32 { + if (vector.size() > n) { + return vector[n].channel_type(); + } + return 0; + }; + auto power_up_states = request->power_up_states(); + if (power_up_states.size() == 0) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "No values for powerUpStates were specified"); } - case nidaqmx_grpc::SetWriteAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::WriteDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; + if (power_up_states.size() > 96) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "More than 96 values for powerUpStates were specified"); } - case nidaqmx_grpc::SetWriteAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + auto status = std::static_pointer_cast(library_)->SetAnalogPowerUpStates(device_name, get_channelNames_if(power_up_states, 0), get_state_if(power_up_states, 0), get_channelType_if(power_up_states, 0), get_channelNames_if(power_up_states, 1), get_state_if(power_up_states, 1), get_channelType_if(power_up_states, 1), get_channelNames_if(power_up_states, 2), get_state_if(power_up_states, 2), get_channelType_if(power_up_states, 2), get_channelNames_if(power_up_states, 3), get_state_if(power_up_states, 3), get_channelType_if(power_up_states, 3), get_channelNames_if(power_up_states, 4), get_state_if(power_up_states, 4), get_channelType_if(power_up_states, 4), get_channelNames_if(power_up_states, 5), get_state_if(power_up_states, 5), get_channelType_if(power_up_states, 5), get_channelNames_if(power_up_states, 6), get_state_if(power_up_states, 6), get_channelType_if(power_up_states, 6), get_channelNames_if(power_up_states, 7), get_state_if(power_up_states, 7), get_channelType_if(power_up_states, 7), get_channelNames_if(power_up_states, 8), get_state_if(power_up_states, 8), get_channelType_if(power_up_states, 8), get_channelNames_if(power_up_states, 9), get_state_if(power_up_states, 9), get_channelType_if(power_up_states, 9), get_channelNames_if(power_up_states, 10), get_state_if(power_up_states, 10), get_channelType_if(power_up_states, 10), get_channelNames_if(power_up_states, 11), get_state_if(power_up_states, 11), get_channelType_if(power_up_states, 11), get_channelNames_if(power_up_states, 12), get_state_if(power_up_states, 12), get_channelType_if(power_up_states, 12), get_channelNames_if(power_up_states, 13), get_state_if(power_up_states, 13), get_channelType_if(power_up_states, 13), get_channelNames_if(power_up_states, 14), get_state_if(power_up_states, 14), get_channelType_if(power_up_states, 14), get_channelNames_if(power_up_states, 15), get_state_if(power_up_states, 15), get_channelType_if(power_up_states, 15), get_channelNames_if(power_up_states, 16), get_state_if(power_up_states, 16), get_channelType_if(power_up_states, 16), get_channelNames_if(power_up_states, 17), get_state_if(power_up_states, 17), get_channelType_if(power_up_states, 17), get_channelNames_if(power_up_states, 18), get_state_if(power_up_states, 18), get_channelType_if(power_up_states, 18), get_channelNames_if(power_up_states, 19), get_state_if(power_up_states, 19), get_channelType_if(power_up_states, 19), get_channelNames_if(power_up_states, 20), get_state_if(power_up_states, 20), get_channelType_if(power_up_states, 20), get_channelNames_if(power_up_states, 21), get_state_if(power_up_states, 21), get_channelType_if(power_up_states, 21), get_channelNames_if(power_up_states, 22), get_state_if(power_up_states, 22), get_channelType_if(power_up_states, 22), get_channelNames_if(power_up_states, 23), get_state_if(power_up_states, 23), get_channelType_if(power_up_states, 23), get_channelNames_if(power_up_states, 24), get_state_if(power_up_states, 24), get_channelType_if(power_up_states, 24), get_channelNames_if(power_up_states, 25), get_state_if(power_up_states, 25), get_channelType_if(power_up_states, 25), get_channelNames_if(power_up_states, 26), get_state_if(power_up_states, 26), get_channelType_if(power_up_states, 26), get_channelNames_if(power_up_states, 27), get_state_if(power_up_states, 27), get_channelType_if(power_up_states, 27), get_channelNames_if(power_up_states, 28), get_state_if(power_up_states, 28), get_channelType_if(power_up_states, 28), get_channelNames_if(power_up_states, 29), get_state_if(power_up_states, 29), get_channelType_if(power_up_states, 29), get_channelNames_if(power_up_states, 30), get_state_if(power_up_states, 30), get_channelType_if(power_up_states, 30), get_channelNames_if(power_up_states, 31), get_state_if(power_up_states, 31), get_channelType_if(power_up_states, 31), get_channelNames_if(power_up_states, 32), get_state_if(power_up_states, 32), get_channelType_if(power_up_states, 32), get_channelNames_if(power_up_states, 33), get_state_if(power_up_states, 33), get_channelType_if(power_up_states, 33), get_channelNames_if(power_up_states, 34), get_state_if(power_up_states, 34), get_channelType_if(power_up_states, 34), get_channelNames_if(power_up_states, 35), get_state_if(power_up_states, 35), get_channelType_if(power_up_states, 35), get_channelNames_if(power_up_states, 36), get_state_if(power_up_states, 36), get_channelType_if(power_up_states, 36), get_channelNames_if(power_up_states, 37), get_state_if(power_up_states, 37), get_channelType_if(power_up_states, 37), get_channelNames_if(power_up_states, 38), get_state_if(power_up_states, 38), get_channelType_if(power_up_states, 38), get_channelNames_if(power_up_states, 39), get_state_if(power_up_states, 39), get_channelType_if(power_up_states, 39), get_channelNames_if(power_up_states, 40), get_state_if(power_up_states, 40), get_channelType_if(power_up_states, 40), get_channelNames_if(power_up_states, 41), get_state_if(power_up_states, 41), get_channelType_if(power_up_states, 41), get_channelNames_if(power_up_states, 42), get_state_if(power_up_states, 42), get_channelType_if(power_up_states, 42), get_channelNames_if(power_up_states, 43), get_state_if(power_up_states, 43), get_channelType_if(power_up_states, 43), get_channelNames_if(power_up_states, 44), get_state_if(power_up_states, 44), get_channelType_if(power_up_states, 44), get_channelNames_if(power_up_states, 45), get_state_if(power_up_states, 45), get_channelType_if(power_up_states, 45), get_channelNames_if(power_up_states, 46), get_state_if(power_up_states, 46), get_channelType_if(power_up_states, 46), get_channelNames_if(power_up_states, 47), get_state_if(power_up_states, 47), get_channelType_if(power_up_states, 47), get_channelNames_if(power_up_states, 48), get_state_if(power_up_states, 48), get_channelType_if(power_up_states, 48), get_channelNames_if(power_up_states, 49), get_state_if(power_up_states, 49), get_channelType_if(power_up_states, 49), get_channelNames_if(power_up_states, 50), get_state_if(power_up_states, 50), get_channelType_if(power_up_states, 50), get_channelNames_if(power_up_states, 51), get_state_if(power_up_states, 51), get_channelType_if(power_up_states, 51), get_channelNames_if(power_up_states, 52), get_state_if(power_up_states, 52), get_channelType_if(power_up_states, 52), get_channelNames_if(power_up_states, 53), get_state_if(power_up_states, 53), get_channelType_if(power_up_states, 53), get_channelNames_if(power_up_states, 54), get_state_if(power_up_states, 54), get_channelType_if(power_up_states, 54), get_channelNames_if(power_up_states, 55), get_state_if(power_up_states, 55), get_channelType_if(power_up_states, 55), get_channelNames_if(power_up_states, 56), get_state_if(power_up_states, 56), get_channelType_if(power_up_states, 56), get_channelNames_if(power_up_states, 57), get_state_if(power_up_states, 57), get_channelType_if(power_up_states, 57), get_channelNames_if(power_up_states, 58), get_state_if(power_up_states, 58), get_channelType_if(power_up_states, 58), get_channelNames_if(power_up_states, 59), get_state_if(power_up_states, 59), get_channelType_if(power_up_states, 59), get_channelNames_if(power_up_states, 60), get_state_if(power_up_states, 60), get_channelType_if(power_up_states, 60), get_channelNames_if(power_up_states, 61), get_state_if(power_up_states, 61), get_channelType_if(power_up_states, 61), get_channelNames_if(power_up_states, 62), get_state_if(power_up_states, 62), get_channelType_if(power_up_states, 62), get_channelNames_if(power_up_states, 63), get_state_if(power_up_states, 63), get_channelType_if(power_up_states, 63), get_channelNames_if(power_up_states, 64), get_state_if(power_up_states, 64), get_channelType_if(power_up_states, 64), get_channelNames_if(power_up_states, 65), get_state_if(power_up_states, 65), get_channelType_if(power_up_states, 65), get_channelNames_if(power_up_states, 66), get_state_if(power_up_states, 66), get_channelType_if(power_up_states, 66), get_channelNames_if(power_up_states, 67), get_state_if(power_up_states, 67), get_channelType_if(power_up_states, 67), get_channelNames_if(power_up_states, 68), get_state_if(power_up_states, 68), get_channelType_if(power_up_states, 68), get_channelNames_if(power_up_states, 69), get_state_if(power_up_states, 69), get_channelType_if(power_up_states, 69), get_channelNames_if(power_up_states, 70), get_state_if(power_up_states, 70), get_channelType_if(power_up_states, 70), get_channelNames_if(power_up_states, 71), get_state_if(power_up_states, 71), get_channelType_if(power_up_states, 71), get_channelNames_if(power_up_states, 72), get_state_if(power_up_states, 72), get_channelType_if(power_up_states, 72), get_channelNames_if(power_up_states, 73), get_state_if(power_up_states, 73), get_channelType_if(power_up_states, 73), get_channelNames_if(power_up_states, 74), get_state_if(power_up_states, 74), get_channelType_if(power_up_states, 74), get_channelNames_if(power_up_states, 75), get_state_if(power_up_states, 75), get_channelType_if(power_up_states, 75), get_channelNames_if(power_up_states, 76), get_state_if(power_up_states, 76), get_channelType_if(power_up_states, 76), get_channelNames_if(power_up_states, 77), get_state_if(power_up_states, 77), get_channelType_if(power_up_states, 77), get_channelNames_if(power_up_states, 78), get_state_if(power_up_states, 78), get_channelType_if(power_up_states, 78), get_channelNames_if(power_up_states, 79), get_state_if(power_up_states, 79), get_channelType_if(power_up_states, 79), get_channelNames_if(power_up_states, 80), get_state_if(power_up_states, 80), get_channelType_if(power_up_states, 80), get_channelNames_if(power_up_states, 81), get_state_if(power_up_states, 81), get_channelType_if(power_up_states, 81), get_channelNames_if(power_up_states, 82), get_state_if(power_up_states, 82), get_channelType_if(power_up_states, 82), get_channelNames_if(power_up_states, 83), get_state_if(power_up_states, 83), get_channelType_if(power_up_states, 83), get_channelNames_if(power_up_states, 84), get_state_if(power_up_states, 84), get_channelType_if(power_up_states, 84), get_channelNames_if(power_up_states, 85), get_state_if(power_up_states, 85), get_channelType_if(power_up_states, 85), get_channelNames_if(power_up_states, 86), get_state_if(power_up_states, 86), get_channelType_if(power_up_states, 86), get_channelNames_if(power_up_states, 87), get_state_if(power_up_states, 87), get_channelType_if(power_up_states, 87), get_channelNames_if(power_up_states, 88), get_state_if(power_up_states, 88), get_channelType_if(power_up_states, 88), get_channelNames_if(power_up_states, 89), get_state_if(power_up_states, 89), get_channelType_if(power_up_states, 89), get_channelNames_if(power_up_states, 90), get_state_if(power_up_states, 90), get_channelType_if(power_up_states, 90), get_channelNames_if(power_up_states, 91), get_state_if(power_up_states, 91), get_channelType_if(power_up_states, 91), get_channelNames_if(power_up_states, 92), get_state_if(power_up_states, 92), get_channelType_if(power_up_states, 92), get_channelNames_if(power_up_states, 93), get_state_if(power_up_states, 93), get_channelType_if(power_up_states, 93), get_channelNames_if(power_up_states, 94), get_state_if(power_up_states, 94), get_channelType_if(power_up_states, 94), get_channelNames_if(power_up_states, 95), get_state_if(power_up_states, 95), get_channelType_if(power_up_states, 95), get_channelNames_if(power_up_states, 96), get_state_if(power_up_states, 96), get_channelType_if(power_up_states, 96)); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } + response->set_status(status); + return ::grpc::Status::OK; } - - float64 value = request->value(); - auto status = library_->SetWriteAttributeDouble(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetWriteAttributeInt32(::grpc::ServerContext* context, const SetWriteAttributeInt32Request* request, SetWriteAttributeInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetWriteAttributeInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::WriteInt32Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetWriteAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::WriteInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetWriteAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetAnalogPowerUpStatesWithOutputType(::grpc::ServerContext* context, const SetAnalogPowerUpStatesWithOutputTypeRequest* request, SetAnalogPowerUpStatesWithOutputTypeResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } + try { + auto channel_names_mbcs = convert_from_grpc(request->channel_names()); + auto channel_names = channel_names_mbcs.c_str(); + auto state_array = const_cast(request->state_array().data()); + auto channel_type_array_vector = std::vector(); + channel_type_array_vector.reserve(request->channel_type_array().size()); + std::transform( + request->channel_type_array().begin(), + request->channel_type_array().end(), + std::back_inserter(channel_type_array_vector), + [](auto x) { return x; }); + auto channel_type_array = channel_type_array_vector.data(); - int32 value; - switch (request->value_enum_case()) { - case nidaqmx_grpc::SetWriteAttributeInt32Request::ValueEnumCase::kValue: { - value = static_cast(request->value()); - break; - } - case nidaqmx_grpc::SetWriteAttributeInt32Request::ValueEnumCase::kValueRaw: { - value = static_cast(request->value_raw()); - break; + auto array_size_determine_from_sizes = std::array + { + request->state_array_size(), + request->channel_type_array_size() + }; + const auto array_size_size_calculation = calculate_linked_array_size(array_size_determine_from_sizes, false); + + if (array_size_size_calculation.match_state == MatchState::MISMATCH) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The sizes of linked repeated fields [state_array, channel_type_array] do not match"); } - case nidaqmx_grpc::SetWriteAttributeInt32Request::ValueEnumCase::VALUE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for value was not specified or out of range"); - break; + auto array_size = array_size_size_calculation.size; + + auto status = library_->SetAnalogPowerUpStatesWithOutputType(channel_names, state_array, channel_type_array, array_size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } + response->set_status(status); + return ::grpc::Status::OK; } - - auto status = library_->SetWriteAttributeInt32(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetArmStartTrigTrigWhen(::grpc::ServerContext* context, const SetArmStartTrigTrigWhenRequest* request, SetArmStartTrigTrigWhenResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto data = convert_from_grpc(request->data()); + auto status = library_->SetArmStartTrigTrigWhen(task, data); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetWriteAttributeString(::grpc::ServerContext* context, const SetWriteAttributeStringRequest* request, SetWriteAttributeStringResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetWriteAttributeStringRequest::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::WriteStringAttribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetWriteAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::WriteStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; - } - case nidaqmx_grpc::SetWriteAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; - } - } - - auto value_mbcs = convert_from_grpc(request->value()); - auto value = value_mbcs.c_str(); - auto status = library_->SetWriteAttributeString(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetBufferAttributeUInt32(::grpc::ServerContext* context, const SetBufferAttributeUInt32Request* request, SetBufferAttributeUInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetBufferAttributeUInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::BufferUInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetBufferAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::BufferUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetBufferAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetWriteAttributeUInt32(::grpc::ServerContext* context, const SetWriteAttributeUInt32Request* request, SetWriteAttributeUInt32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetWriteAttributeUInt32Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::WriteUInt32Attribute_IsValid(attribute) ? attribute : 0; - break; + uInt32 value = request->value(); + auto status = library_->SetBufferAttributeUInt32(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - case nidaqmx_grpc::SetWriteAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::WriteUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetCalInfoAttributeBool(::grpc::ServerContext* context, const SetCalInfoAttributeBoolRequest* request, SetCalInfoAttributeBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetCalInfoAttributeBoolRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::CalibrationInfoBoolAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetCalInfoAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::CalibrationInfoBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetCalInfoAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::SetWriteAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + bool32 value = request->value(); + auto status = library_->SetCalInfoAttributeBool(device_name, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } + response->set_status(status); + return ::grpc::Status::OK; } - - uInt32 value = request->value(); - auto status = library_->SetWriteAttributeUInt32(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::SetWriteAttributeUInt64(::grpc::ServerContext* context, const SetWriteAttributeUInt64Request* request, SetWriteAttributeUInt64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 attribute; - switch (request->attribute_enum_case()) { - case nidaqmx_grpc::SetWriteAttributeUInt64Request::AttributeEnumCase::kAttribute: { - attribute = static_cast(request->attribute()); - attribute = nidaqmx_grpc::WriteUInt64Attribute_IsValid(attribute) ? attribute : 0; - break; - } - case nidaqmx_grpc::SetWriteAttributeUInt64Request::AttributeEnumCase::kAttributeRaw: { - attribute = static_cast(request->attribute_raw()); - auto attribute_is_valid = nidaqmx_grpc::WriteUInt64Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; - attribute = attribute_is_valid ? attribute : 0; - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetCalInfoAttributeDouble(::grpc::ServerContext* context, const SetCalInfoAttributeDoubleRequest* request, SetCalInfoAttributeDoubleResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetCalInfoAttributeDoubleRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::CalibrationInfoDoubleAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetCalInfoAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::CalibrationInfoDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetCalInfoAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::SetWriteAttributeUInt64Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); - break; + + float64 value = request->value(); + auto status = library_->SetCalInfoAttributeDouble(device_name, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } + response->set_status(status); + return ::grpc::Status::OK; } - - uInt64 value = request->value(); - auto status = library_->SetWriteAttributeUInt64(task, attribute, value); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::StartNewFile(::grpc::ServerContext* context, const StartNewFileRequest* request, StartNewFileResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto file_path_mbcs = convert_from_grpc(request->file_path()); - auto file_path = file_path_mbcs.c_str(); - auto status = library_->StartNewFile(task, file_path); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetCalInfoAttributeString(::grpc::ServerContext* context, const SetCalInfoAttributeStringRequest* request, SetCalInfoAttributeStringResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetCalInfoAttributeStringRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::CalibrationInfoStringAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetCalInfoAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::CalibrationInfoStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetCalInfoAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::StartTask(::grpc::ServerContext* context, const StartTaskRequest* request, StartTaskResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto status = library_->StartTask(task); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + auto value_mbcs = convert_from_grpc(request->value()); + auto value = value_mbcs.c_str(); + auto status = library_->SetCalInfoAttributeString(device_name, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::StopTask(::grpc::ServerContext* context, const StopTaskRequest* request, StopTaskResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto status = library_->StopTask(task); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetCalInfoAttributeUInt32(::grpc::ServerContext* context, const SetCalInfoAttributeUInt32Request* request, SetCalInfoAttributeUInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetCalInfoAttributeUInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::CalibrationInfoUInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetCalInfoAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::CalibrationInfoUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetCalInfoAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::TaskControl(::grpc::ServerContext* context, const TaskControlRequest* request, TaskControlResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 action; - switch (request->action_enum_case()) { - case nidaqmx_grpc::TaskControlRequest::ActionEnumCase::kAction: { - action = static_cast(request->action()); - break; + uInt32 value = request->value(); + auto status = library_->SetCalInfoAttributeUInt32(device_name, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } - case nidaqmx_grpc::TaskControlRequest::ActionEnumCase::kActionRaw: { - action = static_cast(request->action_raw()); - break; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetChanAttributeBool(::grpc::ServerContext* context, const SetChanAttributeBoolRequest* request, SetChanAttributeBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto channel_mbcs = convert_from_grpc(request->channel()); + auto channel = channel_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetChanAttributeBoolRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ChannelBoolAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetChanAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ChannelBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetChanAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::TaskControlRequest::ActionEnumCase::ACTION_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for action was not specified or out of range"); - break; + + bool32 value = request->value(); + auto status = library_->SetChanAttributeBool(task, channel, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetChanAttributeDouble(::grpc::ServerContext* context, const SetChanAttributeDoubleRequest* request, SetChanAttributeDoubleResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto channel_mbcs = convert_from_grpc(request->channel()); + auto channel = channel_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetChanAttributeDoubleRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ChannelDoubleAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetChanAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ChannelDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetChanAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } - auto status = library_->TaskControl(task, action); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + float64 value = request->value(); + auto status = library_->SetChanAttributeDouble(task, channel, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetChanAttributeDoubleArray(::grpc::ServerContext* context, const SetChanAttributeDoubleArrayRequest* request, SetChanAttributeDoubleArrayResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto channel_mbcs = convert_from_grpc(request->channel()); + auto channel = channel_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetChanAttributeDoubleArrayRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ChannelDoubleArrayAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetChanAttributeDoubleArrayRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ChannelDoubleArrayAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetChanAttributeDoubleArrayRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::TristateOutputTerm(::grpc::ServerContext* context, const TristateOutputTermRequest* request, TristateOutputTermResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto output_terminal_mbcs = convert_from_grpc(request->output_terminal()); - auto output_terminal = output_terminal_mbcs.c_str(); - auto status = library_->TristateOutputTerm(output_terminal); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + auto value = const_cast(request->value().data()); + uInt32 size = static_cast(request->value().size()); + auto status = library_->SetChanAttributeDoubleArray(task, channel, attribute, value, size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetChanAttributeInt32(::grpc::ServerContext* context, const SetChanAttributeInt32Request* request, SetChanAttributeInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto channel_mbcs = convert_from_grpc(request->channel()); + auto channel = channel_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetChanAttributeInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ChannelInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetChanAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ChannelInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetChanAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::UnregisterDoneEvent(::grpc::ServerContext* context, const UnregisterDoneEventRequest* request, UnregisterDoneEventResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - auto options = 0U; - auto callback_function = nullptr; - auto callback_data = nullptr; - auto status = library_->UnregisterDoneEvent(task, options, callback_function, callback_data); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + int32 value; + switch (request->value_enum_case()) { + case nidaqmx_grpc::SetChanAttributeInt32Request::ValueEnumCase::kValue: { + value = static_cast(request->value()); + break; + } + case nidaqmx_grpc::SetChanAttributeInt32Request::ValueEnumCase::kValueRaw: { + value = static_cast(request->value_raw()); + break; + } + case nidaqmx_grpc::SetChanAttributeInt32Request::ValueEnumCase::VALUE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for value was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::UnregisterEveryNSamplesEvent(::grpc::ServerContext* context, const UnregisterEveryNSamplesEventRequest* request, UnregisterEveryNSamplesEventResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 every_n_samples_event_type; - switch (request->every_n_samples_event_type_enum_case()) { - case nidaqmx_grpc::UnregisterEveryNSamplesEventRequest::EveryNSamplesEventTypeEnumCase::kEveryNSamplesEventType: { - every_n_samples_event_type = static_cast(request->every_n_samples_event_type()); - break; + auto status = library_->SetChanAttributeInt32(task, channel, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - case nidaqmx_grpc::UnregisterEveryNSamplesEventRequest::EveryNSamplesEventTypeEnumCase::kEveryNSamplesEventTypeRaw: { - every_n_samples_event_type = static_cast(request->every_n_samples_event_type_raw()); - break; + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetChanAttributeString(::grpc::ServerContext* context, const SetChanAttributeStringRequest* request, SetChanAttributeStringResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto channel_mbcs = convert_from_grpc(request->channel()); + auto channel = channel_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetChanAttributeStringRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ChannelStringAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetChanAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ChannelStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetChanAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } } - case nidaqmx_grpc::UnregisterEveryNSamplesEventRequest::EveryNSamplesEventTypeEnumCase::EVERY_N_SAMPLES_EVENT_TYPE_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for every_n_samples_event_type was not specified or out of range"); - break; + + auto value_mbcs = convert_from_grpc(request->value()); + auto value = value_mbcs.c_str(); + auto status = library_->SetChanAttributeString(task, channel, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + return ::grpc::Status::OK; } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetChanAttributeUInt32(::grpc::ServerContext* context, const SetChanAttributeUInt32Request* request, SetChanAttributeUInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto channel_mbcs = convert_from_grpc(request->channel()); + auto channel = channel_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetChanAttributeUInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ChannelUInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetChanAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ChannelUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetChanAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } - auto n_samples = 0U; - auto options = 0U; - auto callback_function = nullptr; - auto callback_data = nullptr; - auto status = library_->UnregisterEveryNSamplesEvent(task, every_n_samples_event_type, n_samples, options, callback_function, callback_data); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + uInt32 value = request->value(); + auto status = library_->SetChanAttributeUInt32(task, channel, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::UnregisterSignalEvent(::grpc::ServerContext* context, const UnregisterSignalEventRequest* request, UnregisterSignalEventResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 signal_id; - switch (request->signal_id_enum_case()) { - case nidaqmx_grpc::UnregisterSignalEventRequest::SignalIdEnumCase::kSignalId: { - signal_id = static_cast(request->signal_id()); - break; - } - case nidaqmx_grpc::UnregisterSignalEventRequest::SignalIdEnumCase::kSignalIdRaw: { - signal_id = static_cast(request->signal_id_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetDigitalLogicFamilyPowerUpState(::grpc::ServerContext* context, const SetDigitalLogicFamilyPowerUpStateRequest* request, SetDigitalLogicFamilyPowerUpStateResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + int32 logic_family; + switch (request->logic_family_enum_case()) { + case nidaqmx_grpc::SetDigitalLogicFamilyPowerUpStateRequest::LogicFamilyEnumCase::kLogicFamily: { + logic_family = static_cast(request->logic_family()); + break; + } + case nidaqmx_grpc::SetDigitalLogicFamilyPowerUpStateRequest::LogicFamilyEnumCase::kLogicFamilyRaw: { + logic_family = static_cast(request->logic_family_raw()); + break; + } + case nidaqmx_grpc::SetDigitalLogicFamilyPowerUpStateRequest::LogicFamilyEnumCase::LOGIC_FAMILY_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for logic_family was not specified or out of range"); + break; + } } - case nidaqmx_grpc::UnregisterSignalEventRequest::SignalIdEnumCase::SIGNAL_ID_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for signal_id was not specified or out of range"); - break; + + auto status = library_->SetDigitalLogicFamilyPowerUpState(device_name, logic_family); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } + response->set_status(status); + return ::grpc::Status::OK; } - - auto options = 0U; - auto callback_function = nullptr; - auto callback_data = nullptr; - auto status = library_->UnregisterSignalEvent(task, signal_id, options, callback_function, callback_data); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::UnreserveNetworkDevice(::grpc::ServerContext* context, const UnreserveNetworkDeviceRequest* request, UnreserveNetworkDeviceResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto device_name_mbcs = convert_from_grpc(request->device_name()); - auto device_name = device_name_mbcs.c_str(); - auto status = library_->UnreserveNetworkDevice(device_name); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetDigitalPowerUpStates(::grpc::ServerContext* context, const SetDigitalPowerUpStatesRequest* request, SetDigitalPowerUpStatesResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::WaitForNextSampleClock(::grpc::ServerContext* context, const WaitForNextSampleClockRequest* request, WaitForNextSampleClockResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - float64 timeout = request->timeout(); - bool32 is_late{}; - auto status = library_->WaitForNextSampleClock(task, timeout, &is_late); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_is_late(is_late); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + auto get_channelNames_if = [](const google::protobuf::RepeatedPtrField& vector, int n) -> const char* { + if (vector.size() > n) { + return vector[n].channel_names().c_str(); + } + return nullptr; + }; + auto get_state_if = [](const google::protobuf::RepeatedPtrField& vector, int n) -> int32 { + if (vector.size() > n) { + return vector[n].state(); + } + return 0; + }; + auto power_up_states = request->power_up_states(); + if (power_up_states.size() == 0) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "No values for powerUpStates were specified"); + } + if (power_up_states.size() > 96) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "More than 96 values for powerUpStates were specified"); + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginWaitForNextSampleClock(::grpc::ServerContext* context, const BeginWaitForNextSampleClockRequest* request, BeginWaitForNextSampleClockResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - float64 timeout = request->timeout(); - - auto data = std::make_unique(); - data->task = task; - data->timeout = timeout; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWaitForNextSampleClock", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + auto status = std::static_pointer_cast(library_)->SetDigitalPowerUpStates(device_name, get_channelNames_if(power_up_states, 0), get_state_if(power_up_states, 0), get_channelNames_if(power_up_states, 1), get_state_if(power_up_states, 1), get_channelNames_if(power_up_states, 2), get_state_if(power_up_states, 2), get_channelNames_if(power_up_states, 3), get_state_if(power_up_states, 3), get_channelNames_if(power_up_states, 4), get_state_if(power_up_states, 4), get_channelNames_if(power_up_states, 5), get_state_if(power_up_states, 5), get_channelNames_if(power_up_states, 6), get_state_if(power_up_states, 6), get_channelNames_if(power_up_states, 7), get_state_if(power_up_states, 7), get_channelNames_if(power_up_states, 8), get_state_if(power_up_states, 8), get_channelNames_if(power_up_states, 9), get_state_if(power_up_states, 9), get_channelNames_if(power_up_states, 10), get_state_if(power_up_states, 10), get_channelNames_if(power_up_states, 11), get_state_if(power_up_states, 11), get_channelNames_if(power_up_states, 12), get_state_if(power_up_states, 12), get_channelNames_if(power_up_states, 13), get_state_if(power_up_states, 13), get_channelNames_if(power_up_states, 14), get_state_if(power_up_states, 14), get_channelNames_if(power_up_states, 15), get_state_if(power_up_states, 15), get_channelNames_if(power_up_states, 16), get_state_if(power_up_states, 16), get_channelNames_if(power_up_states, 17), get_state_if(power_up_states, 17), get_channelNames_if(power_up_states, 18), get_state_if(power_up_states, 18), get_channelNames_if(power_up_states, 19), get_state_if(power_up_states, 19), get_channelNames_if(power_up_states, 20), get_state_if(power_up_states, 20), get_channelNames_if(power_up_states, 21), get_state_if(power_up_states, 21), get_channelNames_if(power_up_states, 22), get_state_if(power_up_states, 22), get_channelNames_if(power_up_states, 23), get_state_if(power_up_states, 23), get_channelNames_if(power_up_states, 24), get_state_if(power_up_states, 24), get_channelNames_if(power_up_states, 25), get_state_if(power_up_states, 25), get_channelNames_if(power_up_states, 26), get_state_if(power_up_states, 26), get_channelNames_if(power_up_states, 27), get_state_if(power_up_states, 27), get_channelNames_if(power_up_states, 28), get_state_if(power_up_states, 28), get_channelNames_if(power_up_states, 29), get_state_if(power_up_states, 29), get_channelNames_if(power_up_states, 30), get_state_if(power_up_states, 30), get_channelNames_if(power_up_states, 31), get_state_if(power_up_states, 31), get_channelNames_if(power_up_states, 32), get_state_if(power_up_states, 32), get_channelNames_if(power_up_states, 33), get_state_if(power_up_states, 33), get_channelNames_if(power_up_states, 34), get_state_if(power_up_states, 34), get_channelNames_if(power_up_states, 35), get_state_if(power_up_states, 35), get_channelNames_if(power_up_states, 36), get_state_if(power_up_states, 36), get_channelNames_if(power_up_states, 37), get_state_if(power_up_states, 37), get_channelNames_if(power_up_states, 38), get_state_if(power_up_states, 38), get_channelNames_if(power_up_states, 39), get_state_if(power_up_states, 39), get_channelNames_if(power_up_states, 40), get_state_if(power_up_states, 40), get_channelNames_if(power_up_states, 41), get_state_if(power_up_states, 41), get_channelNames_if(power_up_states, 42), get_state_if(power_up_states, 42), get_channelNames_if(power_up_states, 43), get_state_if(power_up_states, 43), get_channelNames_if(power_up_states, 44), get_state_if(power_up_states, 44), get_channelNames_if(power_up_states, 45), get_state_if(power_up_states, 45), get_channelNames_if(power_up_states, 46), get_state_if(power_up_states, 46), get_channelNames_if(power_up_states, 47), get_state_if(power_up_states, 47), get_channelNames_if(power_up_states, 48), get_state_if(power_up_states, 48), get_channelNames_if(power_up_states, 49), get_state_if(power_up_states, 49), get_channelNames_if(power_up_states, 50), get_state_if(power_up_states, 50), get_channelNames_if(power_up_states, 51), get_state_if(power_up_states, 51), get_channelNames_if(power_up_states, 52), get_state_if(power_up_states, 52), get_channelNames_if(power_up_states, 53), get_state_if(power_up_states, 53), get_channelNames_if(power_up_states, 54), get_state_if(power_up_states, 54), get_channelNames_if(power_up_states, 55), get_state_if(power_up_states, 55), get_channelNames_if(power_up_states, 56), get_state_if(power_up_states, 56), get_channelNames_if(power_up_states, 57), get_state_if(power_up_states, 57), get_channelNames_if(power_up_states, 58), get_state_if(power_up_states, 58), get_channelNames_if(power_up_states, 59), get_state_if(power_up_states, 59), get_channelNames_if(power_up_states, 60), get_state_if(power_up_states, 60), get_channelNames_if(power_up_states, 61), get_state_if(power_up_states, 61), get_channelNames_if(power_up_states, 62), get_state_if(power_up_states, 62), get_channelNames_if(power_up_states, 63), get_state_if(power_up_states, 63), get_channelNames_if(power_up_states, 64), get_state_if(power_up_states, 64), get_channelNames_if(power_up_states, 65), get_state_if(power_up_states, 65), get_channelNames_if(power_up_states, 66), get_state_if(power_up_states, 66), get_channelNames_if(power_up_states, 67), get_state_if(power_up_states, 67), get_channelNames_if(power_up_states, 68), get_state_if(power_up_states, 68), get_channelNames_if(power_up_states, 69), get_state_if(power_up_states, 69), get_channelNames_if(power_up_states, 70), get_state_if(power_up_states, 70), get_channelNames_if(power_up_states, 71), get_state_if(power_up_states, 71), get_channelNames_if(power_up_states, 72), get_state_if(power_up_states, 72), get_channelNames_if(power_up_states, 73), get_state_if(power_up_states, 73), get_channelNames_if(power_up_states, 74), get_state_if(power_up_states, 74), get_channelNames_if(power_up_states, 75), get_state_if(power_up_states, 75), get_channelNames_if(power_up_states, 76), get_state_if(power_up_states, 76), get_channelNames_if(power_up_states, 77), get_state_if(power_up_states, 77), get_channelNames_if(power_up_states, 78), get_state_if(power_up_states, 78), get_channelNames_if(power_up_states, 79), get_state_if(power_up_states, 79), get_channelNames_if(power_up_states, 80), get_state_if(power_up_states, 80), get_channelNames_if(power_up_states, 81), get_state_if(power_up_states, 81), get_channelNames_if(power_up_states, 82), get_state_if(power_up_states, 82), get_channelNames_if(power_up_states, 83), get_state_if(power_up_states, 83), get_channelNames_if(power_up_states, 84), get_state_if(power_up_states, 84), get_channelNames_if(power_up_states, 85), get_state_if(power_up_states, 85), get_channelNames_if(power_up_states, 86), get_state_if(power_up_states, 86), get_channelNames_if(power_up_states, 87), get_state_if(power_up_states, 87), get_channelNames_if(power_up_states, 88), get_state_if(power_up_states, 88), get_channelNames_if(power_up_states, 89), get_state_if(power_up_states, 89), get_channelNames_if(power_up_states, 90), get_state_if(power_up_states, 90), get_channelNames_if(power_up_states, 91), get_state_if(power_up_states, 91), get_channelNames_if(power_up_states, 92), get_state_if(power_up_states, 92), get_channelNames_if(power_up_states, 93), get_state_if(power_up_states, 93), get_channelNames_if(power_up_states, 94), get_state_if(power_up_states, 94), get_channelNames_if(power_up_states, 95), get_state_if(power_up_states, 95), get_channelNames_if(power_up_states, 96), get_state_if(power_up_states, 96)); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::WaitForValidTimestamp(::grpc::ServerContext* context, const WaitForValidTimestampRequest* request, WaitForValidTimestampResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 timestamp_event; - switch (request->timestamp_event_enum_case()) { - case nidaqmx_grpc::WaitForValidTimestampRequest::TimestampEventEnumCase::kTimestampEvent: { - timestamp_event = static_cast(request->timestamp_event()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetDigitalPullUpPullDownStates(::grpc::ServerContext* context, const SetDigitalPullUpPullDownStatesRequest* request, SetDigitalPullUpPullDownStatesResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + auto get_channelNames_if = [](const google::protobuf::RepeatedPtrField& vector, int n) -> const char* { + if (vector.size() > n) { + return vector[n].channel_names().c_str(); + } + return nullptr; + }; + auto get_state_if = [](const google::protobuf::RepeatedPtrField& vector, int n) -> int32 { + if (vector.size() > n) { + return vector[n].state(); + } + return 0; + }; + auto pull_up_pull_down_states = request->pull_up_pull_down_states(); + if (pull_up_pull_down_states.size() == 0) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "No values for pullUpPullDownStates were specified"); } - case nidaqmx_grpc::WaitForValidTimestampRequest::TimestampEventEnumCase::kTimestampEventRaw: { - timestamp_event = static_cast(request->timestamp_event_raw()); - break; + if (pull_up_pull_down_states.size() > 96) { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "More than 96 values for pullUpPullDownStates were specified"); } - case nidaqmx_grpc::WaitForValidTimestampRequest::TimestampEventEnumCase::TIMESTAMP_EVENT_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for timestamp_event was not specified or out of range"); - break; + + auto status = std::static_pointer_cast(library_)->SetDigitalPullUpPullDownStates(device_name, get_channelNames_if(pull_up_pull_down_states, 0), get_state_if(pull_up_pull_down_states, 0), get_channelNames_if(pull_up_pull_down_states, 1), get_state_if(pull_up_pull_down_states, 1), get_channelNames_if(pull_up_pull_down_states, 2), get_state_if(pull_up_pull_down_states, 2), get_channelNames_if(pull_up_pull_down_states, 3), get_state_if(pull_up_pull_down_states, 3), get_channelNames_if(pull_up_pull_down_states, 4), get_state_if(pull_up_pull_down_states, 4), get_channelNames_if(pull_up_pull_down_states, 5), get_state_if(pull_up_pull_down_states, 5), get_channelNames_if(pull_up_pull_down_states, 6), get_state_if(pull_up_pull_down_states, 6), get_channelNames_if(pull_up_pull_down_states, 7), get_state_if(pull_up_pull_down_states, 7), get_channelNames_if(pull_up_pull_down_states, 8), get_state_if(pull_up_pull_down_states, 8), get_channelNames_if(pull_up_pull_down_states, 9), get_state_if(pull_up_pull_down_states, 9), get_channelNames_if(pull_up_pull_down_states, 10), get_state_if(pull_up_pull_down_states, 10), get_channelNames_if(pull_up_pull_down_states, 11), get_state_if(pull_up_pull_down_states, 11), get_channelNames_if(pull_up_pull_down_states, 12), get_state_if(pull_up_pull_down_states, 12), get_channelNames_if(pull_up_pull_down_states, 13), get_state_if(pull_up_pull_down_states, 13), get_channelNames_if(pull_up_pull_down_states, 14), get_state_if(pull_up_pull_down_states, 14), get_channelNames_if(pull_up_pull_down_states, 15), get_state_if(pull_up_pull_down_states, 15), get_channelNames_if(pull_up_pull_down_states, 16), get_state_if(pull_up_pull_down_states, 16), get_channelNames_if(pull_up_pull_down_states, 17), get_state_if(pull_up_pull_down_states, 17), get_channelNames_if(pull_up_pull_down_states, 18), get_state_if(pull_up_pull_down_states, 18), get_channelNames_if(pull_up_pull_down_states, 19), get_state_if(pull_up_pull_down_states, 19), get_channelNames_if(pull_up_pull_down_states, 20), get_state_if(pull_up_pull_down_states, 20), get_channelNames_if(pull_up_pull_down_states, 21), get_state_if(pull_up_pull_down_states, 21), get_channelNames_if(pull_up_pull_down_states, 22), get_state_if(pull_up_pull_down_states, 22), get_channelNames_if(pull_up_pull_down_states, 23), get_state_if(pull_up_pull_down_states, 23), get_channelNames_if(pull_up_pull_down_states, 24), get_state_if(pull_up_pull_down_states, 24), get_channelNames_if(pull_up_pull_down_states, 25), get_state_if(pull_up_pull_down_states, 25), get_channelNames_if(pull_up_pull_down_states, 26), get_state_if(pull_up_pull_down_states, 26), get_channelNames_if(pull_up_pull_down_states, 27), get_state_if(pull_up_pull_down_states, 27), get_channelNames_if(pull_up_pull_down_states, 28), get_state_if(pull_up_pull_down_states, 28), get_channelNames_if(pull_up_pull_down_states, 29), get_state_if(pull_up_pull_down_states, 29), get_channelNames_if(pull_up_pull_down_states, 30), get_state_if(pull_up_pull_down_states, 30), get_channelNames_if(pull_up_pull_down_states, 31), get_state_if(pull_up_pull_down_states, 31), get_channelNames_if(pull_up_pull_down_states, 32), get_state_if(pull_up_pull_down_states, 32), get_channelNames_if(pull_up_pull_down_states, 33), get_state_if(pull_up_pull_down_states, 33), get_channelNames_if(pull_up_pull_down_states, 34), get_state_if(pull_up_pull_down_states, 34), get_channelNames_if(pull_up_pull_down_states, 35), get_state_if(pull_up_pull_down_states, 35), get_channelNames_if(pull_up_pull_down_states, 36), get_state_if(pull_up_pull_down_states, 36), get_channelNames_if(pull_up_pull_down_states, 37), get_state_if(pull_up_pull_down_states, 37), get_channelNames_if(pull_up_pull_down_states, 38), get_state_if(pull_up_pull_down_states, 38), get_channelNames_if(pull_up_pull_down_states, 39), get_state_if(pull_up_pull_down_states, 39), get_channelNames_if(pull_up_pull_down_states, 40), get_state_if(pull_up_pull_down_states, 40), get_channelNames_if(pull_up_pull_down_states, 41), get_state_if(pull_up_pull_down_states, 41), get_channelNames_if(pull_up_pull_down_states, 42), get_state_if(pull_up_pull_down_states, 42), get_channelNames_if(pull_up_pull_down_states, 43), get_state_if(pull_up_pull_down_states, 43), get_channelNames_if(pull_up_pull_down_states, 44), get_state_if(pull_up_pull_down_states, 44), get_channelNames_if(pull_up_pull_down_states, 45), get_state_if(pull_up_pull_down_states, 45), get_channelNames_if(pull_up_pull_down_states, 46), get_state_if(pull_up_pull_down_states, 46), get_channelNames_if(pull_up_pull_down_states, 47), get_state_if(pull_up_pull_down_states, 47), get_channelNames_if(pull_up_pull_down_states, 48), get_state_if(pull_up_pull_down_states, 48), get_channelNames_if(pull_up_pull_down_states, 49), get_state_if(pull_up_pull_down_states, 49), get_channelNames_if(pull_up_pull_down_states, 50), get_state_if(pull_up_pull_down_states, 50), get_channelNames_if(pull_up_pull_down_states, 51), get_state_if(pull_up_pull_down_states, 51), get_channelNames_if(pull_up_pull_down_states, 52), get_state_if(pull_up_pull_down_states, 52), get_channelNames_if(pull_up_pull_down_states, 53), get_state_if(pull_up_pull_down_states, 53), get_channelNames_if(pull_up_pull_down_states, 54), get_state_if(pull_up_pull_down_states, 54), get_channelNames_if(pull_up_pull_down_states, 55), get_state_if(pull_up_pull_down_states, 55), get_channelNames_if(pull_up_pull_down_states, 56), get_state_if(pull_up_pull_down_states, 56), get_channelNames_if(pull_up_pull_down_states, 57), get_state_if(pull_up_pull_down_states, 57), get_channelNames_if(pull_up_pull_down_states, 58), get_state_if(pull_up_pull_down_states, 58), get_channelNames_if(pull_up_pull_down_states, 59), get_state_if(pull_up_pull_down_states, 59), get_channelNames_if(pull_up_pull_down_states, 60), get_state_if(pull_up_pull_down_states, 60), get_channelNames_if(pull_up_pull_down_states, 61), get_state_if(pull_up_pull_down_states, 61), get_channelNames_if(pull_up_pull_down_states, 62), get_state_if(pull_up_pull_down_states, 62), get_channelNames_if(pull_up_pull_down_states, 63), get_state_if(pull_up_pull_down_states, 63), get_channelNames_if(pull_up_pull_down_states, 64), get_state_if(pull_up_pull_down_states, 64), get_channelNames_if(pull_up_pull_down_states, 65), get_state_if(pull_up_pull_down_states, 65), get_channelNames_if(pull_up_pull_down_states, 66), get_state_if(pull_up_pull_down_states, 66), get_channelNames_if(pull_up_pull_down_states, 67), get_state_if(pull_up_pull_down_states, 67), get_channelNames_if(pull_up_pull_down_states, 68), get_state_if(pull_up_pull_down_states, 68), get_channelNames_if(pull_up_pull_down_states, 69), get_state_if(pull_up_pull_down_states, 69), get_channelNames_if(pull_up_pull_down_states, 70), get_state_if(pull_up_pull_down_states, 70), get_channelNames_if(pull_up_pull_down_states, 71), get_state_if(pull_up_pull_down_states, 71), get_channelNames_if(pull_up_pull_down_states, 72), get_state_if(pull_up_pull_down_states, 72), get_channelNames_if(pull_up_pull_down_states, 73), get_state_if(pull_up_pull_down_states, 73), get_channelNames_if(pull_up_pull_down_states, 74), get_state_if(pull_up_pull_down_states, 74), get_channelNames_if(pull_up_pull_down_states, 75), get_state_if(pull_up_pull_down_states, 75), get_channelNames_if(pull_up_pull_down_states, 76), get_state_if(pull_up_pull_down_states, 76), get_channelNames_if(pull_up_pull_down_states, 77), get_state_if(pull_up_pull_down_states, 77), get_channelNames_if(pull_up_pull_down_states, 78), get_state_if(pull_up_pull_down_states, 78), get_channelNames_if(pull_up_pull_down_states, 79), get_state_if(pull_up_pull_down_states, 79), get_channelNames_if(pull_up_pull_down_states, 80), get_state_if(pull_up_pull_down_states, 80), get_channelNames_if(pull_up_pull_down_states, 81), get_state_if(pull_up_pull_down_states, 81), get_channelNames_if(pull_up_pull_down_states, 82), get_state_if(pull_up_pull_down_states, 82), get_channelNames_if(pull_up_pull_down_states, 83), get_state_if(pull_up_pull_down_states, 83), get_channelNames_if(pull_up_pull_down_states, 84), get_state_if(pull_up_pull_down_states, 84), get_channelNames_if(pull_up_pull_down_states, 85), get_state_if(pull_up_pull_down_states, 85), get_channelNames_if(pull_up_pull_down_states, 86), get_state_if(pull_up_pull_down_states, 86), get_channelNames_if(pull_up_pull_down_states, 87), get_state_if(pull_up_pull_down_states, 87), get_channelNames_if(pull_up_pull_down_states, 88), get_state_if(pull_up_pull_down_states, 88), get_channelNames_if(pull_up_pull_down_states, 89), get_state_if(pull_up_pull_down_states, 89), get_channelNames_if(pull_up_pull_down_states, 90), get_state_if(pull_up_pull_down_states, 90), get_channelNames_if(pull_up_pull_down_states, 91), get_state_if(pull_up_pull_down_states, 91), get_channelNames_if(pull_up_pull_down_states, 92), get_state_if(pull_up_pull_down_states, 92), get_channelNames_if(pull_up_pull_down_states, 93), get_state_if(pull_up_pull_down_states, 93), get_channelNames_if(pull_up_pull_down_states, 94), get_state_if(pull_up_pull_down_states, 94), get_channelNames_if(pull_up_pull_down_states, 95), get_state_if(pull_up_pull_down_states, 95), get_channelNames_if(pull_up_pull_down_states, 96), get_state_if(pull_up_pull_down_states, 96)); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } + response->set_status(status); + return ::grpc::Status::OK; } - - float64 timeout = request->timeout(); - CVIAbsoluteTime timestamp{}; - auto status = library_->WaitForValidTimestamp(task, timestamp_event, timeout, ×tamp); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - convert_to_grpc(timestamp, response->mutable_timestamp()); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} - -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::WaitUntilTaskDone(::grpc::ServerContext* context, const WaitUntilTaskDoneRequest* request, WaitUntilTaskDoneResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - float64 time_to_wait = request->time_to_wait(); - auto status = library_->WaitUntilTaskDone(task, time_to_wait); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::WriteAnalogF64(::grpc::ServerContext* context, const WriteAnalogF64Request* request, WriteAnalogF64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - bool32 auto_start = request->auto_start(); - float64 timeout = request->timeout(); - int32 data_layout; - switch (request->data_layout_enum_case()) { - case nidaqmx_grpc::WriteAnalogF64Request::DataLayoutEnumCase::kDataLayout: { - data_layout = static_cast(request->data_layout()); - break; - } - case nidaqmx_grpc::WriteAnalogF64Request::DataLayoutEnumCase::kDataLayoutRaw: { - data_layout = static_cast(request->data_layout_raw()); - break; - } - case nidaqmx_grpc::WriteAnalogF64Request::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); - break; - } - } - - auto write_array = const_cast(request->write_array().data()); - auto reserved = nullptr; - int32 samps_per_chan_written{}; - auto status = library_->WriteAnalogF64(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array, &samps_per_chan_written, reserved); - context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(samps_per_chan_written)); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_samps_per_chan_written(samps_per_chan_written); - return ::grpc::Status::OK; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetExportedSignalAttributeBool(::grpc::ServerContext* context, const SetExportedSignalAttributeBoolRequest* request, SetExportedSignalAttributeBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetExportedSignalAttributeBoolRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ExportSignalBoolAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetExportedSignalAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ExportSignalBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetExportedSignalAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } + + bool32 value = request->value(); + auto status = library_->SetExportedSignalAttributeBool(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetExportedSignalAttributeDouble(::grpc::ServerContext* context, const SetExportedSignalAttributeDoubleRequest* request, SetExportedSignalAttributeDoubleResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetExportedSignalAttributeDoubleRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ExportSignalDoubleAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetExportedSignalAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ExportSignalDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetExportedSignalAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } + + float64 value = request->value(); + auto status = library_->SetExportedSignalAttributeDouble(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetExportedSignalAttributeInt32(::grpc::ServerContext* context, const SetExportedSignalAttributeInt32Request* request, SetExportedSignalAttributeInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetExportedSignalAttributeInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ExportSignalInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetExportedSignalAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ExportSignalInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetExportedSignalAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } + + int32 value; + switch (request->value_enum_case()) { + case nidaqmx_grpc::SetExportedSignalAttributeInt32Request::ValueEnumCase::kValue: { + value = static_cast(request->value()); + break; + } + case nidaqmx_grpc::SetExportedSignalAttributeInt32Request::ValueEnumCase::kValueRaw: { + value = static_cast(request->value_raw()); + break; + } + case nidaqmx_grpc::SetExportedSignalAttributeInt32Request::ValueEnumCase::VALUE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for value was not specified or out of range"); + break; + } + } + + auto status = library_->SetExportedSignalAttributeInt32(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetExportedSignalAttributeString(::grpc::ServerContext* context, const SetExportedSignalAttributeStringRequest* request, SetExportedSignalAttributeStringResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetExportedSignalAttributeStringRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ExportSignalStringAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetExportedSignalAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ExportSignalStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetExportedSignalAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } + + auto value_mbcs = convert_from_grpc(request->value()); + auto value = value_mbcs.c_str(); + auto status = library_->SetExportedSignalAttributeString(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetExportedSignalAttributeUInt32(::grpc::ServerContext* context, const SetExportedSignalAttributeUInt32Request* request, SetExportedSignalAttributeUInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetExportedSignalAttributeUInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ExportSignalUInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetExportedSignalAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ExportSignalUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetExportedSignalAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } + + uInt32 value = request->value(); + auto status = library_->SetExportedSignalAttributeUInt32(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetFirstSampClkWhen(::grpc::ServerContext* context, const SetFirstSampClkWhenRequest* request, SetFirstSampClkWhenResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto data = convert_from_grpc(request->data()); + auto status = library_->SetFirstSampClkWhen(task, data); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetReadAttributeBool(::grpc::ServerContext* context, const SetReadAttributeBoolRequest* request, SetReadAttributeBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetReadAttributeBoolRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ReadBoolAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetReadAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ReadBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetReadAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } + + bool32 value = request->value(); + auto status = library_->SetReadAttributeBool(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetReadAttributeDouble(::grpc::ServerContext* context, const SetReadAttributeDoubleRequest* request, SetReadAttributeDoubleResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetReadAttributeDoubleRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ReadDoubleAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetReadAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ReadDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetReadAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } + + float64 value = request->value(); + auto status = library_->SetReadAttributeDouble(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetReadAttributeInt32(::grpc::ServerContext* context, const SetReadAttributeInt32Request* request, SetReadAttributeInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetReadAttributeInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ReadInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetReadAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ReadInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetReadAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } + + int32 value; + switch (request->value_enum_case()) { + case nidaqmx_grpc::SetReadAttributeInt32Request::ValueEnumCase::kValue: { + value = static_cast(request->value()); + break; + } + case nidaqmx_grpc::SetReadAttributeInt32Request::ValueEnumCase::kValueRaw: { + value = static_cast(request->value_raw()); + break; + } + case nidaqmx_grpc::SetReadAttributeInt32Request::ValueEnumCase::VALUE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for value was not specified or out of range"); + break; + } + } + + auto status = library_->SetReadAttributeInt32(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetReadAttributeString(::grpc::ServerContext* context, const SetReadAttributeStringRequest* request, SetReadAttributeStringResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetReadAttributeStringRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ReadStringAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetReadAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ReadStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetReadAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } + + auto value_mbcs = convert_from_grpc(request->value()); + auto value = value_mbcs.c_str(); + auto status = library_->SetReadAttributeString(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetReadAttributeUInt32(::grpc::ServerContext* context, const SetReadAttributeUInt32Request* request, SetReadAttributeUInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetReadAttributeUInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ReadUInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetReadAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ReadUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetReadAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } + + uInt32 value = request->value(); + auto status = library_->SetReadAttributeUInt32(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetReadAttributeUInt64(::grpc::ServerContext* context, const SetReadAttributeUInt64Request* request, SetReadAttributeUInt64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetReadAttributeUInt64Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ReadUInt64Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetReadAttributeUInt64Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ReadUInt64Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetReadAttributeUInt64Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } + + uInt64 value = request->value(); + auto status = library_->SetReadAttributeUInt64(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetRealTimeAttributeBool(::grpc::ServerContext* context, const SetRealTimeAttributeBoolRequest* request, SetRealTimeAttributeBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetRealTimeAttributeBoolRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::RealTimeBoolAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetRealTimeAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::RealTimeBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetRealTimeAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } + + bool32 value = request->value(); + auto status = library_->SetRealTimeAttributeBool(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetRealTimeAttributeInt32(::grpc::ServerContext* context, const SetRealTimeAttributeInt32Request* request, SetRealTimeAttributeInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetRealTimeAttributeInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::RealTimeInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetRealTimeAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::RealTimeInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetRealTimeAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } + + int32 value; + switch (request->value_enum_case()) { + case nidaqmx_grpc::SetRealTimeAttributeInt32Request::ValueEnumCase::kValue: { + value = static_cast(request->value()); + break; + } + case nidaqmx_grpc::SetRealTimeAttributeInt32Request::ValueEnumCase::kValueRaw: { + value = static_cast(request->value_raw()); + break; + } + case nidaqmx_grpc::SetRealTimeAttributeInt32Request::ValueEnumCase::VALUE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for value was not specified or out of range"); + break; + } + } + + auto status = library_->SetRealTimeAttributeInt32(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetRealTimeAttributeUInt32(::grpc::ServerContext* context, const SetRealTimeAttributeUInt32Request* request, SetRealTimeAttributeUInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetRealTimeAttributeUInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::RealTimeUInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetRealTimeAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::RealTimeUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetRealTimeAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } + + uInt32 value = request->value(); + auto status = library_->SetRealTimeAttributeUInt32(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetScaleAttributeDouble(::grpc::ServerContext* context, const SetScaleAttributeDoubleRequest* request, SetScaleAttributeDoubleResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto scale_name_mbcs = convert_from_grpc(request->scale_name()); + auto scale_name = scale_name_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetScaleAttributeDoubleRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ScaleDoubleAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetScaleAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ScaleDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetScaleAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } + + float64 value = request->value(); + auto status = library_->SetScaleAttributeDouble(scale_name, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetScaleAttributeDoubleArray(::grpc::ServerContext* context, const SetScaleAttributeDoubleArrayRequest* request, SetScaleAttributeDoubleArrayResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto scale_name_mbcs = convert_from_grpc(request->scale_name()); + auto scale_name = scale_name_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetScaleAttributeDoubleArrayRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ScaleDoubleArrayAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetScaleAttributeDoubleArrayRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ScaleDoubleArrayAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetScaleAttributeDoubleArrayRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } + + auto value = const_cast(request->value().data()); + uInt32 size = static_cast(request->value().size()); + auto status = library_->SetScaleAttributeDoubleArray(scale_name, attribute, value, size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetScaleAttributeInt32(::grpc::ServerContext* context, const SetScaleAttributeInt32Request* request, SetScaleAttributeInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto scale_name_mbcs = convert_from_grpc(request->scale_name()); + auto scale_name = scale_name_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetScaleAttributeInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ScaleInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetScaleAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ScaleInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetScaleAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } + + int32 value; + switch (request->value_enum_case()) { + case nidaqmx_grpc::SetScaleAttributeInt32Request::ValueEnumCase::kValue: { + value = static_cast(request->value()); + break; + } + case nidaqmx_grpc::SetScaleAttributeInt32Request::ValueEnumCase::kValueRaw: { + value = static_cast(request->value_raw()); + break; + } + case nidaqmx_grpc::SetScaleAttributeInt32Request::ValueEnumCase::VALUE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for value was not specified or out of range"); + break; + } + } + + auto status = library_->SetScaleAttributeInt32(scale_name, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetScaleAttributeString(::grpc::ServerContext* context, const SetScaleAttributeStringRequest* request, SetScaleAttributeStringResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto scale_name_mbcs = convert_from_grpc(request->scale_name()); + auto scale_name = scale_name_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetScaleAttributeStringRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::ScaleStringAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetScaleAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::ScaleStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetScaleAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } + + auto value_mbcs = convert_from_grpc(request->value()); + auto value = value_mbcs.c_str(); + auto status = library_->SetScaleAttributeString(scale_name, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetStartTrigTrigWhen(::grpc::ServerContext* context, const SetStartTrigTrigWhenRequest* request, SetStartTrigTrigWhenResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto data = convert_from_grpc(request->data()); + auto status = library_->SetStartTrigTrigWhen(task, data); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetSyncPulseTimeWhen(::grpc::ServerContext* context, const SetSyncPulseTimeWhenRequest* request, SetSyncPulseTimeWhenResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto data = convert_from_grpc(request->data()); + auto status = library_->SetSyncPulseTimeWhen(task, data); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetTimingAttributeBool(::grpc::ServerContext* context, const SetTimingAttributeBoolRequest* request, SetTimingAttributeBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetTimingAttributeBoolRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TimingBoolAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTimingAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TimingBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTimingAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } + + bool32 value = request->value(); + auto status = library_->SetTimingAttributeBool(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetTimingAttributeDouble(::grpc::ServerContext* context, const SetTimingAttributeDoubleRequest* request, SetTimingAttributeDoubleResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetTimingAttributeDoubleRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TimingDoubleAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTimingAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TimingDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTimingAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } + + float64 value = request->value(); + auto status = library_->SetTimingAttributeDouble(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetTimingAttributeExBool(::grpc::ServerContext* context, const SetTimingAttributeExBoolRequest* request, SetTimingAttributeExBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto device_names_mbcs = convert_from_grpc(request->device_names()); + auto device_names = device_names_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetTimingAttributeExBoolRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TimingBoolAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTimingAttributeExBoolRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TimingBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTimingAttributeExBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } + + bool32 value = request->value(); + auto status = library_->SetTimingAttributeExBool(task, device_names, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetTimingAttributeExDouble(::grpc::ServerContext* context, const SetTimingAttributeExDoubleRequest* request, SetTimingAttributeExDoubleResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto device_names_mbcs = convert_from_grpc(request->device_names()); + auto device_names = device_names_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetTimingAttributeExDoubleRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TimingDoubleAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTimingAttributeExDoubleRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TimingDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTimingAttributeExDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } + + float64 value = request->value(); + auto status = library_->SetTimingAttributeExDouble(task, device_names, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetTimingAttributeExInt32(::grpc::ServerContext* context, const SetTimingAttributeExInt32Request* request, SetTimingAttributeExInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto device_names_mbcs = convert_from_grpc(request->device_names()); + auto device_names = device_names_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetTimingAttributeExInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TimingInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTimingAttributeExInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TimingInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTimingAttributeExInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } + + int32 value; + switch (request->value_enum_case()) { + case nidaqmx_grpc::SetTimingAttributeExInt32Request::ValueEnumCase::kValue: { + value = static_cast(request->value()); + break; + } + case nidaqmx_grpc::SetTimingAttributeExInt32Request::ValueEnumCase::kValueRaw: { + value = static_cast(request->value_raw()); + break; + } + case nidaqmx_grpc::SetTimingAttributeExInt32Request::ValueEnumCase::VALUE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for value was not specified or out of range"); + break; + } + } + + auto status = library_->SetTimingAttributeExInt32(task, device_names, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetTimingAttributeExString(::grpc::ServerContext* context, const SetTimingAttributeExStringRequest* request, SetTimingAttributeExStringResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto device_names_mbcs = convert_from_grpc(request->device_names()); + auto device_names = device_names_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetTimingAttributeExStringRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TimingStringAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTimingAttributeExStringRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TimingStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTimingAttributeExStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } + + auto value_mbcs = convert_from_grpc(request->value()); + auto value = value_mbcs.c_str(); + auto status = library_->SetTimingAttributeExString(task, device_names, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetTimingAttributeExTimestamp(::grpc::ServerContext* context, const SetTimingAttributeExTimestampRequest* request, SetTimingAttributeExTimestampResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto device_names_mbcs = convert_from_grpc(request->device_names()); + auto device_names = device_names_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetTimingAttributeExTimestampRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TimingTimestampAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTimingAttributeExTimestampRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TimingTimestampAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTimingAttributeExTimestampRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } + + auto value = convert_from_grpc(request->value()); + auto status = library_->SetTimingAttributeExTimestamp(task, device_names, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetTimingAttributeExUInt32(::grpc::ServerContext* context, const SetTimingAttributeExUInt32Request* request, SetTimingAttributeExUInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto device_names_mbcs = convert_from_grpc(request->device_names()); + auto device_names = device_names_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetTimingAttributeExUInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TimingUInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTimingAttributeExUInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TimingUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTimingAttributeExUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } + + uInt32 value = request->value(); + auto status = library_->SetTimingAttributeExUInt32(task, device_names, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetTimingAttributeExUInt64(::grpc::ServerContext* context, const SetTimingAttributeExUInt64Request* request, SetTimingAttributeExUInt64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto device_names_mbcs = convert_from_grpc(request->device_names()); + auto device_names = device_names_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetTimingAttributeExUInt64Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TimingUInt64Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTimingAttributeExUInt64Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TimingUInt64Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTimingAttributeExUInt64Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } + + uInt64 value = request->value(); + auto status = library_->SetTimingAttributeExUInt64(task, device_names, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetTimingAttributeInt32(::grpc::ServerContext* context, const SetTimingAttributeInt32Request* request, SetTimingAttributeInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetTimingAttributeInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TimingInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTimingAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TimingInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTimingAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } + + int32 value; + switch (request->value_enum_case()) { + case nidaqmx_grpc::SetTimingAttributeInt32Request::ValueEnumCase::kValue: { + value = static_cast(request->value()); + break; + } + case nidaqmx_grpc::SetTimingAttributeInt32Request::ValueEnumCase::kValueRaw: { + value = static_cast(request->value_raw()); + break; + } + case nidaqmx_grpc::SetTimingAttributeInt32Request::ValueEnumCase::VALUE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for value was not specified or out of range"); + break; + } + } + + auto status = library_->SetTimingAttributeInt32(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetTimingAttributeString(::grpc::ServerContext* context, const SetTimingAttributeStringRequest* request, SetTimingAttributeStringResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetTimingAttributeStringRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TimingStringAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTimingAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TimingStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTimingAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } + + auto value_mbcs = convert_from_grpc(request->value()); + auto value = value_mbcs.c_str(); + auto status = library_->SetTimingAttributeString(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetTimingAttributeTimestamp(::grpc::ServerContext* context, const SetTimingAttributeTimestampRequest* request, SetTimingAttributeTimestampResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetTimingAttributeTimestampRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TimingTimestampAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTimingAttributeTimestampRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TimingTimestampAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTimingAttributeTimestampRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } + + auto value = convert_from_grpc(request->value()); + auto status = library_->SetTimingAttributeTimestamp(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetTimingAttributeUInt32(::grpc::ServerContext* context, const SetTimingAttributeUInt32Request* request, SetTimingAttributeUInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetTimingAttributeUInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TimingUInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTimingAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TimingUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTimingAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } + + uInt32 value = request->value(); + auto status = library_->SetTimingAttributeUInt32(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetTimingAttributeUInt64(::grpc::ServerContext* context, const SetTimingAttributeUInt64Request* request, SetTimingAttributeUInt64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetTimingAttributeUInt64Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TimingUInt64Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTimingAttributeUInt64Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TimingUInt64Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTimingAttributeUInt64Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } + + uInt64 value = request->value(); + auto status = library_->SetTimingAttributeUInt64(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetTrigAttributeBool(::grpc::ServerContext* context, const SetTrigAttributeBoolRequest* request, SetTrigAttributeBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetTrigAttributeBoolRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TriggerBoolAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTrigAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TriggerBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTrigAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } + + bool32 value = request->value(); + auto status = library_->SetTrigAttributeBool(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetTrigAttributeDouble(::grpc::ServerContext* context, const SetTrigAttributeDoubleRequest* request, SetTrigAttributeDoubleResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetTrigAttributeDoubleRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TriggerDoubleAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTrigAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TriggerDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTrigAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } + + float64 value = request->value(); + auto status = library_->SetTrigAttributeDouble(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetTrigAttributeDoubleArray(::grpc::ServerContext* context, const SetTrigAttributeDoubleArrayRequest* request, SetTrigAttributeDoubleArrayResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetTrigAttributeDoubleArrayRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TriggerDoubleArrayAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTrigAttributeDoubleArrayRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TriggerDoubleArrayAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTrigAttributeDoubleArrayRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } + + auto value = const_cast(request->value().data()); + uInt32 size = static_cast(request->value().size()); + auto status = library_->SetTrigAttributeDoubleArray(task, attribute, value, size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetTrigAttributeInt32(::grpc::ServerContext* context, const SetTrigAttributeInt32Request* request, SetTrigAttributeInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetTrigAttributeInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TriggerInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTrigAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TriggerInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTrigAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } + + int32 value; + switch (request->value_enum_case()) { + case nidaqmx_grpc::SetTrigAttributeInt32Request::ValueEnumCase::kValue: { + value = static_cast(request->value()); + break; + } + case nidaqmx_grpc::SetTrigAttributeInt32Request::ValueEnumCase::kValueRaw: { + value = static_cast(request->value_raw()); + break; + } + case nidaqmx_grpc::SetTrigAttributeInt32Request::ValueEnumCase::VALUE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for value was not specified or out of range"); + break; + } + } + + auto status = library_->SetTrigAttributeInt32(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetTrigAttributeInt32Array(::grpc::ServerContext* context, const SetTrigAttributeInt32ArrayRequest* request, SetTrigAttributeInt32ArrayResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetTrigAttributeInt32ArrayRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TriggerInt32ArrayAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTrigAttributeInt32ArrayRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TriggerInt32ArrayAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTrigAttributeInt32ArrayRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } + + auto value = reinterpret_cast(request->value().data()); + uInt32 size = static_cast(request->value().size()); + auto status = library_->SetTrigAttributeInt32Array(task, attribute, value, size); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetTrigAttributeString(::grpc::ServerContext* context, const SetTrigAttributeStringRequest* request, SetTrigAttributeStringResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetTrigAttributeStringRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TriggerStringAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTrigAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TriggerStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTrigAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } + + auto value_mbcs = convert_from_grpc(request->value()); + auto value = value_mbcs.c_str(); + auto status = library_->SetTrigAttributeString(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetTrigAttributeTimestamp(::grpc::ServerContext* context, const SetTrigAttributeTimestampRequest* request, SetTrigAttributeTimestampResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetTrigAttributeTimestampRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TriggerTimestampAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTrigAttributeTimestampRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TriggerTimestampAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTrigAttributeTimestampRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } + + auto value = convert_from_grpc(request->value()); + auto status = library_->SetTrigAttributeTimestamp(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetTrigAttributeUInt32(::grpc::ServerContext* context, const SetTrigAttributeUInt32Request* request, SetTrigAttributeUInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetTrigAttributeUInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::TriggerUInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTrigAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::TriggerUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetTrigAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } + + uInt32 value = request->value(); + auto status = library_->SetTrigAttributeUInt32(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetWatchdogAttributeBool(::grpc::ServerContext* context, const SetWatchdogAttributeBoolRequest* request, SetWatchdogAttributeBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto lines_mbcs = convert_from_grpc(request->lines()); + auto lines = lines_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetWatchdogAttributeBoolRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::WatchdogBoolAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetWatchdogAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::WatchdogBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetWatchdogAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } + + bool32 value = request->value(); + auto status = library_->SetWatchdogAttributeBool(task, lines, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetWatchdogAttributeDouble(::grpc::ServerContext* context, const SetWatchdogAttributeDoubleRequest* request, SetWatchdogAttributeDoubleResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto lines_mbcs = convert_from_grpc(request->lines()); + auto lines = lines_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetWatchdogAttributeDoubleRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::WatchdogDoubleAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetWatchdogAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::WatchdogDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetWatchdogAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } + + float64 value = request->value(); + auto status = library_->SetWatchdogAttributeDouble(task, lines, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetWatchdogAttributeInt32(::grpc::ServerContext* context, const SetWatchdogAttributeInt32Request* request, SetWatchdogAttributeInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto lines_mbcs = convert_from_grpc(request->lines()); + auto lines = lines_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetWatchdogAttributeInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::WatchdogInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetWatchdogAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::WatchdogInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetWatchdogAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } + + int32 value; + switch (request->value_enum_case()) { + case nidaqmx_grpc::SetWatchdogAttributeInt32Request::ValueEnumCase::kValue: { + value = static_cast(request->value()); + break; + } + case nidaqmx_grpc::SetWatchdogAttributeInt32Request::ValueEnumCase::kValueRaw: { + value = static_cast(request->value_raw()); + break; + } + case nidaqmx_grpc::SetWatchdogAttributeInt32Request::ValueEnumCase::VALUE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for value was not specified or out of range"); + break; + } + } + + auto status = library_->SetWatchdogAttributeInt32(task, lines, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetWatchdogAttributeString(::grpc::ServerContext* context, const SetWatchdogAttributeStringRequest* request, SetWatchdogAttributeStringResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto lines_mbcs = convert_from_grpc(request->lines()); + auto lines = lines_mbcs.c_str(); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetWatchdogAttributeStringRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::WatchdogStringAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetWatchdogAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::WatchdogStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetWatchdogAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } + + auto value_mbcs = convert_from_grpc(request->value()); + auto value = value_mbcs.c_str(); + auto status = library_->SetWatchdogAttributeString(task, lines, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetWriteAttributeBool(::grpc::ServerContext* context, const SetWriteAttributeBoolRequest* request, SetWriteAttributeBoolResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetWriteAttributeBoolRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::WriteBoolAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetWriteAttributeBoolRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::WriteBoolAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetWriteAttributeBoolRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } + + bool32 value = request->value(); + auto status = library_->SetWriteAttributeBool(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetWriteAttributeDouble(::grpc::ServerContext* context, const SetWriteAttributeDoubleRequest* request, SetWriteAttributeDoubleResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetWriteAttributeDoubleRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::WriteDoubleAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetWriteAttributeDoubleRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::WriteDoubleAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetWriteAttributeDoubleRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } + + float64 value = request->value(); + auto status = library_->SetWriteAttributeDouble(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetWriteAttributeInt32(::grpc::ServerContext* context, const SetWriteAttributeInt32Request* request, SetWriteAttributeInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetWriteAttributeInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::WriteInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetWriteAttributeInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::WriteInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetWriteAttributeInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } + + int32 value; + switch (request->value_enum_case()) { + case nidaqmx_grpc::SetWriteAttributeInt32Request::ValueEnumCase::kValue: { + value = static_cast(request->value()); + break; + } + case nidaqmx_grpc::SetWriteAttributeInt32Request::ValueEnumCase::kValueRaw: { + value = static_cast(request->value_raw()); + break; + } + case nidaqmx_grpc::SetWriteAttributeInt32Request::ValueEnumCase::VALUE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for value was not specified or out of range"); + break; + } + } + + auto status = library_->SetWriteAttributeInt32(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetWriteAttributeString(::grpc::ServerContext* context, const SetWriteAttributeStringRequest* request, SetWriteAttributeStringResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetWriteAttributeStringRequest::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::WriteStringAttribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetWriteAttributeStringRequest::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::WriteStringAttribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetWriteAttributeStringRequest::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } + + auto value_mbcs = convert_from_grpc(request->value()); + auto value = value_mbcs.c_str(); + auto status = library_->SetWriteAttributeString(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginWriteAnalogF64(::grpc::ServerContext* context, const BeginWriteAnalogF64Request* request, BeginWriteAnalogF64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - bool32 auto_start = request->auto_start(); - float64 timeout = request->timeout(); - int32 data_layout; - switch (request->data_layout_enum_case()) { - case nidaqmx_grpc::BeginWriteAnalogF64Request::DataLayoutEnumCase::kDataLayout: { - data_layout = static_cast(request->data_layout()); - break; - } - case nidaqmx_grpc::BeginWriteAnalogF64Request::DataLayoutEnumCase::kDataLayoutRaw: { - data_layout = static_cast(request->data_layout_raw()); - break; - } - case nidaqmx_grpc::BeginWriteAnalogF64Request::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); - break; - } - } - - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->num_samps_per_chan = num_samps_per_chan; - data->auto_start = auto_start; - data->timeout = timeout; - data->data_layout = data_layout; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteAnalogF64", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetWriteAttributeUInt32(::grpc::ServerContext* context, const SetWriteAttributeUInt32Request* request, SetWriteAttributeUInt32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetWriteAttributeUInt32Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::WriteUInt32Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetWriteAttributeUInt32Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::WriteUInt32Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetWriteAttributeUInt32Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } + + uInt32 value = request->value(); + auto status = library_->SetWriteAttributeUInt32(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::SetWriteAttributeUInt64(::grpc::ServerContext* context, const SetWriteAttributeUInt64Request* request, SetWriteAttributeUInt64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 attribute; + switch (request->attribute_enum_case()) { + case nidaqmx_grpc::SetWriteAttributeUInt64Request::AttributeEnumCase::kAttribute: { + attribute = static_cast(request->attribute()); + attribute = nidaqmx_grpc::WriteUInt64Attribute_IsValid(attribute) ? attribute : 0; + break; + } + case nidaqmx_grpc::SetWriteAttributeUInt64Request::AttributeEnumCase::kAttributeRaw: { + attribute = static_cast(request->attribute_raw()); + auto attribute_is_valid = nidaqmx_grpc::WriteUInt64Attribute_IsValid(attribute) || feature_toggles_.is_allow_undefined_attributes_enabled; + attribute = attribute_is_valid ? attribute : 0; + break; + } + case nidaqmx_grpc::SetWriteAttributeUInt64Request::AttributeEnumCase::ATTRIBUTE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for attribute was not specified or out of range"); + break; + } + } + + uInt64 value = request->value(); + auto status = library_->SetWriteAttributeUInt64(task, attribute, value); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::WriteAnalogScalarF64(::grpc::ServerContext* context, const WriteAnalogScalarF64Request* request, WriteAnalogScalarF64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - bool32 auto_start = request->auto_start(); - float64 timeout = request->timeout(); - float64 value = request->value(); - auto reserved = nullptr; - auto status = library_->WriteAnalogScalarF64(task, auto_start, timeout, value, reserved); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::StartNewFile(::grpc::ServerContext* context, const StartNewFileRequest* request, StartNewFileResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto file_path_mbcs = convert_from_grpc(request->file_path()); + auto file_path = file_path_mbcs.c_str(); + auto status = library_->StartNewFile(task, file_path); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::StartTask(::grpc::ServerContext* context, const StartTaskRequest* request, StartTaskResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto status = library_->StartTask(task); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginWriteAnalogScalarF64(::grpc::ServerContext* context, const BeginWriteAnalogScalarF64Request* request, BeginWriteAnalogScalarF64Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - bool32 auto_start = request->auto_start(); - float64 timeout = request->timeout(); - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->auto_start = auto_start; - data->timeout = timeout; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteAnalogScalarF64", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::StopTask(::grpc::ServerContext* context, const StopTaskRequest* request, StopTaskResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto status = library_->StopTask(task); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::TaskControl(::grpc::ServerContext* context, const TaskControlRequest* request, TaskControlResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 action; + switch (request->action_enum_case()) { + case nidaqmx_grpc::TaskControlRequest::ActionEnumCase::kAction: { + action = static_cast(request->action()); + break; + } + case nidaqmx_grpc::TaskControlRequest::ActionEnumCase::kActionRaw: { + action = static_cast(request->action_raw()); + break; + } + case nidaqmx_grpc::TaskControlRequest::ActionEnumCase::ACTION_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for action was not specified or out of range"); + break; + } + } + + auto status = library_->TaskControl(task, action); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::WriteBinaryI16(::grpc::ServerContext* context, const WriteBinaryI16Request* request, WriteBinaryI16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - bool32 auto_start = request->auto_start(); - float64 timeout = request->timeout(); - int32 data_layout; - switch (request->data_layout_enum_case()) { - case nidaqmx_grpc::WriteBinaryI16Request::DataLayoutEnumCase::kDataLayout: { - data_layout = static_cast(request->data_layout()); - break; - } - case nidaqmx_grpc::WriteBinaryI16Request::DataLayoutEnumCase::kDataLayoutRaw: { - data_layout = static_cast(request->data_layout_raw()); - break; - } - case nidaqmx_grpc::WriteBinaryI16Request::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); - break; - } - } - - auto write_array_raw = request->write_array(); - auto write_array = std::vector(); - write_array.reserve(write_array_raw.size()); - std::transform( + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::TristateOutputTerm(::grpc::ServerContext* context, const TristateOutputTermRequest* request, TristateOutputTermResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto output_terminal_mbcs = convert_from_grpc(request->output_terminal()); + auto output_terminal = output_terminal_mbcs.c_str(); + auto status = library_->TristateOutputTerm(output_terminal); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::UnregisterDoneEvent(::grpc::ServerContext* context, const UnregisterDoneEventRequest* request, UnregisterDoneEventResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + auto options = 0U; + auto callback_function = nullptr; + auto callback_data = nullptr; + auto status = library_->UnregisterDoneEvent(task, options, callback_function, callback_data); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::UnregisterEveryNSamplesEvent(::grpc::ServerContext* context, const UnregisterEveryNSamplesEventRequest* request, UnregisterEveryNSamplesEventResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 every_n_samples_event_type; + switch (request->every_n_samples_event_type_enum_case()) { + case nidaqmx_grpc::UnregisterEveryNSamplesEventRequest::EveryNSamplesEventTypeEnumCase::kEveryNSamplesEventType: { + every_n_samples_event_type = static_cast(request->every_n_samples_event_type()); + break; + } + case nidaqmx_grpc::UnregisterEveryNSamplesEventRequest::EveryNSamplesEventTypeEnumCase::kEveryNSamplesEventTypeRaw: { + every_n_samples_event_type = static_cast(request->every_n_samples_event_type_raw()); + break; + } + case nidaqmx_grpc::UnregisterEveryNSamplesEventRequest::EveryNSamplesEventTypeEnumCase::EVERY_N_SAMPLES_EVENT_TYPE_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for every_n_samples_event_type was not specified or out of range"); + break; + } + } + + auto n_samples = 0U; + auto options = 0U; + auto callback_function = nullptr; + auto callback_data = nullptr; + auto status = library_->UnregisterEveryNSamplesEvent(task, every_n_samples_event_type, n_samples, options, callback_function, callback_data); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::UnregisterSignalEvent(::grpc::ServerContext* context, const UnregisterSignalEventRequest* request, UnregisterSignalEventResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 signal_id; + switch (request->signal_id_enum_case()) { + case nidaqmx_grpc::UnregisterSignalEventRequest::SignalIdEnumCase::kSignalId: { + signal_id = static_cast(request->signal_id()); + break; + } + case nidaqmx_grpc::UnregisterSignalEventRequest::SignalIdEnumCase::kSignalIdRaw: { + signal_id = static_cast(request->signal_id_raw()); + break; + } + case nidaqmx_grpc::UnregisterSignalEventRequest::SignalIdEnumCase::SIGNAL_ID_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for signal_id was not specified or out of range"); + break; + } + } + + auto options = 0U; + auto callback_function = nullptr; + auto callback_data = nullptr; + auto status = library_->UnregisterSignalEvent(task, signal_id, options, callback_function, callback_data); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::UnreserveNetworkDevice(::grpc::ServerContext* context, const UnreserveNetworkDeviceRequest* request, UnreserveNetworkDeviceResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto device_name_mbcs = convert_from_grpc(request->device_name()); + auto device_name = device_name_mbcs.c_str(); + auto status = library_->UnreserveNetworkDevice(device_name); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::WaitForNextSampleClock(::grpc::ServerContext* context, const WaitForNextSampleClockRequest* request, WaitForNextSampleClockResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + float64 timeout = request->timeout(); + bool32 is_late {}; + auto status = library_->WaitForNextSampleClock(task, timeout, &is_late); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + response->set_is_late(is_late); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginWaitForNextSampleClock(::grpc::ServerContext* context, const BeginWaitForNextSampleClockRequest* request, BeginWaitForNextSampleClockResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + float64 timeout = request->timeout(); + + auto data = std::make_unique(); + data->task = task; + data->timeout = timeout; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWaitForNextSampleClock", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::WaitForValidTimestamp(::grpc::ServerContext* context, const WaitForValidTimestampRequest* request, WaitForValidTimestampResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 timestamp_event; + switch (request->timestamp_event_enum_case()) { + case nidaqmx_grpc::WaitForValidTimestampRequest::TimestampEventEnumCase::kTimestampEvent: { + timestamp_event = static_cast(request->timestamp_event()); + break; + } + case nidaqmx_grpc::WaitForValidTimestampRequest::TimestampEventEnumCase::kTimestampEventRaw: { + timestamp_event = static_cast(request->timestamp_event_raw()); + break; + } + case nidaqmx_grpc::WaitForValidTimestampRequest::TimestampEventEnumCase::TIMESTAMP_EVENT_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for timestamp_event was not specified or out of range"); + break; + } + } + + float64 timeout = request->timeout(); + CVIAbsoluteTime timestamp {}; + auto status = library_->WaitForValidTimestamp(task, timestamp_event, timeout, ×tamp); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + convert_to_grpc(timestamp, response->mutable_timestamp()); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::WaitUntilTaskDone(::grpc::ServerContext* context, const WaitUntilTaskDoneRequest* request, WaitUntilTaskDoneResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + float64 time_to_wait = request->time_to_wait(); + auto status = library_->WaitUntilTaskDone(task, time_to_wait); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::WriteAnalogF64(::grpc::ServerContext* context, const WriteAnalogF64Request* request, WriteAnalogF64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + int32 data_layout; + switch (request->data_layout_enum_case()) { + case nidaqmx_grpc::WriteAnalogF64Request::DataLayoutEnumCase::kDataLayout: { + data_layout = static_cast(request->data_layout()); + break; + } + case nidaqmx_grpc::WriteAnalogF64Request::DataLayoutEnumCase::kDataLayoutRaw: { + data_layout = static_cast(request->data_layout_raw()); + break; + } + case nidaqmx_grpc::WriteAnalogF64Request::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); + break; + } + } + + auto write_array = const_cast(request->write_array().data()); + auto reserved = nullptr; + int32 samps_per_chan_written {}; + auto status = library_->WriteAnalogF64(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array, &samps_per_chan_written, reserved); + context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(samps_per_chan_written)); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + response->set_samps_per_chan_written(samps_per_chan_written); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginWriteAnalogF64(::grpc::ServerContext* context, const BeginWriteAnalogF64Request* request, BeginWriteAnalogF64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + int32 data_layout; + switch (request->data_layout_enum_case()) { + case nidaqmx_grpc::BeginWriteAnalogF64Request::DataLayoutEnumCase::kDataLayout: { + data_layout = static_cast(request->data_layout()); + break; + } + case nidaqmx_grpc::BeginWriteAnalogF64Request::DataLayoutEnumCase::kDataLayoutRaw: { + data_layout = static_cast(request->data_layout_raw()); + break; + } + case nidaqmx_grpc::BeginWriteAnalogF64Request::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); + break; + } + } + + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->auto_start = auto_start; + data->timeout = timeout; + data->data_layout = data_layout; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteAnalogF64", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::WriteAnalogScalarF64(::grpc::ServerContext* context, const WriteAnalogScalarF64Request* request, WriteAnalogScalarF64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + float64 value = request->value(); + auto reserved = nullptr; + auto status = library_->WriteAnalogScalarF64(task, auto_start, timeout, value, reserved); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginWriteAnalogScalarF64(::grpc::ServerContext* context, const BeginWriteAnalogScalarF64Request* request, BeginWriteAnalogScalarF64Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->auto_start = auto_start; + data->timeout = timeout; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteAnalogScalarF64", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::WriteBinaryI16(::grpc::ServerContext* context, const WriteBinaryI16Request* request, WriteBinaryI16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + int32 data_layout; + switch (request->data_layout_enum_case()) { + case nidaqmx_grpc::WriteBinaryI16Request::DataLayoutEnumCase::kDataLayout: { + data_layout = static_cast(request->data_layout()); + break; + } + case nidaqmx_grpc::WriteBinaryI16Request::DataLayoutEnumCase::kDataLayoutRaw: { + data_layout = static_cast(request->data_layout_raw()); + break; + } + case nidaqmx_grpc::WriteBinaryI16Request::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); + break; + } + } + + auto write_array_raw = request->write_array(); + auto write_array = std::vector(); + write_array.reserve(write_array_raw.size()); + std::transform( write_array_raw.begin(), write_array_raw.end(), std::back_inserter(write_array), [](auto x) { - if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { - std::string message("value "); - message.append(std::to_string(x)); - message.append(" doesn't fit in datatype "); - message.append("int16"); - throw nidevice_grpc::ValueOutOfRangeException(message); - } - return static_cast(x); + if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { + std::string message("value "); + message.append(std::to_string(x)); + message.append(" doesn't fit in datatype "); + message.append("int16"); + throw nidevice_grpc::ValueOutOfRangeException(message); + } + return static_cast(x); }); - auto reserved = nullptr; - int32 samps_per_chan_written{}; - auto status = library_->WriteBinaryI16(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array.data(), &samps_per_chan_written, reserved); - context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(samps_per_chan_written)); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + auto reserved = nullptr; + int32 samps_per_chan_written {}; + auto status = library_->WriteBinaryI16(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array.data(), &samps_per_chan_written, reserved); + context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(samps_per_chan_written)); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + response->set_samps_per_chan_written(samps_per_chan_written); + return ::grpc::Status::OK; } - response->set_status(status); - response->set_samps_per_chan_written(samps_per_chan_written); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginWriteBinaryI16(::grpc::ServerContext* context, const BeginWriteBinaryI16Request* request, BeginWriteBinaryI16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + int32 data_layout; + switch (request->data_layout_enum_case()) { + case nidaqmx_grpc::BeginWriteBinaryI16Request::DataLayoutEnumCase::kDataLayout: { + data_layout = static_cast(request->data_layout()); + break; + } + case nidaqmx_grpc::BeginWriteBinaryI16Request::DataLayoutEnumCase::kDataLayoutRaw: { + data_layout = static_cast(request->data_layout_raw()); + break; + } + case nidaqmx_grpc::BeginWriteBinaryI16Request::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginWriteBinaryI16(::grpc::ServerContext* context, const BeginWriteBinaryI16Request* request, BeginWriteBinaryI16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - bool32 auto_start = request->auto_start(); - float64 timeout = request->timeout(); - int32 data_layout; - switch (request->data_layout_enum_case()) { - case nidaqmx_grpc::BeginWriteBinaryI16Request::DataLayoutEnumCase::kDataLayout: { - data_layout = static_cast(request->data_layout()); - break; - } - case nidaqmx_grpc::BeginWriteBinaryI16Request::DataLayoutEnumCase::kDataLayoutRaw: { - data_layout = static_cast(request->data_layout_raw()); - break; - } - case nidaqmx_grpc::BeginWriteBinaryI16Request::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); - break; - } - } - - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->num_samps_per_chan = num_samps_per_chan; - data->auto_start = auto_start; - data->timeout = timeout; - data->data_layout = data_layout; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteBinaryI16", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + auto reserved = nullptr; -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::WriteBinaryI32(::grpc::ServerContext* context, const WriteBinaryI32Request* request, WriteBinaryI32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - bool32 auto_start = request->auto_start(); - float64 timeout = request->timeout(); - int32 data_layout; - switch (request->data_layout_enum_case()) { - case nidaqmx_grpc::WriteBinaryI32Request::DataLayoutEnumCase::kDataLayout: { - data_layout = static_cast(request->data_layout()); - break; - } - case nidaqmx_grpc::WriteBinaryI32Request::DataLayoutEnumCase::kDataLayoutRaw: { - data_layout = static_cast(request->data_layout_raw()); - break; - } - case nidaqmx_grpc::WriteBinaryI32Request::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); - break; - } - } - - auto write_array = reinterpret_cast(request->write_array().data()); - auto reserved = nullptr; - int32 samps_per_chan_written{}; - auto status = library_->WriteBinaryI32(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array, &samps_per_chan_written, reserved); - context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(samps_per_chan_written)); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_samps_per_chan_written(samps_per_chan_written); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->auto_start = auto_start; + data->timeout = timeout; + data->data_layout = data_layout; + data->reserved = reserved; + data->library = std::shared_ptr(library_); -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginWriteBinaryI32(::grpc::ServerContext* context, const BeginWriteBinaryI32Request* request, BeginWriteBinaryI32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - bool32 auto_start = request->auto_start(); - float64 timeout = request->timeout(); - int32 data_layout; - switch (request->data_layout_enum_case()) { - case nidaqmx_grpc::BeginWriteBinaryI32Request::DataLayoutEnumCase::kDataLayout: { - data_layout = static_cast(request->data_layout()); - break; - } - case nidaqmx_grpc::BeginWriteBinaryI32Request::DataLayoutEnumCase::kDataLayoutRaw: { - data_layout = static_cast(request->data_layout_raw()); - break; - } - case nidaqmx_grpc::BeginWriteBinaryI32Request::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); - break; - } - } - - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->num_samps_per_chan = num_samps_per_chan; - data->auto_start = auto_start; - data->timeout = timeout; - data->data_layout = data_layout; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteBinaryI32", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteBinaryI16", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::WriteBinaryI32(::grpc::ServerContext* context, const WriteBinaryI32Request* request, WriteBinaryI32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + int32 data_layout; + switch (request->data_layout_enum_case()) { + case nidaqmx_grpc::WriteBinaryI32Request::DataLayoutEnumCase::kDataLayout: { + data_layout = static_cast(request->data_layout()); + break; + } + case nidaqmx_grpc::WriteBinaryI32Request::DataLayoutEnumCase::kDataLayoutRaw: { + data_layout = static_cast(request->data_layout_raw()); + break; + } + case nidaqmx_grpc::WriteBinaryI32Request::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::WriteBinaryU16(::grpc::ServerContext* context, const WriteBinaryU16Request* request, WriteBinaryU16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - bool32 auto_start = request->auto_start(); - float64 timeout = request->timeout(); - int32 data_layout; - switch (request->data_layout_enum_case()) { - case nidaqmx_grpc::WriteBinaryU16Request::DataLayoutEnumCase::kDataLayout: { - data_layout = static_cast(request->data_layout()); - break; - } - case nidaqmx_grpc::WriteBinaryU16Request::DataLayoutEnumCase::kDataLayoutRaw: { - data_layout = static_cast(request->data_layout_raw()); - break; - } - case nidaqmx_grpc::WriteBinaryU16Request::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); - break; - } - } - - auto write_array_raw = request->write_array(); - auto write_array = std::vector(); - write_array.reserve(write_array_raw.size()); - std::transform( + auto write_array = reinterpret_cast(request->write_array().data()); + auto reserved = nullptr; + int32 samps_per_chan_written {}; + auto status = library_->WriteBinaryI32(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array, &samps_per_chan_written, reserved); + context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(samps_per_chan_written)); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + response->set_samps_per_chan_written(samps_per_chan_written); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginWriteBinaryI32(::grpc::ServerContext* context, const BeginWriteBinaryI32Request* request, BeginWriteBinaryI32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + int32 data_layout; + switch (request->data_layout_enum_case()) { + case nidaqmx_grpc::BeginWriteBinaryI32Request::DataLayoutEnumCase::kDataLayout: { + data_layout = static_cast(request->data_layout()); + break; + } + case nidaqmx_grpc::BeginWriteBinaryI32Request::DataLayoutEnumCase::kDataLayoutRaw: { + data_layout = static_cast(request->data_layout_raw()); + break; + } + case nidaqmx_grpc::BeginWriteBinaryI32Request::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); + break; + } + } + + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->auto_start = auto_start; + data->timeout = timeout; + data->data_layout = data_layout; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteBinaryI32", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::WriteBinaryU16(::grpc::ServerContext* context, const WriteBinaryU16Request* request, WriteBinaryU16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + int32 data_layout; + switch (request->data_layout_enum_case()) { + case nidaqmx_grpc::WriteBinaryU16Request::DataLayoutEnumCase::kDataLayout: { + data_layout = static_cast(request->data_layout()); + break; + } + case nidaqmx_grpc::WriteBinaryU16Request::DataLayoutEnumCase::kDataLayoutRaw: { + data_layout = static_cast(request->data_layout_raw()); + break; + } + case nidaqmx_grpc::WriteBinaryU16Request::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); + break; + } + } + + auto write_array_raw = request->write_array(); + auto write_array = std::vector(); + write_array.reserve(write_array_raw.size()); + std::transform( write_array_raw.begin(), write_array_raw.end(), std::back_inserter(write_array), [](auto x) { - if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { - std::string message("value "); - message.append(std::to_string(x)); - message.append(" doesn't fit in datatype "); - message.append("uInt16"); - throw nidevice_grpc::ValueOutOfRangeException(message); - } - return static_cast(x); + if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { + std::string message("value "); + message.append(std::to_string(x)); + message.append(" doesn't fit in datatype "); + message.append("uInt16"); + throw nidevice_grpc::ValueOutOfRangeException(message); + } + return static_cast(x); }); - auto reserved = nullptr; - int32 samps_per_chan_written{}; - auto status = library_->WriteBinaryU16(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array.data(), &samps_per_chan_written, reserved); - context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(samps_per_chan_written)); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + auto reserved = nullptr; + int32 samps_per_chan_written {}; + auto status = library_->WriteBinaryU16(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array.data(), &samps_per_chan_written, reserved); + context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(samps_per_chan_written)); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + response->set_samps_per_chan_written(samps_per_chan_written); + return ::grpc::Status::OK; } - response->set_status(status); - response->set_samps_per_chan_written(samps_per_chan_written); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginWriteBinaryU16(::grpc::ServerContext* context, const BeginWriteBinaryU16Request* request, BeginWriteBinaryU16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + int32 data_layout; + switch (request->data_layout_enum_case()) { + case nidaqmx_grpc::BeginWriteBinaryU16Request::DataLayoutEnumCase::kDataLayout: { + data_layout = static_cast(request->data_layout()); + break; + } + case nidaqmx_grpc::BeginWriteBinaryU16Request::DataLayoutEnumCase::kDataLayoutRaw: { + data_layout = static_cast(request->data_layout_raw()); + break; + } + case nidaqmx_grpc::BeginWriteBinaryU16Request::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginWriteBinaryU16(::grpc::ServerContext* context, const BeginWriteBinaryU16Request* request, BeginWriteBinaryU16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - bool32 auto_start = request->auto_start(); - float64 timeout = request->timeout(); - int32 data_layout; - switch (request->data_layout_enum_case()) { - case nidaqmx_grpc::BeginWriteBinaryU16Request::DataLayoutEnumCase::kDataLayout: { - data_layout = static_cast(request->data_layout()); - break; - } - case nidaqmx_grpc::BeginWriteBinaryU16Request::DataLayoutEnumCase::kDataLayoutRaw: { - data_layout = static_cast(request->data_layout_raw()); - break; - } - case nidaqmx_grpc::BeginWriteBinaryU16Request::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); - break; - } - } - - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->num_samps_per_chan = num_samps_per_chan; - data->auto_start = auto_start; - data->timeout = timeout; - data->data_layout = data_layout; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteBinaryU16", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + auto reserved = nullptr; -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::WriteBinaryU32(::grpc::ServerContext* context, const WriteBinaryU32Request* request, WriteBinaryU32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - bool32 auto_start = request->auto_start(); - float64 timeout = request->timeout(); - int32 data_layout; - switch (request->data_layout_enum_case()) { - case nidaqmx_grpc::WriteBinaryU32Request::DataLayoutEnumCase::kDataLayout: { - data_layout = static_cast(request->data_layout()); - break; - } - case nidaqmx_grpc::WriteBinaryU32Request::DataLayoutEnumCase::kDataLayoutRaw: { - data_layout = static_cast(request->data_layout_raw()); - break; - } - case nidaqmx_grpc::WriteBinaryU32Request::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); - break; - } - } - - auto write_array = reinterpret_cast(request->write_array().data()); - auto reserved = nullptr; - int32 samps_per_chan_written{}; - auto status = library_->WriteBinaryU32(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array, &samps_per_chan_written, reserved); - context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(samps_per_chan_written)); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_samps_per_chan_written(samps_per_chan_written); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->auto_start = auto_start; + data->timeout = timeout; + data->data_layout = data_layout; + data->reserved = reserved; + data->library = std::shared_ptr(library_); -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginWriteBinaryU32(::grpc::ServerContext* context, const BeginWriteBinaryU32Request* request, BeginWriteBinaryU32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - bool32 auto_start = request->auto_start(); - float64 timeout = request->timeout(); - int32 data_layout; - switch (request->data_layout_enum_case()) { - case nidaqmx_grpc::BeginWriteBinaryU32Request::DataLayoutEnumCase::kDataLayout: { - data_layout = static_cast(request->data_layout()); - break; - } - case nidaqmx_grpc::BeginWriteBinaryU32Request::DataLayoutEnumCase::kDataLayoutRaw: { - data_layout = static_cast(request->data_layout_raw()); - break; - } - case nidaqmx_grpc::BeginWriteBinaryU32Request::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); - break; - } - } - - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->num_samps_per_chan = num_samps_per_chan; - data->auto_start = auto_start; - data->timeout = timeout; - data->data_layout = data_layout; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteBinaryU32", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteBinaryU16", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::WriteBinaryU32(::grpc::ServerContext* context, const WriteBinaryU32Request* request, WriteBinaryU32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + int32 data_layout; + switch (request->data_layout_enum_case()) { + case nidaqmx_grpc::WriteBinaryU32Request::DataLayoutEnumCase::kDataLayout: { + data_layout = static_cast(request->data_layout()); + break; + } + case nidaqmx_grpc::WriteBinaryU32Request::DataLayoutEnumCase::kDataLayoutRaw: { + data_layout = static_cast(request->data_layout_raw()); + break; + } + case nidaqmx_grpc::WriteBinaryU32Request::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::WriteCtrFreq(::grpc::ServerContext* context, const WriteCtrFreqRequest* request, WriteCtrFreqResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - bool32 auto_start = request->auto_start(); - float64 timeout = request->timeout(); - int32 data_layout; - switch (request->data_layout_enum_case()) { - case nidaqmx_grpc::WriteCtrFreqRequest::DataLayoutEnumCase::kDataLayout: { - data_layout = static_cast(request->data_layout()); - break; - } - case nidaqmx_grpc::WriteCtrFreqRequest::DataLayoutEnumCase::kDataLayoutRaw: { - data_layout = static_cast(request->data_layout_raw()); - break; - } - case nidaqmx_grpc::WriteCtrFreqRequest::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); - break; - } - } - - auto frequency = const_cast(request->frequency().data()); - auto duty_cycle = const_cast(request->duty_cycle().data()); - auto reserved = nullptr; - int32 num_samps_per_chan_written{}; - auto status = library_->WriteCtrFreq(task, num_samps_per_chan, auto_start, timeout, data_layout, frequency, duty_cycle, &num_samps_per_chan_written, reserved); - context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(num_samps_per_chan_written)); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_num_samps_per_chan_written(num_samps_per_chan_written); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + auto write_array = reinterpret_cast(request->write_array().data()); + auto reserved = nullptr; + int32 samps_per_chan_written {}; + auto status = library_->WriteBinaryU32(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array, &samps_per_chan_written, reserved); + context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(samps_per_chan_written)); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + response->set_samps_per_chan_written(samps_per_chan_written); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginWriteBinaryU32(::grpc::ServerContext* context, const BeginWriteBinaryU32Request* request, BeginWriteBinaryU32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + int32 data_layout; + switch (request->data_layout_enum_case()) { + case nidaqmx_grpc::BeginWriteBinaryU32Request::DataLayoutEnumCase::kDataLayout: { + data_layout = static_cast(request->data_layout()); + break; + } + case nidaqmx_grpc::BeginWriteBinaryU32Request::DataLayoutEnumCase::kDataLayoutRaw: { + data_layout = static_cast(request->data_layout_raw()); + break; + } + case nidaqmx_grpc::BeginWriteBinaryU32Request::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginWriteCtrFreq(::grpc::ServerContext* context, const BeginWriteCtrFreqRequest* request, BeginWriteCtrFreqResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - bool32 auto_start = request->auto_start(); - float64 timeout = request->timeout(); - int32 data_layout; - switch (request->data_layout_enum_case()) { - case nidaqmx_grpc::BeginWriteCtrFreqRequest::DataLayoutEnumCase::kDataLayout: { - data_layout = static_cast(request->data_layout()); - break; - } - case nidaqmx_grpc::BeginWriteCtrFreqRequest::DataLayoutEnumCase::kDataLayoutRaw: { - data_layout = static_cast(request->data_layout_raw()); - break; - } - case nidaqmx_grpc::BeginWriteCtrFreqRequest::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); - break; - } - } - - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->num_samps_per_chan = num_samps_per_chan; - data->auto_start = auto_start; - data->timeout = timeout; - data->data_layout = data_layout; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteCtrFreq", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + auto reserved = nullptr; -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::WriteCtrFreqScalar(::grpc::ServerContext* context, const WriteCtrFreqScalarRequest* request, WriteCtrFreqScalarResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - bool32 auto_start = request->auto_start(); - float64 timeout = request->timeout(); - float64 frequency = request->frequency(); - float64 duty_cycle = request->duty_cycle(); - auto reserved = nullptr; - auto status = library_->WriteCtrFreqScalar(task, auto_start, timeout, frequency, duty_cycle, reserved); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->auto_start = auto_start; + data->timeout = timeout; + data->data_layout = data_layout; + data->reserved = reserved; + data->library = std::shared_ptr(library_); -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginWriteCtrFreqScalar(::grpc::ServerContext* context, const BeginWriteCtrFreqScalarRequest* request, BeginWriteCtrFreqScalarResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - bool32 auto_start = request->auto_start(); - float64 timeout = request->timeout(); - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->auto_start = auto_start; - data->timeout = timeout; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteCtrFreqScalar", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteBinaryU32", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::WriteCtrFreq(::grpc::ServerContext* context, const WriteCtrFreqRequest* request, WriteCtrFreqResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + int32 data_layout; + switch (request->data_layout_enum_case()) { + case nidaqmx_grpc::WriteCtrFreqRequest::DataLayoutEnumCase::kDataLayout: { + data_layout = static_cast(request->data_layout()); + break; + } + case nidaqmx_grpc::WriteCtrFreqRequest::DataLayoutEnumCase::kDataLayoutRaw: { + data_layout = static_cast(request->data_layout_raw()); + break; + } + case nidaqmx_grpc::WriteCtrFreqRequest::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::WriteCtrTicks(::grpc::ServerContext* context, const WriteCtrTicksRequest* request, WriteCtrTicksResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - bool32 auto_start = request->auto_start(); - float64 timeout = request->timeout(); - int32 data_layout; - switch (request->data_layout_enum_case()) { - case nidaqmx_grpc::WriteCtrTicksRequest::DataLayoutEnumCase::kDataLayout: { - data_layout = static_cast(request->data_layout()); - break; - } - case nidaqmx_grpc::WriteCtrTicksRequest::DataLayoutEnumCase::kDataLayoutRaw: { - data_layout = static_cast(request->data_layout_raw()); - break; - } - case nidaqmx_grpc::WriteCtrTicksRequest::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); - break; - } - } - - auto high_ticks = reinterpret_cast(request->high_ticks().data()); - auto low_ticks = reinterpret_cast(request->low_ticks().data()); - auto reserved = nullptr; - int32 num_samps_per_chan_written{}; - auto status = library_->WriteCtrTicks(task, num_samps_per_chan, auto_start, timeout, data_layout, high_ticks, low_ticks, &num_samps_per_chan_written, reserved); - context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(num_samps_per_chan_written)); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_num_samps_per_chan_written(num_samps_per_chan_written); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + auto frequency = const_cast(request->frequency().data()); + auto duty_cycle = const_cast(request->duty_cycle().data()); + auto reserved = nullptr; + int32 num_samps_per_chan_written {}; + auto status = library_->WriteCtrFreq(task, num_samps_per_chan, auto_start, timeout, data_layout, frequency, duty_cycle, &num_samps_per_chan_written, reserved); + context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(num_samps_per_chan_written)); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + response->set_num_samps_per_chan_written(num_samps_per_chan_written); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginWriteCtrFreq(::grpc::ServerContext* context, const BeginWriteCtrFreqRequest* request, BeginWriteCtrFreqResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + int32 data_layout; + switch (request->data_layout_enum_case()) { + case nidaqmx_grpc::BeginWriteCtrFreqRequest::DataLayoutEnumCase::kDataLayout: { + data_layout = static_cast(request->data_layout()); + break; + } + case nidaqmx_grpc::BeginWriteCtrFreqRequest::DataLayoutEnumCase::kDataLayoutRaw: { + data_layout = static_cast(request->data_layout_raw()); + break; + } + case nidaqmx_grpc::BeginWriteCtrFreqRequest::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginWriteCtrTicks(::grpc::ServerContext* context, const BeginWriteCtrTicksRequest* request, BeginWriteCtrTicksResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - bool32 auto_start = request->auto_start(); - float64 timeout = request->timeout(); - int32 data_layout; - switch (request->data_layout_enum_case()) { - case nidaqmx_grpc::BeginWriteCtrTicksRequest::DataLayoutEnumCase::kDataLayout: { - data_layout = static_cast(request->data_layout()); - break; - } - case nidaqmx_grpc::BeginWriteCtrTicksRequest::DataLayoutEnumCase::kDataLayoutRaw: { - data_layout = static_cast(request->data_layout_raw()); - break; - } - case nidaqmx_grpc::BeginWriteCtrTicksRequest::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); - break; - } - } - - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->num_samps_per_chan = num_samps_per_chan; - data->auto_start = auto_start; - data->timeout = timeout; - data->data_layout = data_layout; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteCtrTicks", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + auto reserved = nullptr; -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::WriteCtrTicksScalar(::grpc::ServerContext* context, const WriteCtrTicksScalarRequest* request, WriteCtrTicksScalarResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - bool32 auto_start = request->auto_start(); - float64 timeout = request->timeout(); - uInt32 high_ticks = request->high_ticks(); - uInt32 low_ticks = request->low_ticks(); - auto reserved = nullptr; - auto status = library_->WriteCtrTicksScalar(task, auto_start, timeout, high_ticks, low_ticks, reserved); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->auto_start = auto_start; + data->timeout = timeout; + data->data_layout = data_layout; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteCtrFreq", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::WriteCtrFreqScalar(::grpc::ServerContext* context, const WriteCtrFreqScalarRequest* request, WriteCtrFreqScalarResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + float64 frequency = request->frequency(); + float64 duty_cycle = request->duty_cycle(); + auto reserved = nullptr; + auto status = library_->WriteCtrFreqScalar(task, auto_start, timeout, frequency, duty_cycle, reserved); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginWriteCtrTicksScalar(::grpc::ServerContext* context, const BeginWriteCtrTicksScalarRequest* request, BeginWriteCtrTicksScalarResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - bool32 auto_start = request->auto_start(); - float64 timeout = request->timeout(); - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->auto_start = auto_start; - data->timeout = timeout; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteCtrTicksScalar", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginWriteCtrFreqScalar(::grpc::ServerContext* context, const BeginWriteCtrFreqScalarRequest* request, BeginWriteCtrFreqScalarResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->auto_start = auto_start; + data->timeout = timeout; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteCtrFreqScalar", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::WriteCtrTicks(::grpc::ServerContext* context, const WriteCtrTicksRequest* request, WriteCtrTicksResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + int32 data_layout; + switch (request->data_layout_enum_case()) { + case nidaqmx_grpc::WriteCtrTicksRequest::DataLayoutEnumCase::kDataLayout: { + data_layout = static_cast(request->data_layout()); + break; + } + case nidaqmx_grpc::WriteCtrTicksRequest::DataLayoutEnumCase::kDataLayoutRaw: { + data_layout = static_cast(request->data_layout_raw()); + break; + } + case nidaqmx_grpc::WriteCtrTicksRequest::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); + break; + } + } + + auto high_ticks = reinterpret_cast(request->high_ticks().data()); + auto low_ticks = reinterpret_cast(request->low_ticks().data()); + auto reserved = nullptr; + int32 num_samps_per_chan_written {}; + auto status = library_->WriteCtrTicks(task, num_samps_per_chan, auto_start, timeout, data_layout, high_ticks, low_ticks, &num_samps_per_chan_written, reserved); + context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(num_samps_per_chan_written)); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + response->set_num_samps_per_chan_written(num_samps_per_chan_written); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginWriteCtrTicks(::grpc::ServerContext* context, const BeginWriteCtrTicksRequest* request, BeginWriteCtrTicksResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + int32 data_layout; + switch (request->data_layout_enum_case()) { + case nidaqmx_grpc::BeginWriteCtrTicksRequest::DataLayoutEnumCase::kDataLayout: { + data_layout = static_cast(request->data_layout()); + break; + } + case nidaqmx_grpc::BeginWriteCtrTicksRequest::DataLayoutEnumCase::kDataLayoutRaw: { + data_layout = static_cast(request->data_layout_raw()); + break; + } + case nidaqmx_grpc::BeginWriteCtrTicksRequest::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); + break; + } + } + + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->auto_start = auto_start; + data->timeout = timeout; + data->data_layout = data_layout; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteCtrTicks", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::WriteCtrTicksScalar(::grpc::ServerContext* context, const WriteCtrTicksScalarRequest* request, WriteCtrTicksScalarResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + uInt32 high_ticks = request->high_ticks(); + uInt32 low_ticks = request->low_ticks(); + auto reserved = nullptr; + auto status = library_->WriteCtrTicksScalar(task, auto_start, timeout, high_ticks, low_ticks, reserved); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::WriteCtrTime(::grpc::ServerContext* context, const WriteCtrTimeRequest* request, WriteCtrTimeResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - bool32 auto_start = request->auto_start(); - float64 timeout = request->timeout(); - int32 data_layout; - switch (request->data_layout_enum_case()) { - case nidaqmx_grpc::WriteCtrTimeRequest::DataLayoutEnumCase::kDataLayout: { - data_layout = static_cast(request->data_layout()); - break; - } - case nidaqmx_grpc::WriteCtrTimeRequest::DataLayoutEnumCase::kDataLayoutRaw: { - data_layout = static_cast(request->data_layout_raw()); - break; - } - case nidaqmx_grpc::WriteCtrTimeRequest::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); - break; - } - } - - auto high_time = const_cast(request->high_time().data()); - auto low_time = const_cast(request->low_time().data()); - auto reserved = nullptr; - int32 num_samps_per_chan_written{}; - auto status = library_->WriteCtrTime(task, num_samps_per_chan, auto_start, timeout, data_layout, high_time, low_time, &num_samps_per_chan_written, reserved); - context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(num_samps_per_chan_written)); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_num_samps_per_chan_written(num_samps_per_chan_written); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginWriteCtrTicksScalar(::grpc::ServerContext* context, const BeginWriteCtrTicksScalarRequest* request, BeginWriteCtrTicksScalarResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->auto_start = auto_start; + data->timeout = timeout; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteCtrTicksScalar", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::WriteCtrTime(::grpc::ServerContext* context, const WriteCtrTimeRequest* request, WriteCtrTimeResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + int32 data_layout; + switch (request->data_layout_enum_case()) { + case nidaqmx_grpc::WriteCtrTimeRequest::DataLayoutEnumCase::kDataLayout: { + data_layout = static_cast(request->data_layout()); + break; + } + case nidaqmx_grpc::WriteCtrTimeRequest::DataLayoutEnumCase::kDataLayoutRaw: { + data_layout = static_cast(request->data_layout_raw()); + break; + } + case nidaqmx_grpc::WriteCtrTimeRequest::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); + break; + } + } + + auto high_time = const_cast(request->high_time().data()); + auto low_time = const_cast(request->low_time().data()); + auto reserved = nullptr; + int32 num_samps_per_chan_written {}; + auto status = library_->WriteCtrTime(task, num_samps_per_chan, auto_start, timeout, data_layout, high_time, low_time, &num_samps_per_chan_written, reserved); + context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(num_samps_per_chan_written)); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + response->set_num_samps_per_chan_written(num_samps_per_chan_written); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginWriteCtrTime(::grpc::ServerContext* context, const BeginWriteCtrTimeRequest* request, BeginWriteCtrTimeResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + int32 data_layout; + switch (request->data_layout_enum_case()) { + case nidaqmx_grpc::BeginWriteCtrTimeRequest::DataLayoutEnumCase::kDataLayout: { + data_layout = static_cast(request->data_layout()); + break; + } + case nidaqmx_grpc::BeginWriteCtrTimeRequest::DataLayoutEnumCase::kDataLayoutRaw: { + data_layout = static_cast(request->data_layout_raw()); + break; + } + case nidaqmx_grpc::BeginWriteCtrTimeRequest::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); + break; + } + } + + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->auto_start = auto_start; + data->timeout = timeout; + data->data_layout = data_layout; + data->reserved = reserved; + data->library = std::shared_ptr(library_); -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginWriteCtrTime(::grpc::ServerContext* context, const BeginWriteCtrTimeRequest* request, BeginWriteCtrTimeResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - bool32 auto_start = request->auto_start(); - float64 timeout = request->timeout(); - int32 data_layout; - switch (request->data_layout_enum_case()) { - case nidaqmx_grpc::BeginWriteCtrTimeRequest::DataLayoutEnumCase::kDataLayout: { - data_layout = static_cast(request->data_layout()); - break; - } - case nidaqmx_grpc::BeginWriteCtrTimeRequest::DataLayoutEnumCase::kDataLayoutRaw: { - data_layout = static_cast(request->data_layout_raw()); - break; - } - case nidaqmx_grpc::BeginWriteCtrTimeRequest::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); - break; - } - } - - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->num_samps_per_chan = num_samps_per_chan; - data->auto_start = auto_start; - data->timeout = timeout; - data->data_layout = data_layout; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteCtrTime", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteCtrTime", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::WriteCtrTimeScalar(::grpc::ServerContext* context, const WriteCtrTimeScalarRequest* request, WriteCtrTimeScalarResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - bool32 auto_start = request->auto_start(); - float64 timeout = request->timeout(); - float64 high_time = request->high_time(); - float64 low_time = request->low_time(); - auto reserved = nullptr; - auto status = library_->WriteCtrTimeScalar(task, auto_start, timeout, high_time, low_time, reserved); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::WriteCtrTimeScalar(::grpc::ServerContext* context, const WriteCtrTimeScalarRequest* request, WriteCtrTimeScalarResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + float64 high_time = request->high_time(); + float64 low_time = request->low_time(); + auto reserved = nullptr; + auto status = library_->WriteCtrTimeScalar(task, auto_start, timeout, high_time, low_time, reserved); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginWriteCtrTimeScalar(::grpc::ServerContext* context, const BeginWriteCtrTimeScalarRequest* request, BeginWriteCtrTimeScalarResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - bool32 auto_start = request->auto_start(); - float64 timeout = request->timeout(); - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->auto_start = auto_start; - data->timeout = timeout; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteCtrTimeScalar", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginWriteCtrTimeScalar(::grpc::ServerContext* context, const BeginWriteCtrTimeScalarRequest* request, BeginWriteCtrTimeScalarResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + auto reserved = nullptr; -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::WriteDigitalLines(::grpc::ServerContext* context, const WriteDigitalLinesRequest* request, WriteDigitalLinesResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - bool32 auto_start = request->auto_start(); - float64 timeout = request->timeout(); - int32 data_layout; - switch (request->data_layout_enum_case()) { - case nidaqmx_grpc::WriteDigitalLinesRequest::DataLayoutEnumCase::kDataLayout: { - data_layout = static_cast(request->data_layout()); - break; - } - case nidaqmx_grpc::WriteDigitalLinesRequest::DataLayoutEnumCase::kDataLayoutRaw: { - data_layout = static_cast(request->data_layout_raw()); - break; - } - case nidaqmx_grpc::WriteDigitalLinesRequest::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); - break; - } - } - - const uInt8* write_array = (const uInt8*)request->write_array().c_str(); - auto reserved = nullptr; - int32 samps_per_chan_written{}; - auto status = library_->WriteDigitalLines(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array, &samps_per_chan_written, reserved); - context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(samps_per_chan_written)); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_samps_per_chan_written(samps_per_chan_written); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + auto data = std::make_unique(); + data->task = task; + data->auto_start = auto_start; + data->timeout = timeout; + data->reserved = reserved; + data->library = std::shared_ptr(library_); -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginWriteDigitalLines(::grpc::ServerContext* context, const BeginWriteDigitalLinesRequest* request, BeginWriteDigitalLinesResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - bool32 auto_start = request->auto_start(); - float64 timeout = request->timeout(); - int32 data_layout; - switch (request->data_layout_enum_case()) { - case nidaqmx_grpc::BeginWriteDigitalLinesRequest::DataLayoutEnumCase::kDataLayout: { - data_layout = static_cast(request->data_layout()); - break; - } - case nidaqmx_grpc::BeginWriteDigitalLinesRequest::DataLayoutEnumCase::kDataLayoutRaw: { - data_layout = static_cast(request->data_layout_raw()); - break; - } - case nidaqmx_grpc::BeginWriteDigitalLinesRequest::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); - break; - } - } - - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->num_samps_per_chan = num_samps_per_chan; - data->auto_start = auto_start; - data->timeout = timeout; - data->data_layout = data_layout; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteDigitalLines", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteCtrTimeScalar", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::WriteDigitalLines(::grpc::ServerContext* context, const WriteDigitalLinesRequest* request, WriteDigitalLinesResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + int32 data_layout; + switch (request->data_layout_enum_case()) { + case nidaqmx_grpc::WriteDigitalLinesRequest::DataLayoutEnumCase::kDataLayout: { + data_layout = static_cast(request->data_layout()); + break; + } + case nidaqmx_grpc::WriteDigitalLinesRequest::DataLayoutEnumCase::kDataLayoutRaw: { + data_layout = static_cast(request->data_layout_raw()); + break; + } + case nidaqmx_grpc::WriteDigitalLinesRequest::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::WriteDigitalScalarU32(::grpc::ServerContext* context, const WriteDigitalScalarU32Request* request, WriteDigitalScalarU32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - bool32 auto_start = request->auto_start(); - float64 timeout = request->timeout(); - uInt32 value = request->value(); - auto reserved = nullptr; - auto status = library_->WriteDigitalScalarU32(task, auto_start, timeout, value, reserved); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + const uInt8* write_array = (const uInt8*)request->write_array().c_str(); + auto reserved = nullptr; + int32 samps_per_chan_written {}; + auto status = library_->WriteDigitalLines(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array, &samps_per_chan_written, reserved); + context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(samps_per_chan_written)); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + response->set_samps_per_chan_written(samps_per_chan_written); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginWriteDigitalLines(::grpc::ServerContext* context, const BeginWriteDigitalLinesRequest* request, BeginWriteDigitalLinesResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + int32 data_layout; + switch (request->data_layout_enum_case()) { + case nidaqmx_grpc::BeginWriteDigitalLinesRequest::DataLayoutEnumCase::kDataLayout: { + data_layout = static_cast(request->data_layout()); + break; + } + case nidaqmx_grpc::BeginWriteDigitalLinesRequest::DataLayoutEnumCase::kDataLayoutRaw: { + data_layout = static_cast(request->data_layout_raw()); + break; + } + case nidaqmx_grpc::BeginWriteDigitalLinesRequest::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginWriteDigitalScalarU32(::grpc::ServerContext* context, const BeginWriteDigitalScalarU32Request* request, BeginWriteDigitalScalarU32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - bool32 auto_start = request->auto_start(); - float64 timeout = request->timeout(); - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->auto_start = auto_start; - data->timeout = timeout; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteDigitalScalarU32", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->auto_start = auto_start; + data->timeout = timeout; + data->data_layout = data_layout; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteDigitalLines", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::WriteDigitalScalarU32(::grpc::ServerContext* context, const WriteDigitalScalarU32Request* request, WriteDigitalScalarU32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + uInt32 value = request->value(); + auto reserved = nullptr; + auto status = library_->WriteDigitalScalarU32(task, auto_start, timeout, value, reserved); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::WriteDigitalU16(::grpc::ServerContext* context, const WriteDigitalU16Request* request, WriteDigitalU16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - bool32 auto_start = request->auto_start(); - float64 timeout = request->timeout(); - int32 data_layout; - switch (request->data_layout_enum_case()) { - case nidaqmx_grpc::WriteDigitalU16Request::DataLayoutEnumCase::kDataLayout: { - data_layout = static_cast(request->data_layout()); - break; - } - case nidaqmx_grpc::WriteDigitalU16Request::DataLayoutEnumCase::kDataLayoutRaw: { - data_layout = static_cast(request->data_layout_raw()); - break; - } - case nidaqmx_grpc::WriteDigitalU16Request::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); - break; - } - } - - auto write_array_raw = request->write_array(); - auto write_array = std::vector(); - write_array.reserve(write_array_raw.size()); - std::transform( + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginWriteDigitalScalarU32(::grpc::ServerContext* context, const BeginWriteDigitalScalarU32Request* request, BeginWriteDigitalScalarU32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->auto_start = auto_start; + data->timeout = timeout; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteDigitalScalarU32", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::WriteDigitalU16(::grpc::ServerContext* context, const WriteDigitalU16Request* request, WriteDigitalU16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + int32 data_layout; + switch (request->data_layout_enum_case()) { + case nidaqmx_grpc::WriteDigitalU16Request::DataLayoutEnumCase::kDataLayout: { + data_layout = static_cast(request->data_layout()); + break; + } + case nidaqmx_grpc::WriteDigitalU16Request::DataLayoutEnumCase::kDataLayoutRaw: { + data_layout = static_cast(request->data_layout_raw()); + break; + } + case nidaqmx_grpc::WriteDigitalU16Request::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); + break; + } + } + + auto write_array_raw = request->write_array(); + auto write_array = std::vector(); + write_array.reserve(write_array_raw.size()); + std::transform( write_array_raw.begin(), write_array_raw.end(), std::back_inserter(write_array), [](auto x) { - if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { - std::string message("value "); - message.append(std::to_string(x)); - message.append(" doesn't fit in datatype "); - message.append("uInt16"); - throw nidevice_grpc::ValueOutOfRangeException(message); - } - return static_cast(x); + if (x < std::numeric_limits::min() || x > std::numeric_limits::max()) { + std::string message("value "); + message.append(std::to_string(x)); + message.append(" doesn't fit in datatype "); + message.append("uInt16"); + throw nidevice_grpc::ValueOutOfRangeException(message); + } + return static_cast(x); }); - auto reserved = nullptr; - int32 samps_per_chan_written{}; - auto status = library_->WriteDigitalU16(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array.data(), &samps_per_chan_written, reserved); - context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(samps_per_chan_written)); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); + auto reserved = nullptr; + int32 samps_per_chan_written {}; + auto status = library_->WriteDigitalU16(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array.data(), &samps_per_chan_written, reserved); + context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(samps_per_chan_written)); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + response->set_samps_per_chan_written(samps_per_chan_written); + return ::grpc::Status::OK; } - response->set_status(status); - response->set_samps_per_chan_written(samps_per_chan_written); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginWriteDigitalU16(::grpc::ServerContext* context, const BeginWriteDigitalU16Request* request, BeginWriteDigitalU16Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + int32 data_layout; + switch (request->data_layout_enum_case()) { + case nidaqmx_grpc::BeginWriteDigitalU16Request::DataLayoutEnumCase::kDataLayout: { + data_layout = static_cast(request->data_layout()); + break; + } + case nidaqmx_grpc::BeginWriteDigitalU16Request::DataLayoutEnumCase::kDataLayoutRaw: { + data_layout = static_cast(request->data_layout_raw()); + break; + } + case nidaqmx_grpc::BeginWriteDigitalU16Request::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginWriteDigitalU16(::grpc::ServerContext* context, const BeginWriteDigitalU16Request* request, BeginWriteDigitalU16Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - bool32 auto_start = request->auto_start(); - float64 timeout = request->timeout(); - int32 data_layout; - switch (request->data_layout_enum_case()) { - case nidaqmx_grpc::BeginWriteDigitalU16Request::DataLayoutEnumCase::kDataLayout: { - data_layout = static_cast(request->data_layout()); - break; - } - case nidaqmx_grpc::BeginWriteDigitalU16Request::DataLayoutEnumCase::kDataLayoutRaw: { - data_layout = static_cast(request->data_layout_raw()); - break; - } - case nidaqmx_grpc::BeginWriteDigitalU16Request::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); - break; - } - } - - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->num_samps_per_chan = num_samps_per_chan; - data->auto_start = auto_start; - data->timeout = timeout; - data->data_layout = data_layout; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteDigitalU16", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + auto reserved = nullptr; -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::WriteDigitalU32(::grpc::ServerContext* context, const WriteDigitalU32Request* request, WriteDigitalU32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - bool32 auto_start = request->auto_start(); - float64 timeout = request->timeout(); - int32 data_layout; - switch (request->data_layout_enum_case()) { - case nidaqmx_grpc::WriteDigitalU32Request::DataLayoutEnumCase::kDataLayout: { - data_layout = static_cast(request->data_layout()); - break; - } - case nidaqmx_grpc::WriteDigitalU32Request::DataLayoutEnumCase::kDataLayoutRaw: { - data_layout = static_cast(request->data_layout_raw()); - break; - } - case nidaqmx_grpc::WriteDigitalU32Request::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); - break; - } - } - - auto write_array = reinterpret_cast(request->write_array().data()); - auto reserved = nullptr; - int32 samps_per_chan_written{}; - auto status = library_->WriteDigitalU32(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array, &samps_per_chan_written, reserved); - context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(samps_per_chan_written)); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_samps_per_chan_written(samps_per_chan_written); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->auto_start = auto_start; + data->timeout = timeout; + data->data_layout = data_layout; + data->reserved = reserved; + data->library = std::shared_ptr(library_); -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginWriteDigitalU32(::grpc::ServerContext* context, const BeginWriteDigitalU32Request* request, BeginWriteDigitalU32Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - bool32 auto_start = request->auto_start(); - float64 timeout = request->timeout(); - int32 data_layout; - switch (request->data_layout_enum_case()) { - case nidaqmx_grpc::BeginWriteDigitalU32Request::DataLayoutEnumCase::kDataLayout: { - data_layout = static_cast(request->data_layout()); - break; - } - case nidaqmx_grpc::BeginWriteDigitalU32Request::DataLayoutEnumCase::kDataLayoutRaw: { - data_layout = static_cast(request->data_layout_raw()); - break; - } - case nidaqmx_grpc::BeginWriteDigitalU32Request::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); - break; - } - } - - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->num_samps_per_chan = num_samps_per_chan; - data->auto_start = auto_start; - data->timeout = timeout; - data->data_layout = data_layout; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteDigitalU32", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteDigitalU16", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::WriteDigitalU32(::grpc::ServerContext* context, const WriteDigitalU32Request* request, WriteDigitalU32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + int32 data_layout; + switch (request->data_layout_enum_case()) { + case nidaqmx_grpc::WriteDigitalU32Request::DataLayoutEnumCase::kDataLayout: { + data_layout = static_cast(request->data_layout()); + break; + } + case nidaqmx_grpc::WriteDigitalU32Request::DataLayoutEnumCase::kDataLayoutRaw: { + data_layout = static_cast(request->data_layout_raw()); + break; + } + case nidaqmx_grpc::WriteDigitalU32Request::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::WriteDigitalU8(::grpc::ServerContext* context, const WriteDigitalU8Request* request, WriteDigitalU8Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - bool32 auto_start = request->auto_start(); - float64 timeout = request->timeout(); - int32 data_layout; - switch (request->data_layout_enum_case()) { - case nidaqmx_grpc::WriteDigitalU8Request::DataLayoutEnumCase::kDataLayout: { - data_layout = static_cast(request->data_layout()); - break; - } - case nidaqmx_grpc::WriteDigitalU8Request::DataLayoutEnumCase::kDataLayoutRaw: { - data_layout = static_cast(request->data_layout_raw()); - break; - } - case nidaqmx_grpc::WriteDigitalU8Request::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); - break; - } - } - - const uInt8* write_array = (const uInt8*)request->write_array().c_str(); - auto reserved = nullptr; - int32 samps_per_chan_written{}; - auto status = library_->WriteDigitalU8(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array, &samps_per_chan_written, reserved); - context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(samps_per_chan_written)); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_samps_per_chan_written(samps_per_chan_written); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + auto write_array = reinterpret_cast(request->write_array().data()); + auto reserved = nullptr; + int32 samps_per_chan_written {}; + auto status = library_->WriteDigitalU32(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array, &samps_per_chan_written, reserved); + context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(samps_per_chan_written)); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); + } + response->set_status(status); + response->set_samps_per_chan_written(samps_per_chan_written); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginWriteDigitalU32(::grpc::ServerContext* context, const BeginWriteDigitalU32Request* request, BeginWriteDigitalU32Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + int32 data_layout; + switch (request->data_layout_enum_case()) { + case nidaqmx_grpc::BeginWriteDigitalU32Request::DataLayoutEnumCase::kDataLayout: { + data_layout = static_cast(request->data_layout()); + break; + } + case nidaqmx_grpc::BeginWriteDigitalU32Request::DataLayoutEnumCase::kDataLayoutRaw: { + data_layout = static_cast(request->data_layout_raw()); + break; + } + case nidaqmx_grpc::BeginWriteDigitalU32Request::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginWriteDigitalU8(::grpc::ServerContext* context, const BeginWriteDigitalU8Request* request, BeginWriteDigitalU8Response* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps_per_chan = request->num_samps_per_chan(); - bool32 auto_start = request->auto_start(); - float64 timeout = request->timeout(); - int32 data_layout; - switch (request->data_layout_enum_case()) { - case nidaqmx_grpc::BeginWriteDigitalU8Request::DataLayoutEnumCase::kDataLayout: { - data_layout = static_cast(request->data_layout()); - break; - } - case nidaqmx_grpc::BeginWriteDigitalU8Request::DataLayoutEnumCase::kDataLayoutRaw: { - data_layout = static_cast(request->data_layout_raw()); - break; - } - case nidaqmx_grpc::BeginWriteDigitalU8Request::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); - break; - } - } - - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->num_samps_per_chan = num_samps_per_chan; - data->auto_start = auto_start; - data->timeout = timeout; - data->data_layout = data_layout; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteDigitalU8", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + auto reserved = nullptr; -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::WriteRaw(::grpc::ServerContext* context, const WriteRawRequest* request, WriteRawResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps = request->num_samps(); - bool32 auto_start = request->auto_start(); - float64 timeout = request->timeout(); - const uInt8* write_array = (const uInt8*)request->write_array().c_str(); - auto reserved = nullptr; - int32 samps_per_chan_written{}; - auto status = library_->WriteRaw(task, num_samps, auto_start, timeout, write_array, &samps_per_chan_written, reserved); - context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(samps_per_chan_written)); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, task); - } - response->set_status(status); - response->set_samps_per_chan_written(samps_per_chan_written); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->auto_start = auto_start; + data->timeout = timeout; + data->data_layout = data_layout; + data->reserved = reserved; + data->library = std::shared_ptr(library_); -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::BeginWriteRaw(::grpc::ServerContext* context, const BeginWriteRawRequest* request, BeginWriteRawResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto task_grpc_session = request->task(); - TaskHandle task = session_repository_->access_session(task_grpc_session.name()); - int32 num_samps = request->num_samps(); - bool32 auto_start = request->auto_start(); - float64 timeout = request->timeout(); - auto reserved = nullptr; - - auto data = std::make_unique(); - data->task = task; - data->num_samps = num_samps; - data->auto_start = auto_start; - data->timeout = timeout; - data->reserved = reserved; - data->library = std::shared_ptr(library_); - - auto moniker = std::make_unique(); - ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteRaw", data.release(), *moniker); - response->set_allocated_moniker(moniker.release()); - response->set_status(0); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); - } -} + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteDigitalU32", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::WriteDigitalU8(::grpc::ServerContext* context, const WriteDigitalU8Request* request, WriteDigitalU8Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + int32 data_layout; + switch (request->data_layout_enum_case()) { + case nidaqmx_grpc::WriteDigitalU8Request::DataLayoutEnumCase::kDataLayout: { + data_layout = static_cast(request->data_layout()); + break; + } + case nidaqmx_grpc::WriteDigitalU8Request::DataLayoutEnumCase::kDataLayoutRaw: { + data_layout = static_cast(request->data_layout_raw()); + break; + } + case nidaqmx_grpc::WriteDigitalU8Request::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); + break; + } + } -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::WriteToTEDSFromArray(::grpc::ServerContext* context, const WriteToTEDSFromArrayRequest* request, WriteToTEDSFromArrayResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - const uInt8* bit_stream = (const uInt8*)request->bit_stream().c_str(); - uInt32 array_size = static_cast(request->bit_stream().size()); - int32 basic_teds_options; - switch (request->basic_teds_options_enum_case()) { - case nidaqmx_grpc::WriteToTEDSFromArrayRequest::BasicTedsOptionsEnumCase::kBasicTedsOptions: { - basic_teds_options = static_cast(request->basic_teds_options()); - break; + const uInt8* write_array = (const uInt8*)request->write_array().c_str(); + auto reserved = nullptr; + int32 samps_per_chan_written {}; + auto status = library_->WriteDigitalU8(task, num_samps_per_chan, auto_start, timeout, data_layout, write_array, &samps_per_chan_written, reserved); + context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(samps_per_chan_written)); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } - case nidaqmx_grpc::WriteToTEDSFromArrayRequest::BasicTedsOptionsEnumCase::kBasicTedsOptionsRaw: { - basic_teds_options = static_cast(request->basic_teds_options_raw()); - break; + response->set_status(status); + response->set_samps_per_chan_written(samps_per_chan_written); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginWriteDigitalU8(::grpc::ServerContext* context, const BeginWriteDigitalU8Request* request, BeginWriteDigitalU8Response* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps_per_chan = request->num_samps_per_chan(); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + int32 data_layout; + switch (request->data_layout_enum_case()) { + case nidaqmx_grpc::BeginWriteDigitalU8Request::DataLayoutEnumCase::kDataLayout: { + data_layout = static_cast(request->data_layout()); + break; + } + case nidaqmx_grpc::BeginWriteDigitalU8Request::DataLayoutEnumCase::kDataLayoutRaw: { + data_layout = static_cast(request->data_layout_raw()); + break; + } + case nidaqmx_grpc::BeginWriteDigitalU8Request::DataLayoutEnumCase::DATA_LAYOUT_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for data_layout was not specified or out of range"); + break; + } } - case nidaqmx_grpc::WriteToTEDSFromArrayRequest::BasicTedsOptionsEnumCase::BASIC_TEDS_OPTIONS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for basic_teds_options was not specified or out of range"); - break; + + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->num_samps_per_chan = num_samps_per_chan; + data->auto_start = auto_start; + data->timeout = timeout; + data->data_layout = data_layout; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteDigitalU8", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::WriteRaw(::grpc::ServerContext* context, const WriteRawRequest* request, WriteRawResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps = request->num_samps(); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + const uInt8* write_array = (const uInt8*)request->write_array().c_str(); + auto reserved = nullptr; + int32 samps_per_chan_written {}; + auto status = library_->WriteRaw(task, num_samps, auto_start, timeout, write_array, &samps_per_chan_written, reserved); + context->AddTrailingMetadata("ni-samps-per-chan-written", std::to_string(samps_per_chan_written)); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, task); } + response->set_status(status); + response->set_samps_per_chan_written(samps_per_chan_written); + return ::grpc::Status::OK; } - - auto status = library_->WriteToTEDSFromArray(physical_channel, bit_stream, array_size, basic_teds_options); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } + } + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::BeginWriteRaw(::grpc::ServerContext* context, const BeginWriteRawRequest* request, BeginWriteRawResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto task_grpc_session = request->task(); + TaskHandle task = session_repository_->access_session(task_grpc_session.name()); + int32 num_samps = request->num_samps(); + bool32 auto_start = request->auto_start(); + float64 timeout = request->timeout(); + auto reserved = nullptr; + + auto data = std::make_unique(); + data->task = task; + data->num_samps = num_samps; + data->auto_start = auto_start; + data->timeout = timeout; + data->reserved = reserved; + data->library = std::shared_ptr(library_); + + auto moniker = std::make_unique(); + ni::data_monikers::DataMonikerService::RegisterMonikerInstance("MonikerWriteRaw", data.release(), *moniker); + response->set_allocated_moniker(moniker.release()); + response->set_status(0); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; - } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); } -} -//--------------------------------------------------------------------- -//--------------------------------------------------------------------- -::grpc::Status NiDAQmxService::WriteToTEDSFromFile(::grpc::ServerContext* context, const WriteToTEDSFromFileRequest* request, WriteToTEDSFromFileResponse* response) -{ - if (context->IsCancelled()) { - return ::grpc::Status::CANCELLED; - } - try { - auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); - auto physical_channel = physical_channel_mbcs.c_str(); - auto file_path_mbcs = convert_from_grpc(request->file_path()); - auto file_path = file_path_mbcs.c_str(); - int32 basic_teds_options; - switch (request->basic_teds_options_enum_case()) { - case nidaqmx_grpc::WriteToTEDSFromFileRequest::BasicTedsOptionsEnumCase::kBasicTedsOptions: { - basic_teds_options = static_cast(request->basic_teds_options()); - break; - } - case nidaqmx_grpc::WriteToTEDSFromFileRequest::BasicTedsOptionsEnumCase::kBasicTedsOptionsRaw: { - basic_teds_options = static_cast(request->basic_teds_options_raw()); - break; + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::WriteToTEDSFromArray(::grpc::ServerContext* context, const WriteToTEDSFromArrayRequest* request, WriteToTEDSFromArrayResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + const uInt8* bit_stream = (const uInt8*)request->bit_stream().c_str(); + uInt32 array_size = static_cast(request->bit_stream().size()); + int32 basic_teds_options; + switch (request->basic_teds_options_enum_case()) { + case nidaqmx_grpc::WriteToTEDSFromArrayRequest::BasicTedsOptionsEnumCase::kBasicTedsOptions: { + basic_teds_options = static_cast(request->basic_teds_options()); + break; + } + case nidaqmx_grpc::WriteToTEDSFromArrayRequest::BasicTedsOptionsEnumCase::kBasicTedsOptionsRaw: { + basic_teds_options = static_cast(request->basic_teds_options_raw()); + break; + } + case nidaqmx_grpc::WriteToTEDSFromArrayRequest::BasicTedsOptionsEnumCase::BASIC_TEDS_OPTIONS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for basic_teds_options was not specified or out of range"); + break; + } } - case nidaqmx_grpc::WriteToTEDSFromFileRequest::BasicTedsOptionsEnumCase::BASIC_TEDS_OPTIONS_ENUM_NOT_SET: { - return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for basic_teds_options was not specified or out of range"); - break; + + auto status = library_->WriteToTEDSFromArray(physical_channel, bit_stream, array_size, basic_teds_options); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); } + response->set_status(status); + return ::grpc::Status::OK; } - - auto status = library_->WriteToTEDSFromFile(physical_channel, file_path, basic_teds_options); - if (!status_ok(status)) { - return ConvertApiErrorStatusForTaskHandle(context, status, 0); + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); } - response->set_status(status); - return ::grpc::Status::OK; } - catch (nidevice_grpc::NonDriverException& ex) { - return ex.GetStatus(); + + //--------------------------------------------------------------------- + //--------------------------------------------------------------------- + ::grpc::Status NiDAQmxService::WriteToTEDSFromFile(::grpc::ServerContext* context, const WriteToTEDSFromFileRequest* request, WriteToTEDSFromFileResponse* response) + { + if (context->IsCancelled()) { + return ::grpc::Status::CANCELLED; + } + try { + auto physical_channel_mbcs = convert_from_grpc(request->physical_channel()); + auto physical_channel = physical_channel_mbcs.c_str(); + auto file_path_mbcs = convert_from_grpc(request->file_path()); + auto file_path = file_path_mbcs.c_str(); + int32 basic_teds_options; + switch (request->basic_teds_options_enum_case()) { + case nidaqmx_grpc::WriteToTEDSFromFileRequest::BasicTedsOptionsEnumCase::kBasicTedsOptions: { + basic_teds_options = static_cast(request->basic_teds_options()); + break; + } + case nidaqmx_grpc::WriteToTEDSFromFileRequest::BasicTedsOptionsEnumCase::kBasicTedsOptionsRaw: { + basic_teds_options = static_cast(request->basic_teds_options_raw()); + break; + } + case nidaqmx_grpc::WriteToTEDSFromFileRequest::BasicTedsOptionsEnumCase::BASIC_TEDS_OPTIONS_ENUM_NOT_SET: { + return ::grpc::Status(::grpc::INVALID_ARGUMENT, "The value for basic_teds_options was not specified or out of range"); + break; + } + } + + auto status = library_->WriteToTEDSFromFile(physical_channel, file_path, basic_teds_options); + if (!status_ok(status)) { + return ConvertApiErrorStatusForTaskHandle(context, status, 0); + } + response->set_status(status); + return ::grpc::Status::OK; + } + catch (nidevice_grpc::NonDriverException& ex) { + return ex.GetStatus(); + } } -} -NiDAQmxFeatureToggles::NiDAQmxFeatureToggles( + + NiDAQmxFeatureToggles::NiDAQmxFeatureToggles( const nidevice_grpc::FeatureToggles& feature_toggles) : is_enabled( - feature_toggles.is_feature_enabled("nidaqmx", CodeReadiness::kRelease)), + feature_toggles.is_feature_enabled("nidaqmx", CodeReadiness::kRelease)), is_allow_undefined_attributes_enabled( - feature_toggles.is_feature_enabled("nidaqmx.allow_undefined_attributes", CodeReadiness::kPrototype)) -{ -} -} // namespace nidaqmx_grpc + feature_toggles.is_feature_enabled("nidaqmx.allow_undefined_attributes", CodeReadiness::kPrototype)) + { + } +} // namespace nidaqmx_grpc + diff --git a/source/codegen/metadata/nidaqmx/functions.py b/source/codegen/metadata/nidaqmx/functions.py index bc7170054..68ce37ab0 100644 --- a/source/codegen/metadata/nidaqmx/functions.py +++ b/source/codegen/metadata/nidaqmx/functions.py @@ -25769,7 +25769,9 @@ { 'ctypes_data_type': 'ctypes.c_int', 'direction': 'out', + 'grpc_streaming_type': 'I32Data', 'is_optional_in_python': False, + 'is_streaming_type': True, 'name': 'sampsPerChanWritten', 'python_data_type': 'int', 'python_description': '', From fc2b2440bb2ee609f77d3d023dd0dd5200723c36 Mon Sep 17 00:00:00 2001 From: Raghav Rawat Date: Wed, 27 Nov 2024 22:47:13 +0530 Subject: [PATCH 21/25] resolved build errors --- generated/nidaqmx/nidaqmx_service.cpp | 124 ++++++++++++++++++++++++-- 1 file changed, 117 insertions(+), 7 deletions(-) diff --git a/generated/nidaqmx/nidaqmx_service.cpp b/generated/nidaqmx/nidaqmx_service.cpp index 29cb58e02..78c1f550a 100644 --- a/generated/nidaqmx/nidaqmx_service.cpp +++ b/generated/nidaqmx/nidaqmx_service.cpp @@ -1,4 +1,4 @@ -test + //--------------------------------------------------------------------- // This file is automatically generated. All manual edits will be lost. //--------------------------------------------------------------------- @@ -401,8 +401,93 @@ namespace nidaqmx_grpc { float64 timeout; int32 data_layout; bool32* reserved; - nidaqmx_grpc::WriteBinaryU32StreamingRequest request; - nidaqmx_grpc::WriteBinaryU32StreamingResponse response; + nidaqmx_grpc::MonikerWriteBinaryU32Request request; + nidaqmx_grpc::MonikerWriteBinaryU32Response response; + std::shared_ptr library; + }; + + struct MonikerWriteCtrFreqData + { + TaskHandle task; + int32 num_samps_per_chan; + bool32 auto_start; + float64 timeout; + int32 data_layout; + bool32* reserved; + nidaqmx_grpc::MonikerWriteCtrFreqRequest request; + nidaqmx_grpc::MonikerWriteCtrFreqResponse response; + std::shared_ptr library; + }; + + struct MonikerWriteCtrFreqScalarData + { + TaskHandle task; + bool32 auto_start; + float64 timeout; + bool32* reserved; + nidaqmx_grpc::MonikerWriteCtrFreqScalarRequest request; + nidaqmx_grpc::MonikerWriteCtrFreqScalarResponse response; + std::shared_ptr library; + }; + + struct MonikerWriteCtrTicksData + { + TaskHandle task; + int32 num_samps_per_chan; + bool32 auto_start; + float64 timeout; + int32 data_layout; + bool32* reserved; + nidaqmx_grpc::MonikerWriteCtrTicksRequest request; + nidaqmx_grpc::MonikerWriteCtrTicksResponse response; + std::shared_ptr library; + }; + + struct MonikerWriteCtrTicksScalarData + { + TaskHandle task; + bool32 auto_start; + float64 timeout; + bool32* reserved; + nidaqmx_grpc::MonikerWriteCtrTicksScalarRequest request; + nidaqmx_grpc::MonikerWriteCtrTicksScalarResponse response; + std::shared_ptr library; + }; + + struct MonikerWriteCtrTimeData + { + TaskHandle task; + int32 num_samps_per_chan; + bool32 auto_start; + float64 timeout; + int32 data_layout; + bool32* reserved; + nidaqmx_grpc::MonikerWriteCtrTimeRequest request; + nidaqmx_grpc::MonikerWriteCtrTimeResponse response; + std::shared_ptr library; + }; + + struct MonikerWriteCtrTimeScalarData + { + TaskHandle task; + bool32 auto_start; + float64 timeout; + bool32* reserved; + nidaqmx_grpc::MonikerWriteCtrTimeScalarRequest request; + nidaqmx_grpc::MonikerWriteCtrTimeScalarResponse response; + std::shared_ptr library; + }; + + struct MonikerWriteDigitalLinesData + { + TaskHandle task; + int32 num_samps_per_chan; + bool32 auto_start; + float64 timeout; + int32 data_layout; + bool32* reserved; + nidaqmx_grpc::MonikerWriteDigitalLinesRequest request; + nidaqmx_grpc::MonikerWriteDigitalLinesResponse response; std::shared_ptr library; }; @@ -438,8 +523,33 @@ namespace nidaqmx_grpc { float64 timeout; int32 data_layout; bool32* reserved; - nidaqmx_grpc::WriteDigitalU32StreamingRequest request; - nidaqmx_grpc::WriteDigitalU32StreamingResponse response; + nidaqmx_grpc::MonikerWriteDigitalU32Request request; + nidaqmx_grpc::MonikerWriteDigitalU32Response response; + std::shared_ptr library; + }; + + struct MonikerWriteDigitalU8Data + { + TaskHandle task; + int32 num_samps_per_chan; + bool32 auto_start; + float64 timeout; + int32 data_layout; + bool32* reserved; + nidaqmx_grpc::MonikerWriteDigitalU8Request request; + nidaqmx_grpc::MonikerWriteDigitalU8Response response; + std::shared_ptr library; + }; + + struct MonikerWriteRawData + { + TaskHandle task; + int32 num_samps; + bool32 auto_start; + float64 timeout; + bool32* reserved; + nidaqmx_grpc::MonikerWriteRawRequest request; + nidaqmx_grpc::MonikerWriteRawResponse response; std::shared_ptr library; }; @@ -17414,7 +17524,7 @@ ::grpc::Status MonikerWriteRaw(void* data, google::protobuf::Arena& arena, googl break; } } - + uInt32 n_samples = request->n_samples(); auto options = 0U; @@ -17485,7 +17595,7 @@ ::grpc::Status MonikerWriteRaw(void* data, google::protobuf::Arena& arena, googl break; } } - + auto options = 0U; auto status = library->RegisterSignalEvent(task, signal_id, options, CallbackRouter::handle_callback, handler->token()); From d9e792c57771721d5e82b911efca4317942909be Mon Sep 17 00:00:00 2001 From: Rohan Doshi Date: Tue, 3 Dec 2024 12:10:18 +0530 Subject: [PATCH 22/25] update mock library to exclude methods with more than 15 params; add more daq tests --- CMakeLists.txt | 4 +- generated/nidaqmx/nidaqmx_mock_library.h | 20 +- .../nirfmxinstr_restricted_mock_library.h | 4 +- .../nirfmxspecan/nirfmxspecan_mock_library.h | 2 +- source/codegen/templates/mock_library.h.mako | 4 + .../ni_fake_daqmx_streaming_tests.cpp | 361 ++++++++++++++++++ 6 files changed, 381 insertions(+), 14 deletions(-) create mode 100644 source/tests/integration/ni_fake_daqmx_streaming_tests.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 2771c1c52..b6fc04c40 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -588,6 +588,7 @@ add_executable(IntegrationTestsRunner "source/tests/integration/session_utilities_service_tests.cpp" "source/tests/integration/session_utilities_service_tests_endtoend.cpp" "source/tests/integration/visa_resource_manager_tests.cpp" + "source/tests/integration/ni_fake_daqmx_streaming_tests.cpp" "source/tests/integration/ni_fake_fpga_streaming_tests.cpp" "source/server/calibration_operations_restricted_service_registrar.cpp" "source/server/calibration_operations_restricted_service.cpp" @@ -624,6 +625,7 @@ add_executable(IntegrationTestsRunner "${proto_srcs_dir}/nifake.grpc.pb.cc" "${proto_srcs_dir}/nifake_non_ivi.pb.cc" "${proto_srcs_dir}/nifake_non_ivi.grpc.pb.cc" + "${service_output_dir}/nidaqmx/nidaqmx_client.cpp" "${service_output_dir}/nifake/nifake_client.cpp" "${service_output_dir}/nifake/nifake_service.cpp" "${service_output_dir}/nifpga/nifpga_client.cpp" @@ -744,7 +746,7 @@ target_include_directories(UnitTestsRunner PRIVATE "${service_output_dir}/nifake_non_ivi" PRIVATE "source/server") -target_link_libraries(UnitTestsRunner + target_link_libraries(UnitTestsRunner ${CMAKE_DL_LIBS} ${server_lib_deps} gmock diff --git a/generated/nidaqmx/nidaqmx_mock_library.h b/generated/nidaqmx/nidaqmx_mock_library.h index 331404162..d8565c64a 100644 --- a/generated/nidaqmx/nidaqmx_mock_library.h +++ b/generated/nidaqmx/nidaqmx_mock_library.h @@ -59,9 +59,9 @@ class NiDAQmxMockLibrary : public nidaqmx_grpc::NiDAQmxLibraryInterface { MOCK_METHOD(int32, CreateAIChargeChan, (TaskHandle task, const char physicalChannel[], const char nameToAssignToChannel[], int32 terminalConfig, float64 minVal, float64 maxVal, int32 units, const char customScaleName[]), (override)); MOCK_METHOD(int32, CreateAICurrentChan, (TaskHandle task, const char physicalChannel[], const char nameToAssignToChannel[], int32 terminalConfig, float64 minVal, float64 maxVal, int32 units, int32 shuntResistorLoc, float64 extShuntResistorVal, const char customScaleName[]), (override)); MOCK_METHOD(int32, CreateAICurrentRMSChan, (TaskHandle task, const char physicalChannel[], const char nameToAssignToChannel[], int32 terminalConfig, float64 minVal, float64 maxVal, int32 units, int32 shuntResistorLoc, float64 extShuntResistorVal, const char customScaleName[]), (override)); - MOCK_METHOD(int32, CreateAIForceBridgePolynomialChan, (TaskHandle task, const char physicalChannel[], const char nameToAssignToChannel[], float64 minVal, float64 maxVal, int32 units, int32 bridgeConfig, int32 voltageExcitSource, float64 voltageExcitVal, float64 nominalBridgeResistance, const float64 forwardCoeffs[], uInt32 numForwardCoeffs, const float64 reverseCoeffs[], uInt32 numReverseCoeffs, int32 electricalUnits, int32 physicalUnits, const char customScaleName[]), (override)); - MOCK_METHOD(int32, CreateAIForceBridgeTableChan, (TaskHandle task, const char physicalChannel[], const char nameToAssignToChannel[], float64 minVal, float64 maxVal, int32 units, int32 bridgeConfig, int32 voltageExcitSource, float64 voltageExcitVal, float64 nominalBridgeResistance, const float64 electricalVals[], uInt32 numElectricalVals, int32 electricalUnits, const float64 physicalVals[], uInt32 numPhysicalVals, int32 physicalUnits, const char customScaleName[]), (override)); - MOCK_METHOD(int32, CreateAIForceBridgeTwoPointLinChan, (TaskHandle task, const char physicalChannel[], const char nameToAssignToChannel[], float64 minVal, float64 maxVal, int32 units, int32 bridgeConfig, int32 voltageExcitSource, float64 voltageExcitVal, float64 nominalBridgeResistance, float64 firstElectricalVal, float64 secondElectricalVal, int32 electricalUnits, float64 firstPhysicalVal, float64 secondPhysicalVal, int32 physicalUnits, const char customScaleName[]), (override)); + int32 CreateAIForceBridgePolynomialChan(TaskHandle task, const char physicalChannel[], const char nameToAssignToChannel[], float64 minVal, float64 maxVal, int32 units, int32 bridgeConfig, int32 voltageExcitSource, float64 voltageExcitVal, float64 nominalBridgeResistance, const float64 forwardCoeffs[], uInt32 numForwardCoeffs, const float64 reverseCoeffs[], uInt32 numReverseCoeffs, int32 electricalUnits, int32 physicalUnits, const char customScaleName[]) { throw std::runtime_error("Not implemented."); } + int32 CreateAIForceBridgeTableChan(TaskHandle task, const char physicalChannel[], const char nameToAssignToChannel[], float64 minVal, float64 maxVal, int32 units, int32 bridgeConfig, int32 voltageExcitSource, float64 voltageExcitVal, float64 nominalBridgeResistance, const float64 electricalVals[], uInt32 numElectricalVals, int32 electricalUnits, const float64 physicalVals[], uInt32 numPhysicalVals, int32 physicalUnits, const char customScaleName[]) { throw std::runtime_error("Not implemented."); } + int32 CreateAIForceBridgeTwoPointLinChan(TaskHandle task, const char physicalChannel[], const char nameToAssignToChannel[], float64 minVal, float64 maxVal, int32 units, int32 bridgeConfig, int32 voltageExcitSource, float64 voltageExcitVal, float64 nominalBridgeResistance, float64 firstElectricalVal, float64 secondElectricalVal, int32 electricalUnits, float64 firstPhysicalVal, float64 secondPhysicalVal, int32 physicalUnits, const char customScaleName[]) { throw std::runtime_error("Not implemented."); } MOCK_METHOD(int32, CreateAIForceIEPEChan, (TaskHandle task, const char physicalChannel[], const char nameToAssignToChannel[], int32 terminalConfig, float64 minVal, float64 maxVal, int32 units, float64 sensitivity, int32 sensitivityUnits, int32 currentExcitSource, float64 currentExcitVal, const char customScaleName[]), (override)); MOCK_METHOD(int32, CreateAIFreqVoltageChan, (TaskHandle task, const char physicalChannel[], const char nameToAssignToChannel[], float64 minVal, float64 maxVal, int32 units, float64 thresholdLevel, float64 hysteresis, const char customScaleName[]), (override)); MOCK_METHOD(int32, CreateAIMicrophoneChan, (TaskHandle task, const char physicalChannel[], const char nameToAssignToChannel[], int32 terminalConfig, int32 units, float64 micSensitivity, float64 maxSndPressLevel, int32 currentExcitSource, float64 currentExcitVal, const char customScaleName[]), (override)); @@ -69,20 +69,20 @@ class NiDAQmxMockLibrary : public nidaqmx_grpc::NiDAQmxLibraryInterface { MOCK_METHOD(int32, CreateAIPosLVDTChan, (TaskHandle task, const char physicalChannel[], const char nameToAssignToChannel[], float64 minVal, float64 maxVal, int32 units, float64 sensitivity, int32 sensitivityUnits, int32 voltageExcitSource, float64 voltageExcitVal, float64 voltageExcitFreq, int32 acExcitWireMode, const char customScaleName[]), (override)); MOCK_METHOD(int32, CreateAIPosRVDTChan, (TaskHandle task, const char physicalChannel[], const char nameToAssignToChannel[], float64 minVal, float64 maxVal, int32 units, float64 sensitivity, int32 sensitivityUnits, int32 voltageExcitSource, float64 voltageExcitVal, float64 voltageExcitFreq, int32 acExcitWireMode, const char customScaleName[]), (override)); MOCK_METHOD(int32, CreateAIPowerChan, (TaskHandle task, const char physicalChannel[], const char nameToAssignToChannel[], float64 voltageSetpoint, float64 currentSetpoint, bool32 outputEnable), (override)); - MOCK_METHOD(int32, CreateAIPressureBridgePolynomialChan, (TaskHandle task, const char physicalChannel[], const char nameToAssignToChannel[], float64 minVal, float64 maxVal, int32 units, int32 bridgeConfig, int32 voltageExcitSource, float64 voltageExcitVal, float64 nominalBridgeResistance, const float64 forwardCoeffs[], uInt32 numForwardCoeffs, const float64 reverseCoeffs[], uInt32 numReverseCoeffs, int32 electricalUnits, int32 physicalUnits, const char customScaleName[]), (override)); - MOCK_METHOD(int32, CreateAIPressureBridgeTableChan, (TaskHandle task, const char physicalChannel[], const char nameToAssignToChannel[], float64 minVal, float64 maxVal, int32 units, int32 bridgeConfig, int32 voltageExcitSource, float64 voltageExcitVal, float64 nominalBridgeResistance, const float64 electricalVals[], uInt32 numElectricalVals, int32 electricalUnits, const float64 physicalVals[], uInt32 numPhysicalVals, int32 physicalUnits, const char customScaleName[]), (override)); - MOCK_METHOD(int32, CreateAIPressureBridgeTwoPointLinChan, (TaskHandle task, const char physicalChannel[], const char nameToAssignToChannel[], float64 minVal, float64 maxVal, int32 units, int32 bridgeConfig, int32 voltageExcitSource, float64 voltageExcitVal, float64 nominalBridgeResistance, float64 firstElectricalVal, float64 secondElectricalVal, int32 electricalUnits, float64 firstPhysicalVal, float64 secondPhysicalVal, int32 physicalUnits, const char customScaleName[]), (override)); + int32 CreateAIPressureBridgePolynomialChan(TaskHandle task, const char physicalChannel[], const char nameToAssignToChannel[], float64 minVal, float64 maxVal, int32 units, int32 bridgeConfig, int32 voltageExcitSource, float64 voltageExcitVal, float64 nominalBridgeResistance, const float64 forwardCoeffs[], uInt32 numForwardCoeffs, const float64 reverseCoeffs[], uInt32 numReverseCoeffs, int32 electricalUnits, int32 physicalUnits, const char customScaleName[]) { throw std::runtime_error("Not implemented."); } + int32 CreateAIPressureBridgeTableChan(TaskHandle task, const char physicalChannel[], const char nameToAssignToChannel[], float64 minVal, float64 maxVal, int32 units, int32 bridgeConfig, int32 voltageExcitSource, float64 voltageExcitVal, float64 nominalBridgeResistance, const float64 electricalVals[], uInt32 numElectricalVals, int32 electricalUnits, const float64 physicalVals[], uInt32 numPhysicalVals, int32 physicalUnits, const char customScaleName[]) { throw std::runtime_error("Not implemented."); } + int32 CreateAIPressureBridgeTwoPointLinChan(TaskHandle task, const char physicalChannel[], const char nameToAssignToChannel[], float64 minVal, float64 maxVal, int32 units, int32 bridgeConfig, int32 voltageExcitSource, float64 voltageExcitVal, float64 nominalBridgeResistance, float64 firstElectricalVal, float64 secondElectricalVal, int32 electricalUnits, float64 firstPhysicalVal, float64 secondPhysicalVal, int32 physicalUnits, const char customScaleName[]) { throw std::runtime_error("Not implemented."); } MOCK_METHOD(int32, CreateAIRTDChan, (TaskHandle task, const char physicalChannel[], const char nameToAssignToChannel[], float64 minVal, float64 maxVal, int32 units, int32 rtdType, int32 resistanceConfig, int32 currentExcitSource, float64 currentExcitVal, float64 r0), (override)); MOCK_METHOD(int32, CreateAIResistanceChan, (TaskHandle task, const char physicalChannel[], const char nameToAssignToChannel[], float64 minVal, float64 maxVal, int32 units, int32 resistanceConfig, int32 currentExcitSource, float64 currentExcitVal, const char customScaleName[]), (override)); - MOCK_METHOD(int32, CreateAIRosetteStrainGageChan, (TaskHandle task, const char physicalChannel[], const char nameToAssignToChannel[], float64 minVal, float64 maxVal, int32 rosetteType, float64 gageOrientation, const int32 rosetteMeasTypes[], uInt32 numRosetteMeasTypes, int32 strainConfig, int32 voltageExcitSource, float64 voltageExcitVal, float64 gageFactor, float64 nominalGageResistance, float64 poissonRatio, float64 leadWireResistance), (override)); + int32 CreateAIRosetteStrainGageChan(TaskHandle task, const char physicalChannel[], const char nameToAssignToChannel[], float64 minVal, float64 maxVal, int32 rosetteType, float64 gageOrientation, const int32 rosetteMeasTypes[], uInt32 numRosetteMeasTypes, int32 strainConfig, int32 voltageExcitSource, float64 voltageExcitVal, float64 gageFactor, float64 nominalGageResistance, float64 poissonRatio, float64 leadWireResistance) { throw std::runtime_error("Not implemented."); } MOCK_METHOD(int32, CreateAIStrainGageChan, (TaskHandle task, const char physicalChannel[], const char nameToAssignToChannel[], float64 minVal, float64 maxVal, int32 units, int32 strainConfig, int32 voltageExcitSource, float64 voltageExcitVal, float64 gageFactor, float64 initialBridgeVoltage, float64 nominalGageResistance, float64 poissonRatio, float64 leadWireResistance, const char customScaleName[]), (override)); MOCK_METHOD(int32, CreateAITempBuiltInSensorChan, (TaskHandle task, const char physicalChannel[], const char nameToAssignToChannel[], int32 units), (override)); MOCK_METHOD(int32, CreateAIThrmcplChan, (TaskHandle task, const char physicalChannel[], const char nameToAssignToChannel[], float64 minVal, float64 maxVal, int32 units, int32 thermocoupleType, int32 cjcSource, float64 cjcVal, const char cjcChannel[]), (override)); MOCK_METHOD(int32, CreateAIThrmstrChanIex, (TaskHandle task, const char physicalChannel[], const char nameToAssignToChannel[], float64 minVal, float64 maxVal, int32 units, int32 resistanceConfig, int32 currentExcitSource, float64 currentExcitVal, float64 a, float64 b, float64 c), (override)); MOCK_METHOD(int32, CreateAIThrmstrChanVex, (TaskHandle task, const char physicalChannel[], const char nameToAssignToChannel[], float64 minVal, float64 maxVal, int32 units, int32 resistanceConfig, int32 voltageExcitSource, float64 voltageExcitVal, float64 a, float64 b, float64 c, float64 r1), (override)); - MOCK_METHOD(int32, CreateAITorqueBridgePolynomialChan, (TaskHandle task, const char physicalChannel[], const char nameToAssignToChannel[], float64 minVal, float64 maxVal, int32 units, int32 bridgeConfig, int32 voltageExcitSource, float64 voltageExcitVal, float64 nominalBridgeResistance, const float64 forwardCoeffs[], uInt32 numForwardCoeffs, const float64 reverseCoeffs[], uInt32 numReverseCoeffs, int32 electricalUnits, int32 physicalUnits, const char customScaleName[]), (override)); - MOCK_METHOD(int32, CreateAITorqueBridgeTableChan, (TaskHandle task, const char physicalChannel[], const char nameToAssignToChannel[], float64 minVal, float64 maxVal, int32 units, int32 bridgeConfig, int32 voltageExcitSource, float64 voltageExcitVal, float64 nominalBridgeResistance, const float64 electricalVals[], uInt32 numElectricalVals, int32 electricalUnits, const float64 physicalVals[], uInt32 numPhysicalVals, int32 physicalUnits, const char customScaleName[]), (override)); - MOCK_METHOD(int32, CreateAITorqueBridgeTwoPointLinChan, (TaskHandle task, const char physicalChannel[], const char nameToAssignToChannel[], float64 minVal, float64 maxVal, int32 units, int32 bridgeConfig, int32 voltageExcitSource, float64 voltageExcitVal, float64 nominalBridgeResistance, float64 firstElectricalVal, float64 secondElectricalVal, int32 electricalUnits, float64 firstPhysicalVal, float64 secondPhysicalVal, int32 physicalUnits, const char customScaleName[]), (override)); + int32 CreateAITorqueBridgePolynomialChan(TaskHandle task, const char physicalChannel[], const char nameToAssignToChannel[], float64 minVal, float64 maxVal, int32 units, int32 bridgeConfig, int32 voltageExcitSource, float64 voltageExcitVal, float64 nominalBridgeResistance, const float64 forwardCoeffs[], uInt32 numForwardCoeffs, const float64 reverseCoeffs[], uInt32 numReverseCoeffs, int32 electricalUnits, int32 physicalUnits, const char customScaleName[]) { throw std::runtime_error("Not implemented."); } + int32 CreateAITorqueBridgeTableChan(TaskHandle task, const char physicalChannel[], const char nameToAssignToChannel[], float64 minVal, float64 maxVal, int32 units, int32 bridgeConfig, int32 voltageExcitSource, float64 voltageExcitVal, float64 nominalBridgeResistance, const float64 electricalVals[], uInt32 numElectricalVals, int32 electricalUnits, const float64 physicalVals[], uInt32 numPhysicalVals, int32 physicalUnits, const char customScaleName[]) { throw std::runtime_error("Not implemented."); } + int32 CreateAITorqueBridgeTwoPointLinChan(TaskHandle task, const char physicalChannel[], const char nameToAssignToChannel[], float64 minVal, float64 maxVal, int32 units, int32 bridgeConfig, int32 voltageExcitSource, float64 voltageExcitVal, float64 nominalBridgeResistance, float64 firstElectricalVal, float64 secondElectricalVal, int32 electricalUnits, float64 firstPhysicalVal, float64 secondPhysicalVal, int32 physicalUnits, const char customScaleName[]) { throw std::runtime_error("Not implemented."); } MOCK_METHOD(int32, CreateAIVelocityIEPEChan, (TaskHandle task, const char physicalChannel[], const char nameToAssignToChannel[], int32 terminalConfig, float64 minVal, float64 maxVal, int32 units, float64 sensitivity, int32 sensitivityUnits, int32 currentExcitSource, float64 currentExcitVal, const char customScaleName[]), (override)); MOCK_METHOD(int32, CreateAIVoltageChan, (TaskHandle task, const char physicalChannel[], const char nameToAssignToChannel[], int32 terminalConfig, float64 minVal, float64 maxVal, int32 units, const char customScaleName[]), (override)); MOCK_METHOD(int32, CreateAIVoltageChanWithExcit, (TaskHandle task, const char physicalChannel[], const char nameToAssignToChannel[], int32 terminalConfig, float64 minVal, float64 maxVal, int32 units, int32 bridgeConfig, int32 voltageExcitSource, float64 voltageExcitVal, bool32 useExcitForScaling, const char customScaleName[]), (override)); diff --git a/generated/nirfmxinstr_restricted/nirfmxinstr_restricted_mock_library.h b/generated/nirfmxinstr_restricted/nirfmxinstr_restricted_mock_library.h index 45298ac05..378e9f139 100644 --- a/generated/nirfmxinstr_restricted/nirfmxinstr_restricted_mock_library.h +++ b/generated/nirfmxinstr_restricted/nirfmxinstr_restricted_mock_library.h @@ -35,14 +35,14 @@ class NiRFmxInstrRestrictedMockLibrary : public nirfmxinstr_restricted_grpc::NiR MOCK_METHOD(int32, GetErrorString, (niRFmxInstrHandle instrumentHandle, int32 errorCode, int32 errorDescriptionBufferSize, char errorDescription[]), (override)); MOCK_METHOD(int32, GetExternalAttenuationTableNames, (niRFmxInstrHandle instrumentHandle, char selectorString[], int32 arraySize, char externalAttenuationTableNames[]), (override)); MOCK_METHOD(int32, GetForceAllTracesEnabled, (niRFmxInstrHandle instrumentHandle, char channelName[], int32* attrVal), (override)); - MOCK_METHOD(int32, GetInitiaitedSnapshotStrings, (niRFmxInstrHandle instrumentHandle, uInt64* snapshotInfoCacheIndex, int32 personalityIDArray[], int32 personalityIDArraySize, int32* personalityIDArrayActualSize, char signalNames[], int32 signalNamesSize, int32* signalNamesActualSize, char resultNames[], int32 resultNamesSize, int32* resultNamesActualSize, char snapshotIdentifiers[], int32 snapshotIdentifiersSize, int32* snapshotIdentifiersActualSize, uInt64 snapshotTimestampArray[], int32 snapshotTimestampArraySize, int32* snapshotTimestampArrayActualSize), (override)); + int32 GetInitiaitedSnapshotStrings(niRFmxInstrHandle instrumentHandle, uInt64* snapshotInfoCacheIndex, int32 personalityIDArray[], int32 personalityIDArraySize, int32* personalityIDArrayActualSize, char signalNames[], int32 signalNamesSize, int32* signalNamesActualSize, char resultNames[], int32 resultNamesSize, int32* resultNamesActualSize, char snapshotIdentifiers[], int32 snapshotIdentifiersSize, int32* snapshotIdentifiersActualSize, uInt64 snapshotTimestampArray[], int32 snapshotTimestampArraySize, int32* snapshotTimestampArrayActualSize) { throw std::runtime_error("Not implemented."); } MOCK_METHOD(int32, GetLatestConfigurationSnapshot, (niRFmxInstrHandle instrumentHandle, uInt64* snapshotInfoCacheIndex, int32* personalityID, char signalName[], int32 signalNameSize, int32* signalNameActualSize, char snapshotIdentifier[], int32 snapshotIdentifierSize, int32* snapshotIdentifierActualSize, int32* signalConfigurationState, uInt64* signalTimestamp), (override)); MOCK_METHOD(int32, GetOpenSessionsInformation, (char resourceName[], int32 infoJsonSize, char infoJson[]), (override)); MOCK_METHOD(int32, GetPrivilegeLevel, (niRFmxInstrHandle instrumentHandle, int32* isConnectionAlive, int32* privilegeLevel), (override)); MOCK_METHOD(int32, GetRFmxVersion, (niRFmxInstrHandle instrumentHandle, int32 arraySize, char RFmxVersion[]), (override)); MOCK_METHOD(int32, GetSessionUniqueIdentifier, (char resourceNames[], char optionString[], int32 sessionUniqueIdentifierSize, char sessionUniqueIdentifier[]), (override)); MOCK_METHOD(int32, GetSignalConfigurationState64, (niRFmxInstrHandle instrumentHandle, char signalName[], uInt32 signalType, int32* signalState, uInt64* timeStamp), (override)); - MOCK_METHOD(int32, GetSnapshotInfoFromCache, (niRFmxInstrHandle instrumentHandle, uInt64 snapshotInfoCacheIndex, int32 personalityIDArray[], int32 personalityIDArraySize, int32* personalityIDArrayActualSize, char signalNames[], int32 signalNamesSize, int32* signalNamesActualSize, char resultNames[], int32 resultNamesSize, int32* resultNamesActualSize, char snapshotIdentifiers[], int32 snapshotIdentifiersSize, int32* snapshotIdentifiersActualSize, uInt64 snapshotTimestampArray[], int32 snapshotTimestampArraySize, int32* snapshotTimestampArrayActualSize), (override)); + int32 GetSnapshotInfoFromCache(niRFmxInstrHandle instrumentHandle, uInt64 snapshotInfoCacheIndex, int32 personalityIDArray[], int32 personalityIDArraySize, int32* personalityIDArrayActualSize, char signalNames[], int32 signalNamesSize, int32* signalNamesActualSize, char resultNames[], int32 resultNamesSize, int32* resultNamesActualSize, char snapshotIdentifiers[], int32 snapshotIdentifiersSize, int32* snapshotIdentifiersActualSize, uInt64 snapshotTimestampArray[], int32 snapshotTimestampArraySize, int32* snapshotTimestampArrayActualSize) { throw std::runtime_error("Not implemented."); } MOCK_METHOD(int32, GetSnapshotState, (niRFmxInstrHandle instrumentHandle, int32 personality, char selectorString[], int32* snapshotState), (override)); MOCK_METHOD(int32, GetTracesInfoForMonitorSnapshot, (niRFmxInstrHandle instrumentHandle, char selectorString[], int32* allTracesEnabled), (override)); MOCK_METHOD(int32, LoadAllForRevert, (niRFmxInstrHandle instrumentHandle, char filePath[]), (override)); diff --git a/generated/nirfmxspecan/nirfmxspecan_mock_library.h b/generated/nirfmxspecan/nirfmxspecan_mock_library.h index c49a022be..9780006de 100644 --- a/generated/nirfmxspecan/nirfmxspecan_mock_library.h +++ b/generated/nirfmxspecan/nirfmxspecan_mock_library.h @@ -140,7 +140,7 @@ class NiRFmxSpecAnMockLibrary : public nirfmxspecan_grpc::NiRFmxSpecAnLibraryInt MOCK_METHOD(int32, CreateListStep, (niRFmxInstrHandle instrumentHandle, char selectorString[], int32* createdStepIndex), (override)); MOCK_METHOD(int32, CreateSignalConfiguration, (niRFmxInstrHandle instrumentHandle, char signalName[]), (override)); MOCK_METHOD(int32, DPDApplyDigitalPredistortion, (niRFmxInstrHandle instrumentHandle, char selectorString[], float64 x0In, float64 dxIn, NIComplexSingle waveformIn[], int32 arraySizeIn, int32 idleDurationPresent, float64 measurementTimeout, float64* x0Out, float64* dxOut, NIComplexSingle waveformOut[], int32 arraySizeOut, int32* actualArraySize, float64* papr, float64* powerOffset), (override)); - MOCK_METHOD(int32, DPDApplyDigitalPredistortionSplit, (niRFmxInstrHandle instrumentHandle, char selectorString[], float64 x0In, float64 dxIn, float32 waveformInI[], float32 waveformInQ[], int32 arraySizeIn, int32 idleDurationPresent, float64 measurementTimeout, float64* x0Out, float64* dxOut, float32 waveformOutI[], float32 waveformOutQ[], int32 arraySizeOut, int32* actualArraySize, float64* papr, float64* powerOffset), (override)); + int32 DPDApplyDigitalPredistortionSplit(niRFmxInstrHandle instrumentHandle, char selectorString[], float64 x0In, float64 dxIn, float32 waveformInI[], float32 waveformInQ[], int32 arraySizeIn, int32 idleDurationPresent, float64 measurementTimeout, float64* x0Out, float64* dxOut, float32 waveformOutI[], float32 waveformOutQ[], int32 arraySizeOut, int32* actualArraySize, float64* papr, float64* powerOffset) { throw std::runtime_error("Not implemented."); } MOCK_METHOD(int32, DPDApplyPreDPDSignalConditioning, (niRFmxInstrHandle instrumentHandle, char selectorString[], float64 x0In, float64 dxIn, NIComplexSingle waveformIn[], int32 arraySizeIn, int32 idleDurationPresent, float64* x0Out, float64* dxOut, NIComplexSingle waveformOut[], int32 arraySizeOut, int32* actualArraySize, float64* papr), (override)); MOCK_METHOD(int32, DPDApplyPreDPDSignalConditioningSplit, (niRFmxInstrHandle instrumentHandle, char selectorString[], float64 x0In, float64 dxIn, float32 waveformInI[], float32 waveformInQ[], int32 arraySizeIn, int32 idleDurationPresent, float64* x0Out, float64* dxOut, float32 waveformOutI[], float32 waveformOutQ[], int32 arraySizeOut, int32* actualArraySize, float64* papr), (override)); MOCK_METHOD(int32, DPDCfgApplyDPDConfigurationInput, (niRFmxInstrHandle instrumentHandle, char selectorString[], int32 configurationInput), (override)); diff --git a/source/codegen/templates/mock_library.h.mako b/source/codegen/templates/mock_library.h.mako index 59995856d..75951da59 100644 --- a/source/codegen/templates/mock_library.h.mako +++ b/source/codegen/templates/mock_library.h.mako @@ -35,7 +35,11 @@ class ${service_class_prefix}MockLibrary : public ${namespace_prefix}::${service parameters = f['parameters'] return_type = f['returns'] %>\ +% if len(parameters) <= 15: # MOCK_METHOD shows compilation error (undefined GMOCK_PP_INTERNAL_FOR_EACH_IMPL_) for params > 15 MOCK_METHOD(${return_type}, ${method_name}, (${service_helpers.create_params(parameters)}), (override)); +% else: + ${return_type} ${method_name}(${service_helpers.create_params(parameters)}) { throw std::runtime_error("Not implemented."); } +% endif % endfor }; diff --git a/source/tests/integration/ni_fake_daqmx_streaming_tests.cpp b/source/tests/integration/ni_fake_daqmx_streaming_tests.cpp new file mode 100644 index 000000000..e1976c9ba --- /dev/null +++ b/source/tests/integration/ni_fake_daqmx_streaming_tests.cpp @@ -0,0 +1,361 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "nidaqmx/nidaqmx_client.h" + +namespace ni { +namespace tests { +namespace integration { + +using namespace ::testing; +using namespace nidevice_grpc; +namespace pb = ::google::protobuf; +using CodeReadiness = nidevice_grpc::FeatureToggles::CodeReadiness; + +// This test class is used to test the NiDAQmxService using a mocked daqmx library(NiDaqmxMockLibrary) +// We intend to use this class to test streaming apis in NiDAQmxService +class NiFakeDAQmxStreamingTests : public ::testing::Test { + private: + grpc::ServerBuilder builder_; + std::shared_ptr session_repository_; + std::shared_ptr library_; + std::shared_ptr>> services_; + std::shared_ptr daqmxService_; + std::shared_ptr moniker_service_; + std::unique_ptr<::grpc::Server> server_; + std::unique_ptr stub_; + std::unique_ptr moniker_service_stub_; + std::thread* sideband_socket_thread_; + std::atomic shutdown_{false}; + + public: + NiFakeDAQmxStreamingTests() + { + session_repository_ = std::make_shared(); + library_ = std::make_shared(); + auto ni_daqmx_session_repository = std::make_shared>(session_repository_); + daqmxService_ = std::make_shared(library_, ni_daqmx_session_repository, FeatureToggles({}, CodeReadiness::kNextRelease)); + moniker_service_ = std::make_shared(); + server_ = start_server(); + nidaqmx_grpc::RegisterMonikerEndpoints(); + stub_ = nidaqmx_grpc::NiDAQmx::NewStub(server_->InProcessChannel(::grpc::ChannelArguments())); + moniker_service_stub_ = ni::data_monikers::DataMoniker::NewStub(server_->InProcessChannel(::grpc::ChannelArguments())); + Mock::AllowLeak(library_.get()); + } + + virtual ~NiFakeDAQmxStreamingTests() + { + shutdown(); + } + + void shutdown() + { + if (!shutdown_) { + shutdown_ = true; + server_->Shutdown(); + } + } + + std::unique_ptr& stub() + { + return stub_; + } + + std::unique_ptr& moniker_stub() + { + return moniker_service_stub_; + } + + std::shared_ptr library() + { + return library_; + } + + std::unique_ptr<::grpc::Server> start_server() + { + ::grpc::ServerBuilder builder; + builder.RegisterService(daqmxService_.get()); + builder.RegisterService(moniker_service_.get()); + return builder.BuildAndStart(); + } +}; + +TEST_F(NiFakeDAQmxStreamingTests, StreamRead_scalar) +{ + auto session = std::make_unique(); + + // Set expectation on the mocked daqmx lib method. + EXPECT_CALL(*library(), ReadDigitalScalarU32(_, 0, ::testing::_, _)) + .WillOnce(::testing::DoAll(::testing::SetArgPointee<2>(1), ::testing::Return(0))) + .WillOnce(::testing::DoAll(::testing::SetArgPointee<2>(2), ::testing::Return(0))) + .WillOnce(::testing::DoAll(::testing::SetArgPointee<2>(3), ::testing::Return(0))) + .WillOnce(::testing::DoAll(::testing::SetArgPointee<2>(4), ::testing::Return(0))) + .WillOnce(::testing::DoAll(::testing::SetArgPointee<2>(5), ::testing::Return(0))) + .WillRepeatedly(::testing::DoAll(::testing::SetArgPointee<2>(999), ::testing::Return(0))); + + // Dont worry about deleting read_moniker_u32 since AddAllocated takes ownership of the ptr being passed in ensuring its destruction. + auto begin_read_u32_response = nidaqmx_grpc::experimental::client::begin_read_digital_scalar_u32(stub(), *session, 0); + ni::data_monikers::Moniker* read_moniker_u32 = new ni::data_monikers::Moniker(begin_read_u32_response.moniker()); + + grpc::ClientContext moniker_context; + ni::data_monikers::MonikerList read_requests; + read_requests.mutable_read_monikers()->AddAllocated(read_moniker_u32); + + auto stream = moniker_stub().get()->StreamRead(&moniker_context, read_requests); + + for (int i = 0; i < 5; i++) { + // Read data + nidaqmx_grpc::MonikerReadDigitalScalarU32Response read_value_u32; + + ni::data_monikers::MonikerReadResponse read_result; + stream->Read(&read_result); + + read_result.data().values(0).UnpackTo(&read_value_u32); + EXPECT_EQ(read_value_u32.value(), i + 1); + } + + moniker_context.TryCancel(); +} + +TEST_F(NiFakeDAQmxStreamingTests, StreamRead_Array) +{ + auto session = std::make_unique(); + + // create some data for the array + std::vector data_u32 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; + int size = data_u32.size(); + + // Set expectation on the mocked daqmx lib method. + EXPECT_CALL(*library(), ReadDigitalU32(_, 1, 0, DAQmx_Val_GroupByChannel, ::testing::_, 10, _, _)) + .WillRepeatedly(::testing::DoAll(::testing::SetArrayArgument<4>(data_u32.begin(), data_u32.begin() + size), ::testing::Return(0))); + + // Dont worry about deleting read_moniker_i32 and read_moniker_i64 since AddAllocated takes ownership of the ptr being passed in ensuring its destruction. + auto begin_read_i32_array_response = nidaqmx_grpc::experimental::client::begin_read_digital_u32(stub(), *session, 1, 0, DAQmx_Val_GroupByChannel, 10); + auto read_moniker_i32 = new ni::data_monikers::Moniker(begin_read_i32_array_response.moniker()); + + grpc::ClientContext moniker_context; + ni::data_monikers::MonikerList read_requests; + read_requests.mutable_read_monikers()->AddAllocated(read_moniker_i32); + + auto stream = moniker_stub().get()->StreamRead(&moniker_context, read_requests); + + for (int i = 0; i < 5; i++) { + // Read data + nidaqmx_grpc::MonikerReadDigitalU32Response read_values_u32; + + ni::data_monikers::MonikerReadResponse read_result; + stream->Read(&read_result); + + read_result.data().values(0).UnpackTo(&read_values_u32); + ASSERT_THAT(read_values_u32.read_array(), ElementsAreArray(data_u32)); + } + + moniker_context.TryCancel(); +} + +TEST_F(NiFakeDAQmxStreamingTests, StreamWrite_Array) +{ + // create some setup for writing + auto session = std::make_unique(); + std::vector data_int_i32 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; + int size_i32 = data_int_i32.size(); + + // Set expectation on the mocked fpga lib method. + EXPECT_CALL(*library(), WriteDigitalU32(_, 10, TRUE, 0, DAQmx_Val_GroupByChannel, ::testing::_, _, _)) + .With(Args<5, 1>(ElementsAreArray(data_int_i32))) + .WillRepeatedly(::testing::Return(0)); + + // Dont worry about deleting write_moniker_i32 and write_moniker_i64 since AddAllocated takes ownership of the ptr being passed in ensuring its destruction. + auto begin_write_i32_array_response = nidaqmx_grpc::experimental::client::begin_write_digital_u32(stub(), *session, 10, TRUE, 0, DAQmx_Val_GroupByChannel); + auto write_moniker_i32 = new ni::data_monikers::Moniker(begin_write_i32_array_response.moniker()); + + grpc::ClientContext moniker_context; + ni::data_monikers::MonikerWriteRequest write_request; + write_request.mutable_monikers()->mutable_write_monikers()->AddAllocated(write_moniker_i32); + + auto write_stream = moniker_stub().get()->StreamWrite(&moniker_context); + write_stream->Write(write_request); + + for (int i = 0; i < 5; i++) { + // Write data + nidaqmx_grpc::MonikerWriteDigitalU32Request write_digital_u32_request; + + write_digital_u32_request.mutable_write_array()->Add(data_int_i32.begin(), data_int_i32.end()); + + ni::data_monikers::MonikerWriteRequest write_data_request; + write_data_request.mutable_data()->add_values()->PackFrom(write_digital_u32_request); + + write_stream->Write(write_data_request); + } + + write_stream->WritesDone(); + moniker_context.TryCancel(); +} + +TEST_F(NiFakeDAQmxStreamingTests, StreamReadWrite_Array) +{ + auto session = std::make_unique(); + + // create some data for the array + std::vector data_int_i32 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; + int write_size_i32 = data_int_i32.size(); + + // Set expectation on the mocked fpga lib method. + EXPECT_CALL(*library(), WriteDigitalU32(_, 10, TRUE, 0, DAQmx_Val_GroupByChannel, ::testing::_, _, _)) + .With(Args<5, 1>(ElementsAreArray(data_int_i32))) + .WillRepeatedly(::testing::Return(0)); + + // create some setup for reading + std::vector data_u32 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; + int size = data_u32.size(); + + // Set expectation on the mocked fpga lib method. + EXPECT_CALL(*library(), ReadDigitalU32(_, 1, 0, DAQmx_Val_GroupByChannel, ::testing::_, 10, _, _)) + .WillRepeatedly(::testing::DoAll(::testing::SetArrayArgument<4>(data_u32.begin(), data_u32.begin() + size), ::testing::Return(0))); + + // Dont worry about deleting write_moniker_i32 and write_moniker_i64 since AddAllocated takes ownership of the ptr being passed in ensuring its destruction. + auto begin_write_i32_array_response = nidaqmx_grpc::experimental::client::begin_write_digital_u32(stub(), *session, 10, TRUE, 0, DAQmx_Val_GroupByChannel); + auto write_moniker_i32 = new ni::data_monikers::Moniker(begin_write_i32_array_response.moniker()); + + // Dont worry about deleting read_moniker_i32 and read_moniker_i64 since AddAllocated takes ownership of the ptr being passed in ensuring its destruction. + auto begin_read_i32_array_response = nidaqmx_grpc::experimental::client::begin_read_digital_u32(stub(), *session, 1, 0, DAQmx_Val_GroupByChannel, 10); + auto read_moniker_i32 = new ni::data_monikers::Moniker(begin_read_i32_array_response.moniker()); + + grpc::ClientContext moniker_context; + ni::data_monikers::MonikerWriteRequest write_request; + write_request.mutable_monikers()->mutable_read_monikers()->AddAllocated(read_moniker_i32); + write_request.mutable_monikers()->mutable_write_monikers()->AddAllocated(write_moniker_i32); + + auto write_stream = moniker_stub().get()->StreamReadWrite(&moniker_context); + write_stream->Write(write_request); + + for (int i = 0; i < 5; i++) { + // Write data + nidaqmx_grpc::MonikerWriteDigitalU32Request write_digital_u32_request; + + write_digital_u32_request.mutable_write_array()->Add(data_int_i32.begin(), data_int_i32.end()); + + ni::data_monikers::MonikerWriteRequest write_data_request; + write_data_request.mutable_data()->add_values()->PackFrom(write_digital_u32_request); + + write_stream->Write(write_data_request); + + nidaqmx_grpc::MonikerReadDigitalU32Response read_values_u32; + + ni::data_monikers::MonikerReadResponse read_result; + write_stream->Read(&read_result); + + read_result.data().values(0).UnpackTo(&read_values_u32); + ASSERT_THAT(read_values_u32.read_array(), SizeIs(size)); + ASSERT_THAT(read_values_u32.read_array(), ElementsAreArray(data_u32)); + } + + write_stream->WritesDone(); + moniker_context.TryCancel(); +} + +// // // disable this test since we are not supporting sideband streaming inprocess + +// // TEST_F(NiFakeFpgaStreamingTests, DISABLED_SidebandStreamReadWrite_Array) +// // { +// // auto session = std::make_unique(); +// // // create some data for the array +// // std::vector write_data_int32 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; +// // std::vector write_data_int64 = {11, 22, 33, 44, 55, 66, 77, 88, 99}; +// // int control = 1; +// // int size_i32 = write_data_int32.size(); +// // int size_i64 = write_data_int64.size(); + +// // // Set expectation on the mocked fpga lib method. +// // EXPECT_CALL(*library(), WriteArrayI32(_, control, _, size_i32)) +// // .With(Args<2, 3>(ElementsAreArray(write_data_int32))) +// // .WillRepeatedly(::testing::Return(0)); +// // EXPECT_CALL(*library(), WriteArrayI64(_, control, _, size_i64)) +// // .With(Args<2, 3>(ElementsAreArray(write_data_int64))) +// // .WillRepeatedly(::testing::Return(0)); + +// // // create some setup for reading +// // std::vector data_int32 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; +// // std::vector data_int64 = {11, 22, 33, 44, 55, 66, 77, 88, 99}; + +// // // Set expectation on the mocked fpga lib method. +// // EXPECT_CALL(*library(), ReadArrayI32(_, 0, ::testing::_, 10)) +// // .WillRepeatedly(::testing::DoAll(::testing::SetArrayArgument<2>(data_int32.begin(), data_int32.begin() + 10), ::testing::Return(0))); +// // EXPECT_CALL(*library(), ReadArrayI64(_, 0, ::testing::_, 9)) +// // .WillRepeatedly(::testing::DoAll(::testing::SetArrayArgument<2>(data_int64.begin(), data_int64.begin() + 9), ::testing::Return(0))); + +// // // Dont worry about deleting read_moniker32 and read_moniker64 since AddAllocated takes ownership of the ptr being passed in ensuring its destruction. +// // auto begin_write_i32_array_response = nidaqmx_grpc::experimental::client::begin_write_array_i32(stub(), *session, control); +// // auto write_moniker_i32 = new ni::data_monikers::Moniker(begin_write_i32_array_response.moniker()); +// // auto begin_write_i64_response = nidaqmx_grpc::experimental::client::begin_write_array_i64(stub(), *session, control); +// // auto write_moniker_i64 = new ni::data_monikers::Moniker(begin_write_i64_response.moniker()); + +// // // Dont worry about deleting read_moniker32 and read_moniker64 since AddAllocated takes ownership of the ptr being passed in ensuring its destruction. +// // auto begin_read_i32_array__response = nidaqmx_grpc::experimental::client::begin_read_array_i32(stub(), *session, 0, data_int32.size()); +// // auto read_moniker_i32 = new ni::data_monikers::Moniker(begin_read_i32_array__response.moniker()); +// // auto begin_read_i64_response = nidaqmx_grpc::experimental::client::begin_read_array_i64(stub(), *session, 0, data_int64.size()); +// // auto read_moniker_i64 = new ni::data_monikers::Moniker(begin_read_i64_response.moniker()); + +// // grpc::ClientContext moniker_context; +// // ni::data_monikers::BeginMonikerSidebandStreamRequest sideband_request; +// // ni::data_monikers::BeginMonikerSidebandStreamResponse sideband_response; +// // sideband_request.set_strategy(ni::data_monikers::SidebandStrategy::SOCKETS); +// // sideband_request.mutable_monikers()->mutable_read_monikers()->AddAllocated(read_moniker_i32); +// // sideband_request.mutable_monikers()->mutable_read_monikers()->AddAllocated(read_moniker_i64); +// // sideband_request.mutable_monikers()->mutable_write_monikers()->AddAllocated(write_moniker_i32); +// // sideband_request.mutable_monikers()->mutable_write_monikers()->AddAllocated(write_moniker_i64); + +// // auto write_stream = moniker_stub().get()->BeginSidebandStream(&moniker_context, sideband_request, &sideband_response); +// // auto sideband_token = InitClientSidebandData(sideband_response); + +// // for (int i = 0; i < 5; i++) { +// // // Write data +// // nidaqmx_grpc::ArrayI32Data write_values_array_i32; +// // nidaqmx_grpc::ArrayI64Data write_values_array_i64; + +// // write_values_array_i32.mutable_value()->Add(write_data_int32.begin(), write_data_int32.end()); +// // write_values_array_i64.mutable_value()->Add(write_data_int64.begin(), write_data_int64.end()); + +// // ni::data_monikers::SidebandWriteRequest write_data_request; +// // write_data_request.mutable_values()->add_values()->PackFrom(write_values_array_i32); +// // write_data_request.mutable_values()->add_values()->PackFrom(write_values_array_i64); + +// // WriteSidebandMessage(sideband_token, write_data_request); + +// // nidaqmx_grpc::MonikerReadArrayI32Response read_values_i32; +// // nidaqmx_grpc::MonikerReadArrayI64Response read_values_i64; + +// // ni::data_monikers::SidebandReadResponse read_result; +// // ReadSidebandMessage(sideband_token, &read_result); + +// // read_result.values().values(0).UnpackTo(&read_values_i32); +// // read_result.values().values(1).UnpackTo(&read_values_i64); +// // ASSERT_THAT(read_values_i32.array(), SizeIs(10)); +// // ASSERT_THAT(read_values_i32.array(), ElementsAreArray(data_int32)); +// // ASSERT_THAT(read_values_i64.array(), SizeIs(9)); +// // ASSERT_THAT(read_values_i64.array(), ElementsAreArray(data_int64)); +// // } + +// // ni::data_monikers::SidebandWriteRequest cancel_request; +// // cancel_request.set_cancel(true); +// // WriteSidebandMessage(sideband_token, cancel_request); +// // CloseSidebandData(sideband_token); +// // } + +} // namespace integration +} // namespace tests +} // namespace ni \ No newline at end of file From 90cf5eca3a936fb30a9b4311dd7acae87983d903 Mon Sep 17 00:00:00 2001 From: Rohan Doshi Date: Tue, 3 Dec 2024 13:14:17 +0530 Subject: [PATCH 23/25] fix merge issues --- source/codegen/metadata/nidaqmx/functions.py | 21 ------------------- source/codegen/templates/service_helpers.mako | 2 +- 2 files changed, 1 insertion(+), 22 deletions(-) diff --git a/source/codegen/metadata/nidaqmx/functions.py b/source/codegen/metadata/nidaqmx/functions.py index ba9c7deaa..a39c7bb0c 100644 --- a/source/codegen/metadata/nidaqmx/functions.py +++ b/source/codegen/metadata/nidaqmx/functions.py @@ -24703,7 +24703,6 @@ { 'ctypes_data_type': 'numpy.float64', 'direction': 'in', - 'grpc_streaming_type': 'ArrayDoubleData', 'is_list': True, 'is_optional_in_python': False, 'is_streaming_type': True, @@ -24715,7 +24714,6 @@ { 'ctypes_data_type': 'numpy.float64', 'direction': 'in', - 'grpc_streaming_type': 'ArrayDoubleData', 'is_list': True, 'is_optional_in_python': False, 'is_streaming_type': True, @@ -24727,7 +24725,6 @@ { 'ctypes_data_type': 'ctypes.c_int', 'direction': 'out', - 'grpc_streaming_type': 'I32Data', 'is_optional_in_python': False, 'is_streaming_type': True, 'name': 'numSampsPerChanWritten', @@ -24791,7 +24788,6 @@ { 'ctypes_data_type': 'ctypes.c_double', 'direction': 'in', - 'grpc_streaming_type': 'DoubleData', 'is_optional_in_python': False, 'is_streaming_type': True, 'name': 'frequency', @@ -24802,7 +24798,6 @@ { 'ctypes_data_type': 'ctypes.c_double', 'direction': 'in', - 'grpc_streaming_type': 'DoubleData', 'is_optional_in_python': False, 'is_streaming_type': True, 'name': 'dutyCycle', @@ -24885,7 +24880,6 @@ { 'ctypes_data_type': 'numpy.uint32', 'direction': 'in', - 'grpc_streaming_type': 'ArrayU32Data', 'is_list': True, 'is_optional_in_python': False, 'is_streaming_type': True, @@ -24897,7 +24891,6 @@ { 'ctypes_data_type': 'numpy.uint32', 'direction': 'in', - 'grpc_streaming_type': 'ArrayU32Data', 'is_list': True, 'is_optional_in_python': False, 'is_streaming_type': True, @@ -24909,7 +24902,6 @@ { 'ctypes_data_type': 'ctypes.c_int', 'direction': 'out', - 'grpc_streaming_type': 'I32Data', 'is_optional_in_python': False, 'is_streaming_type': True, 'name': 'numSampsPerChanWritten', @@ -24973,7 +24965,6 @@ { 'ctypes_data_type': 'ctypes.c_uint32', 'direction': 'in', - 'grpc_streaming_type': 'U32Data', 'is_streaming_type': True, 'name': 'highTicks', 'python_data_type': 'int', @@ -24982,7 +24973,6 @@ { 'ctypes_data_type': 'ctypes.c_uint32', 'direction': 'in', - 'grpc_streaming_type': 'U32Data', 'is_streaming_type': True, 'name': 'lowTicks', 'python_data_type': 'int', @@ -25063,7 +25053,6 @@ { 'ctypes_data_type': 'numpy.float64', 'direction': 'in', - 'grpc_streaming_type': 'ArrayDoubleData', 'is_list': True, 'is_optional_in_python': False, 'is_streaming_type': True, @@ -25075,7 +25064,6 @@ { 'ctypes_data_type': 'numpy.float64', 'direction': 'in', - 'grpc_streaming_type': 'ArrayDoubleData', 'is_list': True, 'is_optional_in_python': False, 'is_streaming_type': True, @@ -25087,7 +25075,6 @@ { 'ctypes_data_type': 'ctypes.c_int', 'direction': 'out', - 'grpc_streaming_type': 'I32Data', 'is_optional_in_python': False, 'is_streaming_type': True, 'name': 'numSampsPerChanWritten', @@ -25151,7 +25138,6 @@ { 'ctypes_data_type': 'ctypes.c_double', 'direction': 'in', - 'grpc_streaming_type': 'DoubleData', 'is_optional_in_python': False, 'is_streaming_type': True, 'name': 'highTime', @@ -25162,7 +25148,6 @@ { 'ctypes_data_type': 'ctypes.c_double', 'direction': 'in', - 'grpc_streaming_type': 'DoubleData', 'is_optional_in_python': False, 'is_streaming_type': True, 'name': 'lowTime', @@ -25245,7 +25230,6 @@ { 'ctypes_data_type': 'numpy.bool', 'direction': 'in', - 'grpc_streaming_type': 'ArrayU8Data', 'is_list': True, 'is_optional_in_python': False, 'is_streaming_type': True, @@ -25258,7 +25242,6 @@ { 'ctypes_data_type': 'ctypes.c_int', 'direction': 'out', - 'grpc_streaming_type': 'I32Data', 'is_optional_in_python': False, 'is_streaming_type': True, 'name': 'sampsPerChanWritten', @@ -25598,7 +25581,6 @@ { 'ctypes_data_type': 'numpy.uint8', 'direction': 'in', - 'grpc_streaming_type': 'ArrayU8Data', 'is_list': True, 'is_optional_in_python': False, 'is_streaming_type': True, @@ -25611,7 +25593,6 @@ { 'ctypes_data_type': 'ctypes.c_int', 'direction': 'out', - 'grpc_streaming_type': 'I32Data', 'is_optional_in_python': False, 'is_streaming_type': True, 'name': 'sampsPerChanWritten', @@ -25685,7 +25666,6 @@ { 'ctypes_data_type': 'numpy.generic', 'direction': 'in', - 'grpc_streaming_type': 'ArrayU8Data', 'is_optional_in_python': False, 'is_streaming_type': True, 'name': 'writeArray', @@ -25696,7 +25676,6 @@ { 'ctypes_data_type': 'ctypes.c_int', 'direction': 'out', - 'grpc_streaming_type': 'I32Data', 'is_optional_in_python': False, 'is_streaming_type': True, 'name': 'sampsPerChanWritten', diff --git a/source/codegen/templates/service_helpers.mako b/source/codegen/templates/service_helpers.mako index bfdfeb03c..20d20952a 100644 --- a/source/codegen/templates/service_helpers.mako +++ b/source/codegen/templates/service_helpers.mako @@ -1133,4 +1133,4 @@ ${copy_to_response_with_transform(source_buffer=parameter_name, parameter_name=p ${auto_decl}status = ${service_helpers.get_status_expression(function_data)}; % endif \ - + \ No newline at end of file From d7227100549131e7c9844bcdc78d956042a286f5 Mon Sep 17 00:00:00 2001 From: Rohan Doshi Date: Wed, 4 Dec 2024 22:52:37 +0530 Subject: [PATCH 24/25] cleanup --- .../ni_fake_daqmx_streaming_tests.cpp | 174 ++++-------------- 1 file changed, 34 insertions(+), 140 deletions(-) diff --git a/source/tests/integration/ni_fake_daqmx_streaming_tests.cpp b/source/tests/integration/ni_fake_daqmx_streaming_tests.cpp index e1976c9ba..c6c02e618 100644 --- a/source/tests/integration/ni_fake_daqmx_streaming_tests.cpp +++ b/source/tests/integration/ni_fake_daqmx_streaming_tests.cpp @@ -1,5 +1,7 @@ -#include #include +#include +#include + #include #include #include @@ -12,11 +14,8 @@ #include #include #include - #include -#include "nidaqmx/nidaqmx_client.h" - namespace ni { namespace tests { namespace integration { @@ -26,20 +25,17 @@ using namespace nidevice_grpc; namespace pb = ::google::protobuf; using CodeReadiness = nidevice_grpc::FeatureToggles::CodeReadiness; -// This test class is used to test the NiDAQmxService using a mocked daqmx library(NiDaqmxMockLibrary) +// This test class is used to test the NiDAQmxService using a mocked daqmx library(NiDAQmxMockLibrary) // We intend to use this class to test streaming apis in NiDAQmxService class NiFakeDAQmxStreamingTests : public ::testing::Test { private: - grpc::ServerBuilder builder_; std::shared_ptr session_repository_; std::shared_ptr library_; - std::shared_ptr>> services_; std::shared_ptr daqmxService_; std::shared_ptr moniker_service_; std::unique_ptr<::grpc::Server> server_; std::unique_ptr stub_; std::unique_ptr moniker_service_stub_; - std::thread* sideband_socket_thread_; std::atomic shutdown_{false}; public: @@ -94,7 +90,7 @@ class NiFakeDAQmxStreamingTests : public ::testing::Test { } }; -TEST_F(NiFakeDAQmxStreamingTests, StreamRead_scalar) +TEST_F(NiFakeDAQmxStreamingTests, StreamRead_Scalar) { auto session = std::make_unique(); @@ -114,16 +110,13 @@ TEST_F(NiFakeDAQmxStreamingTests, StreamRead_scalar) grpc::ClientContext moniker_context; ni::data_monikers::MonikerList read_requests; read_requests.mutable_read_monikers()->AddAllocated(read_moniker_u32); - auto stream = moniker_stub().get()->StreamRead(&moniker_context, read_requests); for (int i = 0; i < 5; i++) { // Read data nidaqmx_grpc::MonikerReadDigitalScalarU32Response read_value_u32; - ni::data_monikers::MonikerReadResponse read_result; stream->Read(&read_result); - read_result.data().values(0).UnpackTo(&read_value_u32); EXPECT_EQ(read_value_u32.value(), i + 1); } @@ -136,30 +129,28 @@ TEST_F(NiFakeDAQmxStreamingTests, StreamRead_Array) auto session = std::make_unique(); // create some data for the array - std::vector data_u32 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; + std::vector data_u32 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int size = data_u32.size(); // Set expectation on the mocked daqmx lib method. EXPECT_CALL(*library(), ReadDigitalU32(_, 1, 0, DAQmx_Val_GroupByChannel, ::testing::_, 10, _, _)) .WillRepeatedly(::testing::DoAll(::testing::SetArrayArgument<4>(data_u32.begin(), data_u32.begin() + size), ::testing::Return(0))); - // Dont worry about deleting read_moniker_i32 and read_moniker_i64 since AddAllocated takes ownership of the ptr being passed in ensuring its destruction. - auto begin_read_i32_array_response = nidaqmx_grpc::experimental::client::begin_read_digital_u32(stub(), *session, 1, 0, DAQmx_Val_GroupByChannel, 10); - auto read_moniker_i32 = new ni::data_monikers::Moniker(begin_read_i32_array_response.moniker()); + // Dont worry about deleting read_moniker_u32 since AddAllocated takes ownership of the ptr being passed in ensuring its destruction. + auto begin_read_digital_u32_response = nidaqmx_grpc::experimental::client::begin_read_digital_u32(stub(), *session, 1, 0, DAQmx_Val_GroupByChannel, 10); + auto read_moniker_u32 = new ni::data_monikers::Moniker(begin_read_digital_u32_response.moniker()); grpc::ClientContext moniker_context; ni::data_monikers::MonikerList read_requests; - read_requests.mutable_read_monikers()->AddAllocated(read_moniker_i32); + read_requests.mutable_read_monikers()->AddAllocated(read_moniker_u32); auto stream = moniker_stub().get()->StreamRead(&moniker_context, read_requests); for (int i = 0; i < 5; i++) { // Read data nidaqmx_grpc::MonikerReadDigitalU32Response read_values_u32; - ni::data_monikers::MonikerReadResponse read_result; stream->Read(&read_result); - read_result.data().values(0).UnpackTo(&read_values_u32); ASSERT_THAT(read_values_u32.read_array(), ElementsAreArray(data_u32)); } @@ -171,21 +162,21 @@ TEST_F(NiFakeDAQmxStreamingTests, StreamWrite_Array) { // create some setup for writing auto session = std::make_unique(); - std::vector data_int_i32 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; - int size_i32 = data_int_i32.size(); + std::vector data_int_u32 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; + int size = data_int_u32.size(); // Set expectation on the mocked fpga lib method. EXPECT_CALL(*library(), WriteDigitalU32(_, 10, TRUE, 0, DAQmx_Val_GroupByChannel, ::testing::_, _, _)) - .With(Args<5, 1>(ElementsAreArray(data_int_i32))) + .With(Args<5, 1>(ElementsAreArray(data_int_u32))) .WillRepeatedly(::testing::Return(0)); - // Dont worry about deleting write_moniker_i32 and write_moniker_i64 since AddAllocated takes ownership of the ptr being passed in ensuring its destruction. - auto begin_write_i32_array_response = nidaqmx_grpc::experimental::client::begin_write_digital_u32(stub(), *session, 10, TRUE, 0, DAQmx_Val_GroupByChannel); - auto write_moniker_i32 = new ni::data_monikers::Moniker(begin_write_i32_array_response.moniker()); + // Dont worry about deleting write_moniker_u32 since AddAllocated takes ownership of the ptr being passed in ensuring its destruction. + auto begin_write_digital_u32_response = nidaqmx_grpc::experimental::client::begin_write_digital_u32(stub(), *session, 10, TRUE, 0, DAQmx_Val_GroupByChannel); + auto write_moniker_u32 = new ni::data_monikers::Moniker(begin_write_digital_u32_response.moniker()); grpc::ClientContext moniker_context; ni::data_monikers::MonikerWriteRequest write_request; - write_request.mutable_monikers()->mutable_write_monikers()->AddAllocated(write_moniker_i32); + write_request.mutable_monikers()->mutable_write_monikers()->AddAllocated(write_moniker_u32); auto write_stream = moniker_stub().get()->StreamWrite(&moniker_context); write_stream->Write(write_request); @@ -193,12 +184,9 @@ TEST_F(NiFakeDAQmxStreamingTests, StreamWrite_Array) for (int i = 0; i < 5; i++) { // Write data nidaqmx_grpc::MonikerWriteDigitalU32Request write_digital_u32_request; - - write_digital_u32_request.mutable_write_array()->Add(data_int_i32.begin(), data_int_i32.end()); - + write_digital_u32_request.mutable_write_array()->Add(data_int_u32.begin(), data_int_u32.end()); ni::data_monikers::MonikerWriteRequest write_data_request; write_data_request.mutable_data()->add_values()->PackFrom(write_digital_u32_request); - write_stream->Write(write_data_request); } @@ -211,34 +199,33 @@ TEST_F(NiFakeDAQmxStreamingTests, StreamReadWrite_Array) auto session = std::make_unique(); // create some data for the array - std::vector data_int_i32 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; - int write_size_i32 = data_int_i32.size(); + std::vector data_int_u32 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; // Set expectation on the mocked fpga lib method. EXPECT_CALL(*library(), WriteDigitalU32(_, 10, TRUE, 0, DAQmx_Val_GroupByChannel, ::testing::_, _, _)) - .With(Args<5, 1>(ElementsAreArray(data_int_i32))) + .With(Args<5, 1>(ElementsAreArray(data_int_u32))) .WillRepeatedly(::testing::Return(0)); // create some setup for reading - std::vector data_u32 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; - int size = data_u32.size(); + std::vector data_u32 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; + int read_size = data_u32.size(); // Set expectation on the mocked fpga lib method. EXPECT_CALL(*library(), ReadDigitalU32(_, 1, 0, DAQmx_Val_GroupByChannel, ::testing::_, 10, _, _)) - .WillRepeatedly(::testing::DoAll(::testing::SetArrayArgument<4>(data_u32.begin(), data_u32.begin() + size), ::testing::Return(0))); + .WillRepeatedly(::testing::DoAll(::testing::SetArrayArgument<4>(data_u32.begin(), data_u32.begin() + read_size), ::testing::Return(0))); - // Dont worry about deleting write_moniker_i32 and write_moniker_i64 since AddAllocated takes ownership of the ptr being passed in ensuring its destruction. - auto begin_write_i32_array_response = nidaqmx_grpc::experimental::client::begin_write_digital_u32(stub(), *session, 10, TRUE, 0, DAQmx_Val_GroupByChannel); - auto write_moniker_i32 = new ni::data_monikers::Moniker(begin_write_i32_array_response.moniker()); + // Dont worry about deleting write_moniker_u32 since AddAllocated takes ownership of the ptr being passed in ensuring its destruction. + auto begin_write_digital_u32_response = nidaqmx_grpc::experimental::client::begin_write_digital_u32(stub(), *session, 10, TRUE, 0, DAQmx_Val_GroupByChannel); + auto write_moniker_u32 = new ni::data_monikers::Moniker(begin_write_digital_u32_response.moniker()); - // Dont worry about deleting read_moniker_i32 and read_moniker_i64 since AddAllocated takes ownership of the ptr being passed in ensuring its destruction. - auto begin_read_i32_array_response = nidaqmx_grpc::experimental::client::begin_read_digital_u32(stub(), *session, 1, 0, DAQmx_Val_GroupByChannel, 10); - auto read_moniker_i32 = new ni::data_monikers::Moniker(begin_read_i32_array_response.moniker()); + // Dont worry about deleting read_moniker_u32 and read_moniker_i64 since AddAllocated takes ownership of the ptr being passed in ensuring its destruction. + auto begin_read_digital_u32_response = nidaqmx_grpc::experimental::client::begin_read_digital_u32(stub(), *session, 1, 0, DAQmx_Val_GroupByChannel, 10); + auto read_moniker_u32 = new ni::data_monikers::Moniker(begin_read_digital_u32_response.moniker()); grpc::ClientContext moniker_context; ni::data_monikers::MonikerWriteRequest write_request; - write_request.mutable_monikers()->mutable_read_monikers()->AddAllocated(read_moniker_i32); - write_request.mutable_monikers()->mutable_write_monikers()->AddAllocated(write_moniker_i32); + write_request.mutable_monikers()->mutable_read_monikers()->AddAllocated(read_moniker_u32); + write_request.mutable_monikers()->mutable_write_monikers()->AddAllocated(write_moniker_u32); auto write_stream = moniker_stub().get()->StreamReadWrite(&moniker_context); write_stream->Write(write_request); @@ -246,116 +233,23 @@ TEST_F(NiFakeDAQmxStreamingTests, StreamReadWrite_Array) for (int i = 0; i < 5; i++) { // Write data nidaqmx_grpc::MonikerWriteDigitalU32Request write_digital_u32_request; - - write_digital_u32_request.mutable_write_array()->Add(data_int_i32.begin(), data_int_i32.end()); - + write_digital_u32_request.mutable_write_array()->Add(data_int_u32.begin(), data_int_u32.end()); ni::data_monikers::MonikerWriteRequest write_data_request; write_data_request.mutable_data()->add_values()->PackFrom(write_digital_u32_request); - write_stream->Write(write_data_request); + // Read data nidaqmx_grpc::MonikerReadDigitalU32Response read_values_u32; - ni::data_monikers::MonikerReadResponse read_result; write_stream->Read(&read_result); - read_result.data().values(0).UnpackTo(&read_values_u32); - ASSERT_THAT(read_values_u32.read_array(), SizeIs(size)); + ASSERT_THAT(read_values_u32.read_array(), SizeIs(read_size)); ASSERT_THAT(read_values_u32.read_array(), ElementsAreArray(data_u32)); } write_stream->WritesDone(); moniker_context.TryCancel(); } - -// // // disable this test since we are not supporting sideband streaming inprocess - -// // TEST_F(NiFakeFpgaStreamingTests, DISABLED_SidebandStreamReadWrite_Array) -// // { -// // auto session = std::make_unique(); -// // // create some data for the array -// // std::vector write_data_int32 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; -// // std::vector write_data_int64 = {11, 22, 33, 44, 55, 66, 77, 88, 99}; -// // int control = 1; -// // int size_i32 = write_data_int32.size(); -// // int size_i64 = write_data_int64.size(); - -// // // Set expectation on the mocked fpga lib method. -// // EXPECT_CALL(*library(), WriteArrayI32(_, control, _, size_i32)) -// // .With(Args<2, 3>(ElementsAreArray(write_data_int32))) -// // .WillRepeatedly(::testing::Return(0)); -// // EXPECT_CALL(*library(), WriteArrayI64(_, control, _, size_i64)) -// // .With(Args<2, 3>(ElementsAreArray(write_data_int64))) -// // .WillRepeatedly(::testing::Return(0)); - -// // // create some setup for reading -// // std::vector data_int32 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; -// // std::vector data_int64 = {11, 22, 33, 44, 55, 66, 77, 88, 99}; - -// // // Set expectation on the mocked fpga lib method. -// // EXPECT_CALL(*library(), ReadArrayI32(_, 0, ::testing::_, 10)) -// // .WillRepeatedly(::testing::DoAll(::testing::SetArrayArgument<2>(data_int32.begin(), data_int32.begin() + 10), ::testing::Return(0))); -// // EXPECT_CALL(*library(), ReadArrayI64(_, 0, ::testing::_, 9)) -// // .WillRepeatedly(::testing::DoAll(::testing::SetArrayArgument<2>(data_int64.begin(), data_int64.begin() + 9), ::testing::Return(0))); - -// // // Dont worry about deleting read_moniker32 and read_moniker64 since AddAllocated takes ownership of the ptr being passed in ensuring its destruction. -// // auto begin_write_i32_array_response = nidaqmx_grpc::experimental::client::begin_write_array_i32(stub(), *session, control); -// // auto write_moniker_i32 = new ni::data_monikers::Moniker(begin_write_i32_array_response.moniker()); -// // auto begin_write_i64_response = nidaqmx_grpc::experimental::client::begin_write_array_i64(stub(), *session, control); -// // auto write_moniker_i64 = new ni::data_monikers::Moniker(begin_write_i64_response.moniker()); - -// // // Dont worry about deleting read_moniker32 and read_moniker64 since AddAllocated takes ownership of the ptr being passed in ensuring its destruction. -// // auto begin_read_i32_array__response = nidaqmx_grpc::experimental::client::begin_read_array_i32(stub(), *session, 0, data_int32.size()); -// // auto read_moniker_i32 = new ni::data_monikers::Moniker(begin_read_i32_array__response.moniker()); -// // auto begin_read_i64_response = nidaqmx_grpc::experimental::client::begin_read_array_i64(stub(), *session, 0, data_int64.size()); -// // auto read_moniker_i64 = new ni::data_monikers::Moniker(begin_read_i64_response.moniker()); - -// // grpc::ClientContext moniker_context; -// // ni::data_monikers::BeginMonikerSidebandStreamRequest sideband_request; -// // ni::data_monikers::BeginMonikerSidebandStreamResponse sideband_response; -// // sideband_request.set_strategy(ni::data_monikers::SidebandStrategy::SOCKETS); -// // sideband_request.mutable_monikers()->mutable_read_monikers()->AddAllocated(read_moniker_i32); -// // sideband_request.mutable_monikers()->mutable_read_monikers()->AddAllocated(read_moniker_i64); -// // sideband_request.mutable_monikers()->mutable_write_monikers()->AddAllocated(write_moniker_i32); -// // sideband_request.mutable_monikers()->mutable_write_monikers()->AddAllocated(write_moniker_i64); - -// // auto write_stream = moniker_stub().get()->BeginSidebandStream(&moniker_context, sideband_request, &sideband_response); -// // auto sideband_token = InitClientSidebandData(sideband_response); - -// // for (int i = 0; i < 5; i++) { -// // // Write data -// // nidaqmx_grpc::ArrayI32Data write_values_array_i32; -// // nidaqmx_grpc::ArrayI64Data write_values_array_i64; - -// // write_values_array_i32.mutable_value()->Add(write_data_int32.begin(), write_data_int32.end()); -// // write_values_array_i64.mutable_value()->Add(write_data_int64.begin(), write_data_int64.end()); - -// // ni::data_monikers::SidebandWriteRequest write_data_request; -// // write_data_request.mutable_values()->add_values()->PackFrom(write_values_array_i32); -// // write_data_request.mutable_values()->add_values()->PackFrom(write_values_array_i64); - -// // WriteSidebandMessage(sideband_token, write_data_request); - -// // nidaqmx_grpc::MonikerReadArrayI32Response read_values_i32; -// // nidaqmx_grpc::MonikerReadArrayI64Response read_values_i64; - -// // ni::data_monikers::SidebandReadResponse read_result; -// // ReadSidebandMessage(sideband_token, &read_result); - -// // read_result.values().values(0).UnpackTo(&read_values_i32); -// // read_result.values().values(1).UnpackTo(&read_values_i64); -// // ASSERT_THAT(read_values_i32.array(), SizeIs(10)); -// // ASSERT_THAT(read_values_i32.array(), ElementsAreArray(data_int32)); -// // ASSERT_THAT(read_values_i64.array(), SizeIs(9)); -// // ASSERT_THAT(read_values_i64.array(), ElementsAreArray(data_int64)); -// // } - -// // ni::data_monikers::SidebandWriteRequest cancel_request; -// // cancel_request.set_cancel(true); -// // WriteSidebandMessage(sideband_token, cancel_request); -// // CloseSidebandData(sideband_token); -// // } - } // namespace integration } // namespace tests } // namespace ni \ No newline at end of file From 4daef3177a1478a0f1680384149c4696025c564e Mon Sep 17 00:00:00 2001 From: Rohan Doshi Date: Wed, 4 Dec 2024 23:25:37 +0530 Subject: [PATCH 25/25] Update CMakeLists.txt --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b6fc04c40..5e882611d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -746,7 +746,7 @@ target_include_directories(UnitTestsRunner PRIVATE "${service_output_dir}/nifake_non_ivi" PRIVATE "source/server") - target_link_libraries(UnitTestsRunner +target_link_libraries(UnitTestsRunner ${CMAKE_DL_LIBS} ${server_lib_deps} gmock